Whamcloud - gitweb
LU-13070 mdd: try old format for orphan names during recovery 49/37049/3
authorArtem Blagodarenko <c17828@cray.com>
Tue, 17 Dec 2019 09:12:36 +0000 (12:12 +0300)
committerOleg Drokin <green@whamcloud.com>
Fri, 3 Jan 2020 00:08:37 +0000 (00:08 +0000)
mdd_orphan_destroy() loop caused by compatibility issue on upgrade to
2.11 or later. The format for names of orphans in the PENDING directory
was changed in Lustre 2.11. The old format names are not recognized by
mdd_orphan_destroy() in Lustre 2.11, but compatibility code added to
handle this was incomplete, leading to an endless loop. There's a check
for the old format name, used in mdd_orphan_delete(), but that check
was not included in mdd_orphan_destroy().

This patch adds compatibility check for mdd_orphan_destroy().

Fixes: a02fd4573fe ("LU-7787 mdd: clean up orphan object handling")
Signed-off-by: Artem Blagodarenko <c17828@cray.com>
Cray-bug-id: LUS-8270
Change-Id: I9f42188dcb00f9d536996c14771de7df02502b40
Reviewed-on: https://review.whamcloud.com/37049
Tested-by: jenkins <devops@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Jian Yu <yujian@whamcloud.com>
Reviewed-by: Yang Sheng <ys@whamcloud.com>

index 3fa6b8b..2027d20 100644 (file)
@@ -323,6 +323,10 @@ static int mdd_orphan_destroy(const struct lu_env *env, struct mdd_object *obj,
        if (likely(obj->mod_count == 0)) {
                dt_write_lock(env, mdd->mdd_orphans, DT_TGT_ORPHAN);
                rc = dt_delete(env, mdd->mdd_orphans, key, th);
+               if (rc == -ENOENT) {
+                       key = mdd_orphan_key_fill_20(env, mdo2fid(obj));
+                       rc = dt_delete(env, mdd->mdd_orphans, key, th);
+               }
                if (rc) {
                        CERROR("%s: could not delete orphan "DFID": rc = %d\n",
                               mdd2obd_dev(mdd)->obd_name, PFID(mdo2fid(obj)),