[PATCH] xfs: use WRITE_SYNC_PLUG for synchronous writeout
Alex Elder
aelder at sgi.com
Mon Nov 2 17:20:44 CST 2009
Christoph Hellwig wrote:
> 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 defintively
> could help the block code to make better decisions.
>
> Signed-off-by: Christoph Hellwig <hch at lst.de>
Looks good.
Reviewed-by: Alex Elder <aelder at sgi.com>
> Index: linux-2.6/fs/xfs/linux-2.6/xfs_aops.c
> ===================================================================
> --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_aops.c 2009-10-24 10:08:36.622254197 +0200
> +++ linux-2.6/fs/xfs/linux-2.6/xfs_aops.c 2009-10-24 10:18:27.803006347 +0200
> @@ -412,8 +412,9 @@ xfs_end_bio(
>
> STATIC void
> xfs_submit_ioend_bio(
> - xfs_ioend_t *ioend,
> - struct bio *bio)
> + struct writeback_control *wbc,
> + xfs_ioend_t *ioend,
> + struct bio *bio)
> {
> atomic_inc(&ioend->io_remaining);
> bio->bi_private = ioend;
> @@ -426,7 +427,8 @@ xfs_submit_ioend_bio(
> if (xfs_ioend_new_eof(ioend))
> 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));
> bio_put(bio);
> }
> @@ -505,6 +507,7 @@ static inline int bio_add_buffer(struct
> */
> STATIC void
> xfs_submit_ioend(
> + struct writeback_control *wbc,
> xfs_ioend_t *ioend)
> {
> xfs_ioend_t *head = ioend;
> @@ -533,19 +536,19 @@ xfs_submit_ioend(
> retry:
> bio = xfs_alloc_ioend_bio(bh);
> } else if (bh->b_blocknr != lastblock + 1) {
> - xfs_submit_ioend_bio(ioend, bio);
> + xfs_submit_ioend_bio(wbc, ioend, bio);
> goto retry;
> }
>
> if (bio_add_buffer(bio, bh) != bh->b_size) {
> - xfs_submit_ioend_bio(ioend, bio);
> + xfs_submit_ioend_bio(wbc, ioend, bio);
> goto retry;
> }
>
> lastblock = bh->b_blocknr;
> }
> if (bio)
> - xfs_submit_ioend_bio(ioend, bio);
> + xfs_submit_ioend_bio(wbc, ioend, bio);
> xfs_finish_ioend(ioend, 0);
> } while ((ioend = next) != NULL);
> }
> @@ -1198,7 +1201,7 @@ xfs_page_state_convert(
> }
>
> if (iohead)
> - xfs_submit_ioend(iohead);
> + xfs_submit_ioend(wbc, iohead);
>
> return page_dirty;
>
>
> _______________________________________________
> xfs mailing list
> xfs at oss.sgi.com
> http://oss.sgi.com/mailman/listinfo/xfs
More information about the xfs
mailing list