lustre-devel-lustre.org archive mirror
 help / color / mirror / Atom feed
* [lustre-devel] mdc_resource_inode_free()
@ 2020-12-22 20:25 Sudheendra Sampath
  2020-12-31  0:52 ` Andreas Dilger
  0 siblings, 1 reply; 2+ messages in thread
From: Sudheendra Sampath @ 2020-12-22 20:25 UTC (permalink / raw)
  To: lustre-devel


[-- Attachment #1.1: Type: text/plain, Size: 423 bytes --]

Hi,

I was trying to understand more about LDLM, specifically Lock Value Block
(LVB's) and stumbled upon the following code block :

static int mdc_resource_inode_free(struct ldlm_resource *res)
{
        if (res->lr_lvb_inode)
                res->lr_lvb_inode = NULL;

        return 0;
}

Shouldn't the pointer (lr_lvb_inode) be freed before assigning it to NULL
?

Just curious to know.
-- 
Regards

Sudheendra Sampath

[-- Attachment #1.2: Type: text/html, Size: 683 bytes --]

[-- Attachment #2: Type: text/plain, Size: 165 bytes --]

_______________________________________________
lustre-devel mailing list
lustre-devel@lists.lustre.org
http://lists.lustre.org/listinfo.cgi/lustre-devel-lustre.org

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [lustre-devel] mdc_resource_inode_free()
  2020-12-22 20:25 [lustre-devel] mdc_resource_inode_free() Sudheendra Sampath
@ 2020-12-31  0:52 ` Andreas Dilger
  0 siblings, 0 replies; 2+ messages in thread
From: Andreas Dilger @ 2020-12-31  0:52 UTC (permalink / raw)
  To: Sudheendra Sampath; +Cc: lustre-devel


[-- Attachment #1.1: Type: text/plain, Size: 1256 bytes --]

On Dec 22, 2020, at 13:25, Sudheendra Sampath <sudheendra.sampath@gmail.com<mailto:sudheendra.sampath@gmail.com>> wrote:

Hi,

I was trying to understand more about LDLM, specifically Lock Value Block (LVB's) and stumbled upon the following code block :

static int mdc_resource_inode_free(struct ldlm_resource *res)
{
        if (res->lr_lvb_inode)
                res->lr_lvb_inode = NULL;

        return 0;
}

Shouldn't the pointer (lr_lvb_inode) be freed before assigning it to NULL ?

Just curious to know.

The "lr_lvb_inode" pointer is a pointer to the VFS inode that is referencing a lock/resource:

int mdc_set_lock_data(struct obd_export *exp, const struct lustre_handle *lockh,
                      void *data, __u64 *bits)
{
        struct inode *new_inode = data;
        :
        lock->l_resource->lr_lvb_inode = new_inode;
}

The inode is allocated/freed separately by the VFS.  The lr_lvb_inode pointer is used to quickly find the VFS inode from a DLM resource, but does not take a reference on the inode itself.  Otherwise, the inode would always have an elevated reference count and would never be freed by the VFS.

Cheers, Andreas
--
Andreas Dilger
Principal Lustre Architect
Whamcloud







[-- Attachment #1.2: Type: text/html, Size: 4478 bytes --]

[-- Attachment #2: Type: text/plain, Size: 165 bytes --]

_______________________________________________
lustre-devel mailing list
lustre-devel@lists.lustre.org
http://lists.lustre.org/listinfo.cgi/lustre-devel-lustre.org

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2020-12-31  0:52 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-12-22 20:25 [lustre-devel] mdc_resource_inode_free() Sudheendra Sampath
2020-12-31  0:52 ` Andreas Dilger

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).