From: Alex Zhuravlev Date: Thu, 26 Jan 2023 07:34:25 +0000 (+0300) Subject: LU-16159 osp: destroy should not overtake writes X-Git-Tag: 2.15.54~17 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=5a5bd5b4dafaf252c641b8afd2cd809de7384f4f;p=fs%2Flustre-release.git LU-16159 osp: destroy should not overtake writes use transaction versioning for object destroy so that destroy doesn't overtake writes, so writes don't hit non-existing objects. Test-Parameters: mdscount=2 mdtcount=4 testlist=replay-single env=ONLY="70b 71a 119",ONLY_REPEAT=10 Test-Parameters: mdscount=2 mdtcount=4 testlist=replay-single env=ONLY="70b 71a 119",ONLY_REPEAT=10 Test-Parameters: mdscount=2 mdtcount=4 testlist=replay-single env=ONLY="70b 71a 119",ONLY_REPEAT=10 Test-Parameters: mdscount=2 mdtcount=4 testlist=replay-single env=ONLY="70b 71a 119",ONLY_REPEAT=10 Test-Parameters: mdscount=2 mdtcount=4 testlist=replay-single env=ONLY="70b 71a 119",ONLY_REPEAT=10 Test-Parameters: mdscount=2 mdtcount=4 testlist=replay-single env=ONLY="70b 71a 119",ONLY_REPEAT=10 Test-Parameters: mdscount=2 mdtcount=4 testlist=replay-single env=ONLY="70b 71a 119",ONLY_REPEAT=10 Test-Parameters: mdscount=2 mdtcount=4 testlist=replay-single env=ONLY="70b 71a 119",ONLY_REPEAT=10 Test-Parameters: mdscount=2 mdtcount=4 testlist=replay-single env=ONLY="70b 71a 119",ONLY_REPEAT=10 Test-Parameters: mdscount=2 mdtcount=4 testlist=replay-single env=ONLY="70b 71a 119",ONLY_REPEAT=10 Test-Parameters: mdscount=2 mdtcount=4 testlist=replay-single env=ONLY="70b 71a 119",ONLY_REPEAT=10 Test-Parameters: mdscount=2 mdtcount=4 testlist=replay-single env=ONLY="70b 71a 119",ONLY_REPEAT=10 Test-Parameters: mdscount=2 mdtcount=4 testlist=replay-single env=ONLY="70b 71a 119",ONLY_REPEAT=10 Test-Parameters: mdscount=2 mdtcount=4 testlist=replay-single env=ONLY="70b 71a 119",ONLY_REPEAT=10 Test-Parameters: mdscount=2 mdtcount=4 testlist=replay-single env=ONLY="70b 71a 119",ONLY_REPEAT=10 Test-Parameters: mdscount=2 mdtcount=4 testlist=replay-single env=ONLY="70b 71a 119",ONLY_REPEAT=10 Test-Parameters: mdscount=2 mdtcount=4 testlist=replay-single env=ONLY="70b 71a 119",ONLY_REPEAT=10 Test-Parameters: mdscount=2 mdtcount=4 testlist=replay-single env=ONLY="70b 71a 119",ONLY_REPEAT=10 Test-Parameters: mdscount=2 mdtcount=4 testlist=replay-single env=ONLY="70b 71a 119",ONLY_REPEAT=10 Test-Parameters: mdscount=2 mdtcount=4 testlist=replay-single env=ONLY="70b 71a 119",ONLY_REPEAT=10 Test-Parameters: mdscount=2 mdtcount=4 testlist=replay-single env=ONLY="70b 71a 119",ONLY_REPEAT=10 Test-Parameters: mdscount=2 mdtcount=4 testlist=replay-single env=ONLY="70b 71a 119",ONLY_REPEAT=10 Test-Parameters: mdscount=2 mdtcount=4 testlist=replay-single env=ONLY="70b 71a 119",ONLY_REPEAT=10 Test-Parameters: mdscount=2 mdtcount=4 testlist=replay-single env=ONLY="70b 71a 119",ONLY_REPEAT=10 Test-Parameters: mdscount=2 mdtcount=4 testlist=replay-single env=ONLY="70b 71a 119",ONLY_REPEAT=10 Test-Parameters: mdscount=2 mdtcount=4 testlist=replay-single env=ONLY="70b 71a 119",ONLY_REPEAT=10 Test-Parameters: mdscount=2 mdtcount=4 testlist=replay-single env=ONLY="70b 71a 119",ONLY_REPEAT=10 Test-Parameters: mdscount=2 mdtcount=4 testlist=replay-single env=ONLY="70b 71a 119",ONLY_REPEAT=10 Test-Parameters: mdscount=2 mdtcount=4 testlist=replay-single env=ONLY="70b 71a 119",ONLY_REPEAT=10 Test-Parameters: mdscount=2 mdtcount=4 testlist=replay-single env=ONLY="70b 71a 119",ONLY_REPEAT=10 Fixes: b054fcd785 ("LU-16159 lod: cancel update llogs upon recovery abort") Signed-off-by: Alex Zhuravlev Change-Id: Iec2a5c72f27825820d36ebbe20d55fa303358982 Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/49787 Reviewed-by: Lai Siyao Reviewed-by: Andreas Dilger Reviewed-by: Oleg Drokin Tested-by: Maloo Tested-by: jenkins --- diff --git a/lustre/obdclass/llog.c b/lustre/obdclass/llog.c index 81e2c9f..adac984 100644 --- a/lustre/obdclass/llog.c +++ b/lustre/obdclass/llog.c @@ -192,6 +192,7 @@ int llog_destroy(const struct lu_env *env, struct llog_handle *handle) th = dt_trans_create(env, dt); if (IS_ERR(th)) RETURN(PTR_ERR(th)); + th->th_wait_submit = 1; rc = llog_declare_destroy(env, handle, th); if (rc != 0) diff --git a/lustre/osp/osp_md_object.c b/lustre/osp/osp_md_object.c index 502dce0..13bb6e1 100644 --- a/lustre/osp/osp_md_object.c +++ b/lustre/osp/osp_md_object.c @@ -1070,6 +1070,7 @@ int osp_md_destroy(const struct lu_env *env, struct dt_object *dt, struct osp_object *o = dt2osp_obj(dt); struct osp_device *osp = lu2osp_dev(dt->do_lu.lo_dev); struct osp_update_request *update; + struct osp_thandle *oth = thandle_to_osp_thandle(th); int rc = 0; ENTRY; @@ -1085,6 +1086,12 @@ int osp_md_destroy(const struct lu_env *env, struct dt_object *dt, if (rc != 0) RETURN(rc); + /* + * the object can be stale (due to lost LDLM lock), but + * we still want to destroy it + */ + osp_check_and_set_rpc_version(oth, o); + /* retain the object and it's status until it's destroyed on remote */ rc = osp_insert_update_callback(env, update, o, NULL, osp_destroy_interpreter);