lov_layout_change() would not apply old layouts which can get through
when MDS doesn't take layout lock, this patch would retry getting
the layout and re-apply the layout again for once.
Lustre-change: https://review.whamcloud.com/55061
Lustre-commit:
7974e41a26c22181be2818b3580756fa559d14d9
Fixes:
13557aa869 ("LU-15300 mdt: refresh LOVEA with LL granted")
Signed-off-by: Bobi Jam <bobijam@whamcloud.com>
Change-Id: Id29ec4ada85060a20f730f92a6a9409d755a56a1
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/56988
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Zhenyu Xu <bobijam@hotmail.com>
Reviewed-by: Alex Zhuravlev <bzzz@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
obj->vob_discard_page_warned = 0;
} else {
SetPageError(vmpage);
- if (ioret != -ENOSPC &&
- OBD_FAIL_CHECK(OBD_FAIL_LLITE_PANIC_ON_ESTALE))
- LBUG();
+ if (OBD_FAIL_CHECK(OBD_FAIL_LLITE_PANIC_ON_ESTALE))
+ LASSERTF(ioret == -ENOSPC,
+ "%s:"DFID" got a stale page %p: rc = %d.\n",
+ obj->vob_cl.co_lu.lo_dev->ld_obd->obd_name,
+ PFID(lu_object_fid(&obj->vob_cl.co_lu)),
+ vmpage, ioret);
mapping_set_error(inode->i_mapping, ioret);
CDEBUG(D_HA, "skip old for "DFID": %d < %d\n",
PFID(lu_object_fid(lov2lu(lov))),
(int)newgen, (int)oldgen);
- GOTO(out, result = 0);
+ if (conf->coc_try) {
+ set_bit(LO_LAYOUT_INVALID, &lov->lo_obj_flags);
+ GOTO(out, result = -ERESTARTSYS);
+ } else {
+ GOTO(out, result = 0);
+ }
}
}