From: Yang Sheng Date: Wed, 28 Oct 2020 13:03:47 +0000 (+0800) Subject: LU-14082 ldlm: Use req_mode while lock cleanup X-Git-Tag: 2.14.0-RC1~40 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=a11c18cbab00d0300b8f025b45090b08ba748f5e;hp=2373df10116755545b4aa380c31ecabf1b52abca LU-14082 ldlm: Use req_mode while lock cleanup For local lock, the decref cannot count exactly by granted_mode if the lock has not been granted. LustreError: (ldlm_lock.c:354:ldlm_lock_destroy_internal()) ### lock still has references ns: ?? lock: ffff88342aa07200/0x9b92ad3407bea22a lrc: 4/0,1 mode: --/PW res: ?? rrc=?? type: ??? flags: 0x10106400000000 nid: local remote: 0x5248822d3123ac19 expref: -99 pid: 14515 timeout: 0 lvb_type: 0 LustreError: (ldlm_lock.c:355:ldlm_lock_destroy_internal()) LBUG Pid: 14562, comm: ll_imp_inval 3.10.0-693.21.1.el7.x86_64 #1 SMP Call Trace: [] save_stack_trace_tsk+0x22/0x40 [] libcfs_call_trace+0x8c/0xc0 [libcfs] [] lbug_with_loc+0x4c/0xa0 [libcfs] [] ldlm_lock_destroy_internal+0x269/0x2a0 [ptlrpc] [] ldlm_lock_destroy_nolock+0x2b/0x110 [ptlrpc] [] ldlm_flock_completion_ast+0x4f5/0x1080 [ptlrpc] [] cleanup_resource+0x18e/0x370 [ptlrpc] [] ldlm_resource_clean+0x53/0x60 [ptlrpc] [] cfs_hash_for_each_relax+0x250/0x450 [libcfs] [] cfs_hash_for_each_nolock+0x75/0x1c0 [libcfs] [] ldlm_namespace_cleanup+0x30/0xc0 [ptlrpc] [] mdc_import_event+0x1b6/0xa20 [mdc] [] ptlrpc_invalidate_import+0x220/0x8f0 [ptlrpc] [] ptlrpc_invalidate_import_thread+0x48/0x2b0 [ptlrpc] [] kthread+0xd1/0xe0 Signed-off-by: Yang Sheng Change-Id: Ic029b3fb82a3dedc507e2bada265322efae5b40c Reviewed-on: https://review.whamcloud.com/40433 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Andreas Dilger Reviewed-by: Bobi Jam Reviewed-by: Alex Zhuravlev Reviewed-by: Oleg Drokin --- diff --git a/lustre/ldlm/ldlm_flock.c b/lustre/ldlm/ldlm_flock.c index 92f7aa5..d5f740f 100644 --- a/lustre/ldlm/ldlm_flock.c +++ b/lustre/ldlm/ldlm_flock.c @@ -763,7 +763,7 @@ granted: if (ldlm_is_test_lock(lock) || ldlm_is_flock_deadlock(lock)) mode = getlk->fl_type; else - mode = lock->l_granted_mode; + mode = lock->l_req_mode; if (ldlm_is_flock_deadlock(lock)) { LDLM_DEBUG(lock, "client-side enqueue deadlock "