From 356222ffb713c611af1bfa8379fe866a15da0439 Mon Sep 17 00:00:00 2001 From: Bobi Jam Date: Tue, 12 Nov 2024 12:09:12 -0800 Subject: [PATCH] LU-17070 lov: retry layout refresh if got old layouts 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 Change-Id: Id29ec4ada85060a20f730f92a6a9409d755a56a1 Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/56988 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Zhenyu Xu Reviewed-by: Alex Zhuravlev Reviewed-by: Oleg Drokin --- lustre/llite/vvp_page.c | 9 ++++++--- lustre/lov/lov_object.c | 7 ++++++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/lustre/llite/vvp_page.c b/lustre/llite/vvp_page.c index 06033d8..81131cf 100644 --- a/lustre/llite/vvp_page.c +++ b/lustre/llite/vvp_page.c @@ -252,9 +252,12 @@ static void vvp_vmpage_error(struct inode *inode, struct page *vmpage, 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); diff --git a/lustre/lov/lov_object.c b/lustre/lov/lov_object.c index 980bf1d..46c948f 100644 --- a/lustre/lov/lov_object.c +++ b/lustre/lov/lov_object.c @@ -1420,7 +1420,12 @@ static int lov_conf_set(const struct lu_env *env, struct cl_object *obj, 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); + } } } -- 1.8.3.1