block: BARRIER request should imply SYNC
Subsystems (2)
PATCH 1/1 block: BARRIER request should imply SYNC
A barrier request should by defintion have priority in get_request and let the queue be unplugged immediately as it's blocking all forward progress due to the queue draining.
Most filesystems already get this implicitly by the way how submit_bh treats the buffer_ordered flag, and gfs2 sets it explicitly. But btrfs and XFS are still forgetting to set the flag, as is blkdev_issue_flush and some places in DM/MD.
For XFS on metadata heavy workloads this gives a consistent speedup in the 2-3% range.
include/linux/fs.h +2 -2
@@ -136,7 +136,7 @@ struct inodes_stat_t {* SWRITE_SYNC * SWRITE_SYNC_PLUG Like WRITE_SYNC/WRITE_SYNC_PLUG, but locks the buffer. * See SWRITE. -* WRITE_BARRIER Like WRITE, but tells the block layer that all +* WRITE_BARRIER Like WRITE_SYNC, but tells the block layer that all * previously submitted writes must be safely on storage * before this one is started. Also guarantees that when * this write is complete, it itself is also safely on
@@ -159,7 +159,7 @@ struct inodes_stat_t {#define SWRITE_SYNC_PLUG \ (SWRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_NOIDLE))#define SWRITE_SYNC (SWRITE_SYNC_PLUG | (1 << BIO_RW_UNPLUG)) -#define WRITE_BARRIER (WRITE | (1 << BIO_RW_BARRIER)) +#define WRITE_BARRIER (WRITE_SYNC | (1 << BIO_RW_BARRIER))/* * These aren't really reads or writes, they pass down information about
fs/gfs2/log.c +1 -1
@@ -595,7 +595,7 @@ static void log_write_header(struct gfs2if (test_bit (SDF_NOBARRIERS , &sdp->sd_flags)) goto skip_barrier;get_bh (bh); -submit_bh (WRITE_SYNC | (1 <<BIO_RW_BARRIER ) | (1 <<BIO_RW_META ), bh); +submit_bh (WRITE_BARRIER | (1 <<BIO_RW_META ), bh);wait_on_buffer (bh);if (buffer_eopnotsupp (bh)) {clear_buffer_eopnotsupp (bh);
Quoted 5 lines · Christoph Hellwig
A barrier request should by defintion have priority in
get_requestand let the queue be unplugged immediately as it's blocking all forward progress due to the queue draining.
Quoted 7 lines
Most filesystems already get this implicitly by the way how
submit_bhtreats thebuffer_orderedflag, and gfs2 sets it explicitly. But btrfs and XFS are still forgetting to set the flag, as isblkdev_issue_flushand some places in DM/MD.For XFS on metadata heavy workloads this gives a consistent speedup in the 2-3% range.
Thanks Christoph, applied.
Signature · 1 line
Jens Axboe