On Dec 22, 2020, at 13:25, Sudheendra Sampath > 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