From d46e8deb9c0e680e195ef4d2c8755f25ad27865f Mon Sep 17 00:00:00 2001 From: Lai Siyao Date: Mon, 17 Jan 2022 23:29:19 -0500 Subject: [PATCH] LU-15456 llite: deadlock in ll_new_node() ll_new_node() will call ll_dir_getstripe() to fetch parent default LMV if md_create() returns -EREMOTE, it should call ll_finish_md_op_data() before calling ll_dir_getstripe() because the latter will lock lli_lsm_sem again, which will deadlock. Fixes: 55ca00c3d1cd863 ("LU-11213 ptlrpc: intent_getattr fetches default LMV") Test-Parameters: mdscount=2 mdtcount=4 testlist=racer,racer,racer Signed-off-by: Lai Siyao Change-Id: Ib858bae19ff88533fe487583c27d544026aafa3f --- lustre/llite/namei.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lustre/llite/namei.c b/lustre/llite/namei.c index 80b8460..49f8d05 100644 --- a/lustre/llite/namei.c +++ b/lustre/llite/namei.c @@ -1643,11 +1643,11 @@ again: ptlrpc_req_finished(request); request = NULL; + ll_finish_md_op_data(op_data); + op_data = NULL; err2 = ll_dir_getstripe(dir, (void **)&lum, &lumsize, &request, OBD_MD_DEFAULT_MEA); - ll_finish_md_op_data(op_data); - op_data = NULL; if (err2 == 0) { struct lustre_md md = { NULL }; -- 1.8.3.1