From: Zheng Liu <gnehzuil.liu@gmail.com>
To: "Darrick J. Wong" <darrick.wong@oracle.com>
Cc: axboe@kernel.dk, lucho@ionkov.net, jack@suse.cz,
ericvh@gmail.com, viro@zeniv.linux.org.uk, rminnich@sandia.gov,
tytso@mit.edu, martin.petersen@oracle.com, neilb@suse.de,
david@fromorbit.com, linux-kernel@vger.kernel.org,
hch@infradead.org, linux-fsdevel@vger.kernel.org,
adilger.kernel@dilger.ca, bharrosh@panasas.com,
jlayton@samba.org, v9fs-developer@lists.sourceforge.net,
linux-ext4@vger.kernel.org
Subject: Re: [PATCH 4/4] block: Optionally snapshot page contents to provide stable pages during write
Date: Mon, 17 Dec 2012 00:13:36 +0800 [thread overview]
Message-ID: <20121216161336.GA6243@gmail.com> (raw)
In-Reply-To: <20121213080811.23360.98131.stgit@blackbox.djwong.org>
On Thu, Dec 13, 2012 at 12:08:11AM -0800, Darrick J. Wong wrote:
> diff --git a/mm/bounce.c b/mm/bounce.c
> index 0420867..fa11935 100644
> --- a/mm/bounce.c
> +++ b/mm/bounce.c
> @@ -178,6 +178,38 @@ static void bounce_end_io_read_isa(struct bio *bio, int err)
> __bounce_end_io_read(bio, isa_page_pool, err);
> }
>
> +#ifdef CONFIG_NEED_BOUNCE_POOL
> +static int might_snapshot_stable_page_write(struct bio **bio_orig)
> +{
> + return bio_data_dir(*bio_orig) == WRITE;
> +}
> +
> +static int should_snapshot_stable_pages(struct page *page, int rw)
> +{
> + struct backing_dev_info *bdi;
> + struct address_space *mapping = page_mapping(page);
> +
> + if (!mapping)
> + return 0;
> + bdi = mapping->backing_dev_info;
> + if (!bdi_cap_stable_pages_required(bdi))
> + return 0;
> +
> + return mapping->host->i_sb->s_flags & MS_SNAP_STABLE &&
> + rw == WRITE;
> +}
> +#else
> +static int might_snapshot_stable_page_write(struct bio **bio_orig)
> +{
> + return 0;
> +}
> +
> +static int should_snapshot_static_pages(struct page *page, int rw)
^^^^^^
It should be _stable_.
Regards,
- Zheng
> +{
> + return 0;
> +}
> +#endif /* CONFIG_NEED_BOUNCE_POOL */
> +
> static void __blk_queue_bounce(struct request_queue *q, struct bio **bio_orig,
> mempool_t *pool)
> {
> @@ -192,7 +224,8 @@ static void __blk_queue_bounce(struct request_queue *q, struct bio **bio_orig,
> /*
> * is destination page below bounce pfn?
> */
> - if (page_to_pfn(page) <= queue_bounce_pfn(q))
> + if (page_to_pfn(page) <= queue_bounce_pfn(q) &&
> + !should_snapshot_stable_pages(page, rw))
> continue;
>
> /*
> @@ -284,7 +317,8 @@ void blk_queue_bounce(struct request_queue *q, struct bio **bio_orig)
> * don't waste time iterating over bio segments
> */
> if (!(q->bounce_gfp & GFP_DMA)) {
> - if (queue_bounce_pfn(q) >= blk_max_pfn)
> + if (queue_bounce_pfn(q) >= blk_max_pfn &&
> + !might_snapshot_stable_page_write(bio_orig))
> return;
> pool = page_pool;
> } else {
next prev parent reply other threads:[~2012-12-16 16:13 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-12-13 8:07 [PATCH v2.3 0/3] mm/fs: Implement faster stable page writes on filesystems Darrick J. Wong
2012-12-13 8:07 ` [PATCH 1/4] bdi: Allow block devices to say that they require stable page writes Darrick J. Wong
2012-12-17 9:04 ` Jan Kara
2012-12-13 8:07 ` [PATCH 2/4] mm: Only enforce stable page writes if the backing device requires it Darrick J. Wong
2012-12-17 9:16 ` Jan Kara
2012-12-13 8:08 ` [PATCH 3/4] 9pfs: Fix filesystem to wait for stable page writeback Darrick J. Wong
2012-12-17 10:11 ` Jan Kara
2012-12-13 8:08 ` [PATCH 4/4] block: Optionally snapshot page contents to provide stable pages during write Darrick J. Wong
2012-12-14 1:48 ` Andy Lutomirski
2012-12-14 2:10 ` Darrick J. Wong
2012-12-14 3:33 ` Dave Chinner
2012-12-14 19:43 ` Darrick J. Wong
2012-12-15 1:12 ` Andy Lutomirski
2012-12-15 2:01 ` Darrick J. Wong
2012-12-15 2:06 ` Andy Lutomirski
2012-12-17 22:54 ` Darrick J. Wong
2012-12-16 16:13 ` Zheng Liu [this message]
2012-12-17 22:56 ` Darrick J. Wong
2012-12-17 10:23 ` Jan Kara
2012-12-17 23:20 ` Darrick J. Wong
2012-12-27 19:14 ` OGAWA Hirofumi
2012-12-27 21:40 ` Darrick J. Wong
2012-12-27 21:48 ` OGAWA Hirofumi
2013-01-07 20:44 ` Darrick J. Wong
2013-01-08 9:44 ` OGAWA Hirofumi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20121216161336.GA6243@gmail.com \
--to=gnehzuil.liu@gmail.com \
--cc=adilger.kernel@dilger.ca \
--cc=axboe@kernel.dk \
--cc=bharrosh@panasas.com \
--cc=darrick.wong@oracle.com \
--cc=david@fromorbit.com \
--cc=ericvh@gmail.com \
--cc=hch@infradead.org \
--cc=jack@suse.cz \
--cc=jlayton@samba.org \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lucho@ionkov.net \
--cc=martin.petersen@oracle.com \
--cc=neilb@suse.de \
--cc=rminnich@sandia.gov \
--cc=tytso@mit.edu \
--cc=v9fs-developer@lists.sourceforge.net \
--cc=viro@zeniv.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.