diff options
author | Christoph Hellwig <hch@lst.de> | 2010-06-17 02:54:16 -0400 |
---|---|---|
committer | Jens Axboe <jaxboe@fusionio.com> | 2010-08-07 12:15:44 -0400 |
commit | 41f2df62894bfcd3bf868af916b32b90aa7168dc (patch) | |
tree | b582399975cd1cf19aa8b6e67623f252b7cada85 /include | |
parent | 01b6b67edabe864391163dc6405e2cb454f108db (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.h | 4 |
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 |