From 69cdcbe3cf732124b3b5be1a1f235aa1b78f6c85 Mon Sep 17 00:00:00 2001 From: Alex Zhuravlev Date: Mon, 2 May 2022 21:38:47 +0300 Subject: [PATCH] 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 --- lustre/obdclass/llog_cat.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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; } -- 1.8.3.1