Check that resource and appropriate inode FIDs are
equivalent under ldlm_lock and resource locks in
ll_inode_resrouce_from_lock. While it was in
ll_lock_cancel_bits it might cause following panic:
ll_lock_cancel_bits()) ### data mismatch with object
ll_lock_cancel_bits()) LBUG
Signed-off-by: Sergey Cheremencev <scherementsev@ddn.com>
Change-Id: Ifb75b0ed32062f24c67503548cf2e321ebbc9759
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/57577
Tested-by: Maloo <maloo@whamcloud.com>
Tested-by: jenkins <devops@whamcloud.com>
Reviewed-by: Patrick Farrell <pfarrell@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Reviewed-by: Mikhail Pershin <mpershin@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
lli = ll_i2info(lock->l_resource->lr_lvb_inode);
if (lli->lli_inode_magic == LLI_INODE_MAGIC) {
inode = igrab(lock->l_resource->lr_lvb_inode);
+ if (inode && !fid_res_name_eq(ll_inode2fid(inode),
+ &lock->l_resource->lr_name)) {
+ LDLM_ERROR(lock,
+ "data mismatch with object "DFID"(%p)",
+ PFID(ll_inode2fid(inode)), inode);
+ LBUG();
+ }
} else {
inode = lock->l_resource->lr_lvb_inode;
LDLM_DEBUG_LIMIT(inode->i_state & I_FREEING ? D_INFO :
RETURN_EXIT;
}
- if (!fid_res_name_eq(ll_inode2fid(inode),
- &lock->l_resource->lr_name)) {
- LDLM_ERROR(lock, "data mismatch with object "DFID"(%p)",
- PFID(ll_inode2fid(inode)), inode);
- LBUG();
- }
-
if (bits & MDS_INODELOCK_XATTR) {
ll_xattr_cache_empty(inode);
bits &= ~MDS_INODELOCK_XATTR;