Use WRITE_SYNC in __block_write_full_page() if WBC_SYNC_ALL]
Subsystems (2)
RFC PATCH 1/1 Use WRITE_SYNC in __block_write_full_page() if WBC_SYNC_ALL]
Sorry, I screwed up the hostname for the linux-mm mailing list....
Comments, suggestions, et. al. appreciated. Many thanks,
- Ted
If wbc.sync_mode is WBC_SYNC_ALL, then in the page writeback paths we will be waiting for the write to complete. So the I/O should be submitted via submit_bh() with WRITE_SYNC so the block layer should properly prioritize the I/O.
---
Following up with an e-mail thread started by Arjan two months ago, (subject: [PATCH] Give kjournald a IOPRIO_CLASS_RT io priority), I have a patch, just sent to [email protected], which fixes the jbd2 layer to submit journal writes via submit_bh() with WRITE_SYNC. Hopefully this might be enough of a priority boost so we don't have to force a higher I/O priority level via a buffer_head flag. However, while looking through the code paths, in ordered data mode, we end up flushing data pages via the page writeback paths on a per-inode basis, and I noticed that even though we are passing in wbc.sync_mode=WBC_SYNC_ALL, __block_write_full_page() is using submit_bh(WRITE, bh) instead of submit_bh(WRITE_SYNC).
I'm not completely confident in my understanding of the page writeback code paths --- does this change make sense?
- Ted
fs/buffer.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-)
fs/buffer.c +4 -2
@@ -1741,7 +1741,8 @@ static int __block_write_full_page(struct inode *inode, struct page *page, do { struct buffer_head *next = bh->b_this_page; if (buffer_async_write(bh)) { - submit_bh(WRITE, bh); + submit_bh((wbc->sync_mode == WB_SYNC_ALL) ? + WRITE_SYNC : WRITE, bh); nr_underway++; } bh = next;
@@ -1795,7 +1796,8 @@ recover:struct buffer_head *next = bh->b_this_page;if (buffer_async_write (bh)) {clear_buffer_dirty (bh); -submit_bh (WRITE , bh); +submit_bh ((wbc->sync_mode ==WB_SYNC_ALL ) ? +WRITE_SYNC :WRITE , bh); nr_underway++; } bh = next;
Signature · 6 lines
1.6.0.4.8.g36f27.dirty -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html