aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2010-06-17 02:54:16 -0400
committerJens Axboe <jaxboe@fusionio.com>2010-08-07 12:15:44 -0400
commit41f2df62894bfcd3bf868af916b32b90aa7168dc (patch)
treeb582399975cd1cf19aa8b6e67623f252b7cada85 /include
parent01b6b67edabe864391163dc6405e2cb454f108db (diff)
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. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
Diffstat (limited to 'include')
-rw-r--r--include/linux/fs.h4
1 files changed, 2 insertions, 2 deletions
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 68ca1b0491af..598878831497 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -136,7 +136,7 @@ struct inodes_stat_t {
136 * SWRITE_SYNC 136 * SWRITE_SYNC
137 * SWRITE_SYNC_PLUG Like WRITE_SYNC/WRITE_SYNC_PLUG, but locks the buffer. 137 * SWRITE_SYNC_PLUG Like WRITE_SYNC/WRITE_SYNC_PLUG, but locks the buffer.
138 * See SWRITE. 138 * See SWRITE.
139 * WRITE_BARRIER Like WRITE, but tells the block layer that all 139 * WRITE_BARRIER Like WRITE_SYNC, but tells the block layer that all
140 * previously submitted writes must be safely on storage 140 * previously submitted writes must be safely on storage
141 * before this one is started. Also guarantees that when 141 * before this one is started. Also guarantees that when
142 * this write is complete, it itself is also safely on 142 * this write is complete, it itself is also safely on
@@ -159,7 +159,7 @@ struct inodes_stat_t {
159#define SWRITE_SYNC_PLUG \ 159#define SWRITE_SYNC_PLUG \
160 (SWRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_NOIDLE)) 160 (SWRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_NOIDLE))
161#define SWRITE_SYNC (SWRITE_SYNC_PLUG | (1 << BIO_RW_UNPLUG)) 161#define SWRITE_SYNC (SWRITE_SYNC_PLUG | (1 << BIO_RW_UNPLUG))
162#define WRITE_BARRIER (WRITE | (1 << BIO_RW_BARRIER)) 162#define WRITE_BARRIER (WRITE_SYNC | (1 << BIO_RW_BARRIER))
163 163
164/* 164/*
165 * These aren't really reads or writes, they pass down information about 165 * These aren't really reads or writes, they pass down information about