From 718388cbf68d8bcac4e4a24f3ca88f0da5891488 Mon Sep 17 00:00:00 2001 From: Bruno Faccini Date: Wed, 30 Oct 2019 11:38:48 +0100 Subject: [PATCH] LU-12914 mdt: mdt_prep_ma_buf_from_rep() is called twice In some rare cases (replay of file open with O_LOV_DELAY_CREATE when object found dead on mdt) mdt_prep_ma_buf_from_rep() can be called twice (in either mdt_reint_open() and mdt_open_by_fid()) during the same request handling. So remove assert checking if LMV or LOV has already been found and set in ma. Signed-off-by: Bruno Faccini Change-Id: I78e0456ea59c37cab4276383c75c4fa5cc9f4829 Reviewed-on: https://review.whamcloud.com/36611 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Patrick Farrell Reviewed-by: Lai Siyao Reviewed-by: Mike Pershin Reviewed-by: Oleg Drokin --- lustre/mdt/mdt_open.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lustre/mdt/mdt_open.c b/lustre/mdt/mdt_open.c index 98f80b8..967d04a 100644 --- a/lustre/mdt/mdt_open.c +++ b/lustre/mdt/mdt_open.c @@ -307,7 +307,15 @@ static void mdt_prep_ma_buf_from_rep(struct mdt_thread_info *info, struct mdt_object *obj, struct md_attr *ma) { - LASSERT(ma->ma_lmv == NULL && ma->ma_lmm == NULL); + if (ma->ma_lmv || ma->ma_lmm) { + CDEBUG(D_INFO, DFID " %s already set.\n", + PFID(mdt_object_fid(obj)), + ma->ma_lmv ? (ma->ma_lmm ? "ma_lmv and ma_lmm" + : "ma_lmv") + : "ma_lmm"); + return; + } + if (S_ISDIR(obj->mot_header.loh_attr)) { ma->ma_lmv = req_capsule_server_get(info->mti_pill, &RMF_MDT_MD); -- 1.8.3.1