the inflight page should also be teardown when unmount
+static inline int
+lov_tgt_pending(struct lov_obd *lov, struct lov_tgt_desc *tgt, int gen)
+{
+ int rc = 0;
+ lov_tgts_lock(lov);
+
+ if (((gen == 0) || (gen == tgt->ltd_gen)) &&
+ (tgt->ltd_flags &(LTD_ACTIVE|LTD_DEL_PENDING)) == LTD_DEL_PENDING) {
+ tgt->ltd_refcount++;
+ rc = 1;
+ }
+
+ lov_tgts_unlock(lov);
+ return rc;
+}
+
struct lov_async_page {
int lap_magic;
int lap_stripe;
struct lov_async_page {
int lap_magic;
int lap_stripe;
loi = &lsm->lsm_oinfo[lap->lap_stripe];
tgt = lov->tgts + loi->loi_ost_idx;
loi = &lsm->lsm_oinfo[lap->lap_stripe];
tgt = lov->tgts + loi->loi_ost_idx;
- if (!lov_tgt_ready(lov, tgt, loi->loi_ost_gen))
- RETURN(-EIO);
+ if (!lov_tgt_ready(lov, tgt, loi->loi_ost_gen) &&
+ !lov_tgt_pending(lov, tgt, loi->loi_ost_gen))
+ RETURN(-EIO);
+
+ lov_tgt_incref(lov,tgt);
rc = obd_teardown_async_page(tgt->ltd_exp, lsm, loi,
lap->lap_sub_cookie);
rc = obd_teardown_async_page(tgt->ltd_exp, lsm, loi,
lap->lap_sub_cookie);