bcache: optimize barrier usage for Rmw atomic bitops
authorDavidlohr Bueso <dave@stgolabs.net>
Sun, 22 Mar 2020 06:03:04 +0000 (14:03 +0800)
committerJens Axboe <axboe@kernel.dk>
Sun, 22 Mar 2020 16:06:57 +0000 (10:06 -0600)
We can avoid the unnecessary barrier on non LL/SC architectures,
such as x86. Instead, use the smp_mb__after_atomic().

Signed-off-by: Davidlohr Bueso <dbueso@suse.de>
Signed-off-by: Coly Li <colyli@suse.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/md/bcache/writeback.c

index 6673a37..72ba6d0 100644 (file)
@@ -183,7 +183,7 @@ static void update_writeback_rate(struct work_struct *work)
         */
        set_bit(BCACHE_DEV_RATE_DW_RUNNING, &dc->disk.flags);
        /* paired with where BCACHE_DEV_RATE_DW_RUNNING is tested */
-       smp_mb();
+       smp_mb__after_atomic();
 
        /*
         * CACHE_SET_IO_DISABLE might be set via sysfs interface,
@@ -193,7 +193,7 @@ static void update_writeback_rate(struct work_struct *work)
            test_bit(CACHE_SET_IO_DISABLE, &c->flags)) {
                clear_bit(BCACHE_DEV_RATE_DW_RUNNING, &dc->disk.flags);
                /* paired with where BCACHE_DEV_RATE_DW_RUNNING is tested */
-               smp_mb();
+               smp_mb__after_atomic();
                return;
        }
 
@@ -229,7 +229,7 @@ static void update_writeback_rate(struct work_struct *work)
         */
        clear_bit(BCACHE_DEV_RATE_DW_RUNNING, &dc->disk.flags);
        /* paired with where BCACHE_DEV_RATE_DW_RUNNING is tested */
-       smp_mb();
+       smp_mb__after_atomic();
 }
 
 static unsigned int writeback_delay(struct cached_dev *dc,