gfs2: change from write to read lock for sd_log_flush_lock in journal replay
authorBob Peterson <rpeterso@redhat.com>
Thu, 26 Mar 2020 17:22:05 +0000 (12:22 -0500)
committerBob Peterson <rpeterso@redhat.com>
Fri, 27 Mar 2020 19:08:05 +0000 (14:08 -0500)
Function gfs2_recover_func grabs the sd_log_flush_lock rw_semaphore in
write mode. This is unnecessary because we only need to prevent log flush
from using sd_log_bio bio while it does. Therefore, a read lock will be
enough. This is a small step in cleaning up log flush.

Signed-off-by: Bob Peterson <rpeterso@redhat.com>
fs/gfs2/recovery.c

index 34dfdb2..96c345f 100644 (file)
@@ -401,7 +401,7 @@ void gfs2_recover_func(struct work_struct *work)
                /* We take the sd_log_flush_lock here primarily to prevent log
                 * flushes and simultaneous journal replays from stomping on
                 * each other wrt sd_log_bio. */
-               down_write(&sdp->sd_log_flush_lock);
+               down_read(&sdp->sd_log_flush_lock);
                for (pass = 0; pass < 2; pass++) {
                        lops_before_scan(jd, &head, pass);
                        error = foreach_descriptor(jd, head.lh_tail,
@@ -412,7 +412,7 @@ void gfs2_recover_func(struct work_struct *work)
                }
 
                clean_journal(jd, &head);
-               up_write(&sdp->sd_log_flush_lock);
+               up_read(&sdp->sd_log_flush_lock);
 
                gfs2_glock_dq_uninit(&thaw_gh);
                t_rep = ktime_get();