Apologies for the resend but Kent's email address changed. Hopefully this one from last July is still valid.
Commit ffecfd1a (block: optionally snapshot page contents to provide stable pages during write) uses bounce buffers for stable page writes in jbd and ext3. Simplistically, __blk_queue_bounce takes a force parameter that is used when pages must be snapshot. Commit 6bc454d1 (bounce: Refactor __blk_queue_bounce to not use bi_io_vec) refactored __blk_queue_bounce and now the start of the function looks like this static void __blk_queue_bounce(struct request_queue *q, struct bio **bio_orig, mempool_t *pool, int force) { struct bio *bio; int rw = bio_data_dir(*bio_orig); struct bio_vec *to, *from; unsigned i; bio_for_each_segment(from, *bio_orig, i) if (page_to_pfn(from->bv_page) > queue_bounce_pfn(q)) goto bounce; return; bounce: bio = bio_clone_bioset(*bio_orig, GFP_NOIO, fs_bio_set); bio_for_each_segment_all(to, bio, i) { struct page *page = to->bv_page; if (page_to_pfn(page) <= queue_bounce_pfn(q) && !force) continue; Note that the first bio_for_each_segment is completely ignoring the force parameter and not snapshotting when requested. This would have been problematic for ext3 until commit 71368511 ("mm: make snapshotting pages for stable writes a per-bio operation) but the ignoring of the force parameter is still suspicious. Kent, why is it ok to ignore the force parameter even if the original bio indicated that snapshotting was required in blk_queue_bounce? -- Mel Gorman SUSE Labs -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/