adilger at whamcloud.com
Wed Dec 30 16:52:21 PST 2020
On Dec 22, 2020, at 13:25, Sudheendra Sampath <sudheendra.sampath at gmail.com<mailto:sudheendra.sampath at gmail.com>> wrote:
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)
res->lr_lvb_inode = NULL;
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.
Principal Lustre Architect
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the lustre-devel