* [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).