Hotfix to prevent possible data loss during WRITE replay.
Since commit
f0f92773ee18 from LU-14187 the obd_commitrw()
may restart write transaction in OFD and MDT. That causes
transaction number to be assigned multiple times if such
restart happens. Without flag tti_mult_trans the first
transaction number is stored only so later one could remain
not applied causing data loss after recovery.
Patch sets tti_mult_trans for tgt_brw_write() so the latest
transaction number will be used as request transno.
Fixes:
f0f92773ee ("LU-14187 osd-ldiskfs: fix locking in write commit")
Signed-off-by: Mikhail Pershin <mpershin@whamcloud.com>
Change-Id: I364b478591942be5562c3e98ee6e6aa487f3e0c5
Reviewed-on: https://review.whamcloud.com/47371
Tested-by: jenkins <devops@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Alex Zhuravlev <bzzz@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Wang Shilong <wangshilong1991@gmail.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
int tgt_brw_write(struct tgt_session_info *tsi)
{
+ struct tgt_thread_info *tti = tgt_th_info(tsi->tsi_env);
struct ptlrpc_request *req = tgt_ses_req(tsi);
struct ptlrpc_bulk_desc *desc = NULL;
struct obd_export *exp = req->rq_export;
nob += len;
}
+ /* multiple transactions can be assigned during write commit */
+ tti->tti_mult_trans = 1;
+
/* Must commit after prep above in all cases */
rc = obd_commitrw(tsi->tsi_env, OBD_BRW_WRITE, exp, &repbody->oa,
objcount, ioo, remote_nb, npages, local_nb, rc, nob,