Whamcloud - gitweb
LU-12914 mdt: mdt_prep_ma_buf_from_rep() is called twice 11/36611/3
authorBruno Faccini <bruno.faccini@intel.com>
Wed, 30 Oct 2019 10:38:48 +0000 (11:38 +0100)
committerOleg Drokin <green@whamcloud.com>
Sun, 1 Mar 2020 05:34:44 +0000 (05:34 +0000)
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 <bruno.faccini@intel.com>
Change-Id: I78e0456ea59c37cab4276383c75c4fa5cc9f4829
Reviewed-on: https://review.whamcloud.com/36611
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Patrick Farrell <farr0186@gmail.com>
Reviewed-by: Lai Siyao <lai.siyao@whamcloud.com>
Reviewed-by: Mike Pershin <mpershin@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/mdt/mdt_open.c

index 98f80b8..967d04a 100644 (file)
@@ -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);