From: Alex Zhuravlev Date: Sat, 13 Feb 2016 14:51:27 +0000 (+0300) Subject: LU-7579 mdd: do not mark object as an orphan early X-Git-Tag: 2.8.51~73 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=1fd624857218bd5f7ae1529d3fee8933c9cb8a75 LU-7579 mdd: do not mark object as an orphan early do not set LUSTRE_ORPHAN_FL before calling __mdd_orphan_add() as racing mdd_la_get() may set ORPHAN_OBJ causing an false assertion in __mdd_orphan_add(). Change-Id: If8a9417cdb3c0a9d1e96ac1345e841dc5fc89b53 Signed-off-by: Alex Zhuravlev Reviewed-on: http://review.whamcloud.com/18444 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: John L. Hammond Reviewed-by: Yang Sheng Reviewed-by: Oleg Drokin --- diff --git a/lustre/mdd/mdd_dir.c b/lustre/mdd/mdd_dir.c index 6f7f17c..22c3f2b 100644 --- a/lustre/mdd/mdd_dir.c +++ b/lustre/mdd/mdd_dir.c @@ -1467,10 +1467,6 @@ int mdd_finish_unlink(const struct lu_env *env, * will be deleted during mdd_close() */ obj->mod_flags |= DEAD_OBJ; if (obj->mod_count) { - rc = mdd_mark_orphan_object(env, obj, th, false); - if (rc != 0) - RETURN(rc); - rc = __mdd_orphan_add(env, obj, th); if (rc == 0) CDEBUG(D_HA, "Object "DFID" is inserted into " @@ -1483,6 +1479,12 @@ int mdd_finish_unlink(const struct lu_env *env, "open replay\n", PFID(mdd_object_fid(obj)), obj->mod_count); + + /* mark object as an orphan here, not + * before __mdd_orphan_add() as racing + * mdd_la_get() may propagate ORPHAN_OBJ + * causing the asserition */ + rc = mdd_mark_orphan_object(env, obj, th, false); } else { rc = mdo_destroy(env, obj, th); }