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-Tag: 2.15.0-RC4~2 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=69cdcbe3cf732124b3b5be1a1f235aa1b78f6c85;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()) Fixes: 71f409c9b31b ("LU-11418 llog: refresh remote llog upon -ESTALE") Signed-off-by: Alex Zhuravlev Change-Id: Ib86e10a925b541d02c22d74e6ddbc4368345ac11 Reviewed-on: https://review.whamcloud.com/47185 Tested-by: jenkins Reviewed-by: Andreas Dilger Reviewed-by: Mike Pershin Tested-by: Maloo Reviewed-by: Lai Siyao Reviewed-by: Oleg Drokin --- diff --git a/lustre/obdclass/llog_cat.c b/lustre/obdclass/llog_cat.c index 97f15e4..3f53dab 100644 --- a/lustre/obdclass/llog_cat.c +++ b/lustre/obdclass/llog_cat.c @@ -246,14 +246,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; }