From: Alex Zhuravlev Date: Mon, 2 May 2022 18:38:47 +0000 (+0300) Subject: LU-15761 obdclass: fix locking in llog_cat_refresh() X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=af35024649d7d9da9c400eaffc2f4411557a5e28;p=fs%2Flustre-release.git LU-15761 obdclass: fix locking in llog_cat_refresh() the patch fixes two problems: 1) pairing up_write() should be used with cathandle 2) llog_read_header() manipulates loghandle's internal structures (header, last_idx, etc) which are supposed to stay consistent from another user's point of view (like llog_add_rec()) Lustre-change: https://review.whamcloud.com/47185 Lustre-commit: 69cdcbe3cf732124b3b5be1a1f235aa1b78f6c85 Fixes: 71f409c9b31b ("LU-11418 llog: refresh remote llog upon -ESTALE") Signed-off-by: Alex Zhuravlev Change-Id: Ib86e10a925b541d02c22d74e6ddbc4368345ac11 Reviewed-on: https://review.whamcloud.com/47190 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Mike Pershin Reviewed-by: Andreas Dilger --- diff --git a/lustre/obdclass/llog_cat.c b/lustre/obdclass/llog_cat.c index a2d4709..d50e3a7 100644 --- a/lustre/obdclass/llog_cat.c +++ b/lustre/obdclass/llog_cat.c @@ -247,14 +247,16 @@ static int llog_cat_refresh(const struct lu_env *env, if (!llog_exist(loghandle)) continue; + down_write(&loghandle->lgh_lock); rc = llog_read_header(env, loghandle, NULL); + up_write(&loghandle->lgh_lock); if (rc) goto unlock; } rc = llog_read_header(env, cathandle, NULL); unlock: - up_write(&loghandle->lgh_lock); + up_write(&cathandle->lgh_lock); return rc; }