Re: [PATCH 6/7] bcache: optimize barrier usage for Rmw atomic bitops

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 3/22/20 7:03 AM, Coly Li wrote:
From: Davidlohr Bueso <dave@xxxxxxxxxxxx>

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@xxxxxxx>
Signed-off-by: Coly Li <colyli@xxxxxxx>
---
  drivers/md/bcache/writeback.c | 6 +++---
  1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/md/bcache/writeback.c b/drivers/md/bcache/writeback.c
index 6673a37c8bd2..72ba6d015786 100644
--- a/drivers/md/bcache/writeback.c
+++ b/drivers/md/bcache/writeback.c
@@ -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,

Personally, I'd typically tend to use 'test_and_set_bit', as this not only implies a barrier, but also captures any errors; if you just use
'set_bit' you'll never know if the bit had been set already.

Cheers,

Hannes
--
Dr. Hannes Reinecke            Teamlead Storage & Networking
hare@xxxxxxx                               +49 911 74053 688
SUSE Software Solutions GmbH, Maxfeldstr. 5, 90409 Nürnberg
HRB 36809 (AG Nürnberg), Geschäftsführer: Felix Imendörffer



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux ARM Kernel]     [Linux Filesystem Development]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux