Since tgt_brw_lock() never takes a lock during recovery,
the tgt_brw_unlock() should check that also to prevent
false-positive triggering of assertion.
Signed-off-by: Mikhail Pershin <mpershin@whamcloud.com>
Change-Id: Ic6b6f6fa16678622460101d26df14f523e56a47a
Reviewed-on: https://review.whamcloud.com/40382
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Li Xi <lixi@ddn.com>
Reviewed-by: Lai Siyao <lai.siyao@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
-static void tgt_brw_unlock(struct obd_ioobj *obj, struct niobuf_remote *niob,
+static void tgt_brw_unlock(struct obd_export *exp, struct obd_ioobj *obj,
+ struct niobuf_remote *niob,
struct lustre_handle *lh, enum ldlm_mode mode)
{
ENTRY;
LASSERT(mode == LCK_PR || mode == LCK_PW);
struct lustre_handle *lh, enum ldlm_mode mode)
{
ENTRY;
LASSERT(mode == LCK_PR || mode == LCK_PW);
- LASSERT((obj->ioo_bufcnt > 0 &&
- (niob[0].rnb_flags & OBD_BRW_SRVLOCK)) ==
+ LASSERT((!exp->exp_obd->obd_recovering && obj->ioo_bufcnt &&
+ niob[0].rnb_flags & OBD_BRW_SRVLOCK) ==
lustre_handle_is_used(lh));
if (lustre_handle_is_used(lh))
tgt_extent_unlock(lh, mode);
EXIT;
}
lustre_handle_is_used(lh));
if (lustre_handle_is_used(lh))
tgt_extent_unlock(lh, mode);
EXIT;
}
static int tgt_checksum_niobuf(struct lu_target *tgt,
struct niobuf_local *local_nb, int npages,
int opc, enum cksum_types cksum_type,
static int tgt_checksum_niobuf(struct lu_target *tgt,
struct niobuf_local *local_nb, int npages,
int opc, enum cksum_types cksum_type,
rc = obd_commitrw(tsi->tsi_env, OBD_BRW_READ, exp, &repbody->oa, 1, ioo,
remote_nb, npages, local_nb, rc);
out_lock:
rc = obd_commitrw(tsi->tsi_env, OBD_BRW_READ, exp, &repbody->oa, 1, ioo,
remote_nb, npages, local_nb, rc);
out_lock:
- tgt_brw_unlock(ioo, remote_nb, &lockh, LCK_PR);
+ tgt_brw_unlock(exp, ioo, remote_nb, &lockh, LCK_PR);
if (desc && !CFS_FAIL_PRECHECK(OBD_FAIL_PTLRPC_CLIENT_BULK_CB2))
ptlrpc_free_bulk(desc);
if (desc && !CFS_FAIL_PRECHECK(OBD_FAIL_PTLRPC_CLIENT_BULK_CB2))
ptlrpc_free_bulk(desc);
ptlrpc_lprocfs_brw(req, nob);
}
out_lock:
ptlrpc_lprocfs_brw(req, nob);
}
out_lock:
- tgt_brw_unlock(ioo, remote_nb, &lockh, LCK_PW);
+ tgt_brw_unlock(exp, ioo, remote_nb, &lockh, LCK_PW);
if (desc)
ptlrpc_free_bulk(desc);
out:
if (desc)
ptlrpc_free_bulk(desc);
out: