From 1ce2fee3156858e132dbc1c90f72a32f526de988 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 Reviewed-on: https://review.whamcloud.com/46157 Tested-by: jenkins Reviewed-by: Alex Zhuravlev Tested-by: Maloo Reviewed-by: Andreas Dilger --- 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 3b0267e..8dfe6141 100644 --- a/lustre/llite/namei.c +++ b/lustre/llite/namei.c @@ -1659,11 +1659,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