The patch titled Subject: mm-make-snapshotting-pages-for-stable-writes-a-per-bio-operation-v3 has been removed from the -mm tree. Its filename was mm-make-snapshotting-pages-for-stable-writes-a-per-bio-operation-v3.patch This patch was dropped because it was folded into mm-make-snapshotting-pages-for-stable-writes-a-per-bio-operation.patch ------------------------------------------------------ From: "Darrick J. Wong" <darrick.wong@xxxxxxxxxx> Subject: mm-make-snapshotting-pages-for-stable-writes-a-per-bio-operation-v3 v3: Improve the documentation in jbd for why we're doing this, and clean up some code. [darrick.wong@xxxxxxxxxx: Fold in a couple of small cleanups from akpm] Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> Cc: Andy Lutomirski <luto@xxxxxxxxxxxxxx> Cc: Adrian Hunter <adrian.hunter@xxxxxxxxx> Cc: Artem Bityutskiy <dedekind1@xxxxxxxxx> Reviewed-by: Jan Kara <jack@xxxxxxx> Cc: Jens Axboe <axboe@xxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- fs/buffer.c | 2 +- fs/jbd/commit.c | 21 ++++++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff -puN fs/buffer.c~mm-make-snapshotting-pages-for-stable-writes-a-per-bio-operation-v3 fs/buffer.c --- a/fs/buffer.c~mm-make-snapshotting-pages-for-stable-writes-a-per-bio-operation-v3 +++ a/fs/buffer.c @@ -3000,7 +3000,7 @@ int _submit_bh(int rw, struct buffer_hea } EXPORT_SYMBOL_GPL(_submit_bh); -int submit_bh(int rw, struct buffer_head * bh) +int submit_bh(int rw, struct buffer_head *bh) { return _submit_bh(rw, bh, 0); } diff -puN fs/jbd/commit.c~mm-make-snapshotting-pages-for-stable-writes-a-per-bio-operation-v3 fs/jbd/commit.c --- a/fs/jbd/commit.c~mm-make-snapshotting-pages-for-stable-writes-a-per-bio-operation-v3 +++ a/fs/jbd/commit.c @@ -162,7 +162,16 @@ static void journal_do_submit_data(struc for (i = 0; i < bufs; i++) { wbuf[i]->b_end_io = end_buffer_write_sync; - /* We use-up our safety reference in submit_bh() */ + /* + * Here we write back pagecache data that may be mmaped. Since + * we cannot afford to clean the page and set PageWriteback + * here due to lock ordering (page lock ranks above transaction + * start), the data can change while IO is in flight. Tell the + * block layer it should bounce the bio pages if stable data + * during write is required. + * + * We use up our safety reference in submit_bh(). + */ _submit_bh(write_op, wbuf[i], 1 << BIO_SNAP_STABLE); } } @@ -667,6 +676,16 @@ start_journal_io: clear_buffer_dirty(bh); set_buffer_uptodate(bh); bh->b_end_io = journal_end_buffer_io_sync; + /* + * In data=journal mode, here we can end up + * writing pagecache data that might be + * mmapped. Since we can't afford to clean the + * page and set PageWriteback (see the comment + * near the other use of _submit_bh()), the + * data can change while the write is in + * flight. Tell the block layer to bounce the + * bio pages if stable pages are required. + */ _submit_bh(write_op, bh, 1 << BIO_SNAP_STABLE); } cond_resched(); diff -puN include/linux/blk_types.h~mm-make-snapshotting-pages-for-stable-writes-a-per-bio-operation-v3 include/linux/blk_types.h _ Patches currently in -mm which might be from darrick.wong@xxxxxxxxxx are mm-make-snapshotting-pages-for-stable-writes-a-per-bio-operation.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html