Commit 06342cf8 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Alex Elder

xfs: use WRITE_SYNC_PLUG for synchronous writeout

The VM and I/O schedulers now expect us to use WRITE_SYNC_PLUG for
synchronous writeout.  Right now I can't see any changes in performance
numbers with this, but we're getting some beating for not using it,
and the knowledge definitely could help the block code to make better
decisions.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarAlex Elder <aelder@sgi.com>
Signed-off-by: default avatarAlex Elder <aelder@sgi.com>
parent 033da48f
...@@ -412,8 +412,9 @@ xfs_end_bio( ...@@ -412,8 +412,9 @@ xfs_end_bio(
STATIC void STATIC void
xfs_submit_ioend_bio( xfs_submit_ioend_bio(
xfs_ioend_t *ioend, struct writeback_control *wbc,
struct bio *bio) xfs_ioend_t *ioend,
struct bio *bio)
{ {
atomic_inc(&ioend->io_remaining); atomic_inc(&ioend->io_remaining);
bio->bi_private = ioend; bio->bi_private = ioend;
...@@ -426,7 +427,8 @@ xfs_submit_ioend_bio( ...@@ -426,7 +427,8 @@ xfs_submit_ioend_bio(
if (xfs_ioend_new_eof(ioend)) if (xfs_ioend_new_eof(ioend))
xfs_mark_inode_dirty_sync(XFS_I(ioend->io_inode)); xfs_mark_inode_dirty_sync(XFS_I(ioend->io_inode));
submit_bio(WRITE, bio); submit_bio(wbc->sync_mode == WB_SYNC_ALL ?
WRITE_SYNC_PLUG : WRITE, bio);
ASSERT(!bio_flagged(bio, BIO_EOPNOTSUPP)); ASSERT(!bio_flagged(bio, BIO_EOPNOTSUPP));
bio_put(bio); bio_put(bio);
} }
...@@ -505,6 +507,7 @@ static inline int bio_add_buffer(struct bio *bio, struct buffer_head *bh) ...@@ -505,6 +507,7 @@ static inline int bio_add_buffer(struct bio *bio, struct buffer_head *bh)
*/ */
STATIC void STATIC void
xfs_submit_ioend( xfs_submit_ioend(
struct writeback_control *wbc,
xfs_ioend_t *ioend) xfs_ioend_t *ioend)
{ {
xfs_ioend_t *head = ioend; xfs_ioend_t *head = ioend;
...@@ -533,19 +536,19 @@ xfs_submit_ioend( ...@@ -533,19 +536,19 @@ xfs_submit_ioend(
retry: retry:
bio = xfs_alloc_ioend_bio(bh); bio = xfs_alloc_ioend_bio(bh);
} else if (bh->b_blocknr != lastblock + 1) { } else if (bh->b_blocknr != lastblock + 1) {
xfs_submit_ioend_bio(ioend, bio); xfs_submit_ioend_bio(wbc, ioend, bio);
goto retry; goto retry;
} }
if (bio_add_buffer(bio, bh) != bh->b_size) { if (bio_add_buffer(bio, bh) != bh->b_size) {
xfs_submit_ioend_bio(ioend, bio); xfs_submit_ioend_bio(wbc, ioend, bio);
goto retry; goto retry;
} }
lastblock = bh->b_blocknr; lastblock = bh->b_blocknr;
} }
if (bio) if (bio)
xfs_submit_ioend_bio(ioend, bio); xfs_submit_ioend_bio(wbc, ioend, bio);
xfs_finish_ioend(ioend, 0); xfs_finish_ioend(ioend, 0);
} while ((ioend = next) != NULL); } while ((ioend = next) != NULL);
} }
...@@ -1198,7 +1201,7 @@ xfs_page_state_convert( ...@@ -1198,7 +1201,7 @@ xfs_page_state_convert(
} }
if (iohead) if (iohead)
xfs_submit_ioend(iohead); xfs_submit_ioend(wbc, iohead);
return page_dirty; return page_dirty;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment