From: Lai Siyao Date: Mon, 4 Sep 2023 12:45:34 +0000 (-0400) Subject: LU-17087 lmv: update stale tgt statfs every 1 hour X-Git-Tag: 2.15.59~116 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=e262e0ffbe792ae2f8b47ccdafac38a36151a300;p=fs%2Flustre-release.git LU-17087 lmv: update stale tgt statfs every 1 hour Some tgt statfs may not be initialized upon mount due to network issues, if the filesystem is imbalanced, these tgts won't be chosen to create directory because their bavail and ffree are 0. If MDT is chosen by QoS, update tgt statfs that is one hour overdue, otherwise check update the statfs of the tgt that is chosen. Signed-off-by: Lai Siyao Change-Id: I06af8b8bd342f66cb794471df3ee0f3b127ffe05 Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/52270 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Oleg Drokin Reviewed-by: Andreas Dilger Reviewed-by: Hongchao Zhang --- diff --git a/lustre/lmv/lmv_obd.c b/lustre/lmv/lmv_obd.c index 2bebb98..15ad904 100644 --- a/lustre/lmv/lmv_obd.c +++ b/lustre/lmv/lmv_obd.c @@ -1559,7 +1559,10 @@ static struct lu_tgt_desc *lmv_locate_tgt_qos(struct lmv_obd *lmv, tgt->ltd_qos.ltq_usable = 0; continue; } - + /* update one hour overdue statfs */ + if (ktime_get_seconds() - tgt->ltd_statfs_age > + 60 * lmv->lmv_mdt_descs.ltd_lmv_desc.ld_qos_maxage) + lmv_statfs_check_update(lmv2obd_dev(lmv), tgt); tgt->ltd_qos.ltq_usable = 1; lu_tgt_qos_weight_calc(tgt, true); if (tgt->ltd_index == op_data->op_mds) @@ -1969,18 +1972,12 @@ static struct lu_tgt_desc *lmv_locate_tgt_by_space(struct lmv_obd *lmv, tgt = tmp; else tgt = lmv_locate_tgt_rr(lmv); + if (!IS_ERR(tgt)) + lmv_statfs_check_update(lmv2obd_dev(lmv), tgt); } - /* - * only update statfs after QoS mkdir, this means the cached statfs may - * be stale, and current mkdir may not follow QoS accurately, but it's - * not serious, and avoids periodic statfs when client doesn't mkdir by - * QoS. - */ - if (!IS_ERR(tgt)) { + if (!IS_ERR(tgt)) op_data->op_mds = tgt->ltd_index; - lmv_statfs_check_update(lmv2obd_dev(lmv), tgt); - } return tgt; }