From b415b6bf22ec8c52f9f4f7ba640f75151f55c662 Mon Sep 17 00:00:00 2001 From: Sergey Cheremencev Date: Fri, 13 Dec 2024 07:42:33 +0300 Subject: [PATCH] LU-18596 ldlm: avoid LBUG in ll_lock_cancel_bits 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 Change-Id: Ifb75b0ed32062f24c67503548cf2e321ebbc9759 Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/57577 Tested-by: Maloo Tested-by: jenkins Reviewed-by: Patrick Farrell Reviewed-by: Oleg Drokin Reviewed-by: Mikhail Pershin Reviewed-by: Andreas Dilger --- lustre/llite/llite_lib.c | 7 +++++++ lustre/llite/namei.c | 7 ------- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lustre/llite/llite_lib.c b/lustre/llite/llite_lib.c index de47597..5ced67f 100644 --- a/lustre/llite/llite_lib.c +++ b/lustre/llite/llite_lib.c @@ -1640,6 +1640,13 @@ struct inode *ll_inode_from_resource_lock(struct ldlm_lock *lock) 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 : diff --git a/lustre/llite/namei.c b/lustre/llite/namei.c index 41c74b0..f5d7a93 100644 --- a/lustre/llite/namei.c +++ b/lustre/llite/namei.c @@ -267,13 +267,6 @@ static void ll_lock_cancel_bits(struct ldlm_lock *lock, 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; -- 1.8.3.1