From: "Darrick J. Wong" <darrick.wong@oracle.com> To: "Matthew Wilcox (Oracle)" <willy@infradead.org> Cc: linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, Christoph Hellwig <hch@infradead.org>, linux-nvdimm@lists.01.org, linux-kernel@vger.kernel.org, Dave Kleikamp <shaggy@kernel.org>, jfs-discussion@lists.sourceforge.net, Christoph Hellwig <hch@lst.de> Subject: Re: [PATCH v2 7/9] iomap: Convert write_count to write_bytes_pending Date: Thu, 17 Sep 2020 15:02:38 -0700 [thread overview] Message-ID: <20200917220238.GP7955@magnolia> (raw) In-Reply-To: <20200910234707.5504-8-willy@infradead.org> On Fri, Sep 11, 2020 at 12:47:05AM +0100, Matthew Wilcox (Oracle) wrote: > Instead of counting bio segments, count the number of bytes submitted. > This insulates us from the block layer's definition of what a 'same page' > is, which is not necessarily clear once THPs are involved. > > Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> > Reviewed-by: Christoph Hellwig <hch@lst.de> Looks ok, Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> --D > --- > fs/iomap/buffered-io.c | 19 ++++++++++--------- > 1 file changed, 10 insertions(+), 9 deletions(-) > > diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c > index 1cf976a8e55c..64a5cb383f30 100644 > --- a/fs/iomap/buffered-io.c > +++ b/fs/iomap/buffered-io.c > @@ -27,7 +27,7 @@ > */ > struct iomap_page { > atomic_t read_bytes_pending; > - atomic_t write_count; > + atomic_t write_bytes_pending; > spinlock_t uptodate_lock; > unsigned long uptodate[]; > }; > @@ -73,7 +73,7 @@ iomap_page_release(struct page *page) > if (!iop) > return; > WARN_ON_ONCE(atomic_read(&iop->read_bytes_pending)); > - WARN_ON_ONCE(atomic_read(&iop->write_count)); > + WARN_ON_ONCE(atomic_read(&iop->write_bytes_pending)); > WARN_ON_ONCE(bitmap_full(iop->uptodate, nr_blocks) != > PageUptodate(page)); > kfree(iop); > @@ -1047,7 +1047,7 @@ EXPORT_SYMBOL_GPL(iomap_page_mkwrite); > > static void > iomap_finish_page_writeback(struct inode *inode, struct page *page, > - int error) > + int error, unsigned int len) > { > struct iomap_page *iop = to_iomap_page(page); > > @@ -1057,9 +1057,9 @@ iomap_finish_page_writeback(struct inode *inode, struct page *page, > } > > WARN_ON_ONCE(i_blocks_per_page(inode, page) > 1 && !iop); > - WARN_ON_ONCE(iop && atomic_read(&iop->write_count) <= 0); > + WARN_ON_ONCE(iop && atomic_read(&iop->write_bytes_pending) <= 0); > > - if (!iop || atomic_dec_and_test(&iop->write_count)) > + if (!iop || atomic_sub_and_test(len, &iop->write_bytes_pending)) > end_page_writeback(page); > } > > @@ -1093,7 +1093,8 @@ iomap_finish_ioend(struct iomap_ioend *ioend, int error) > > /* walk each page on bio, ending page IO on them */ > bio_for_each_segment_all(bv, bio, iter_all) > - iomap_finish_page_writeback(inode, bv->bv_page, error); > + iomap_finish_page_writeback(inode, bv->bv_page, error, > + bv->bv_len); > bio_put(bio); > } > /* The ioend has been freed by bio_put() */ > @@ -1309,8 +1310,8 @@ iomap_add_to_ioend(struct inode *inode, loff_t offset, struct page *page, > > merged = __bio_try_merge_page(wpc->ioend->io_bio, page, len, poff, > &same_page); > - if (iop && !same_page) > - atomic_inc(&iop->write_count); > + if (iop) > + atomic_add(len, &iop->write_bytes_pending); > > if (!merged) { > if (bio_full(wpc->ioend->io_bio, len)) { > @@ -1353,7 +1354,7 @@ iomap_writepage_map(struct iomap_writepage_ctx *wpc, > LIST_HEAD(submit_list); > > WARN_ON_ONCE(i_blocks_per_page(inode, page) > 1 && !iop); > - WARN_ON_ONCE(iop && atomic_read(&iop->write_count) != 0); > + WARN_ON_ONCE(iop && atomic_read(&iop->write_bytes_pending) != 0); > > /* > * Walk through the page to find areas to write back. If we run off the > -- > 2.28.0 > _______________________________________________ Linux-nvdimm mailing list -- linux-nvdimm@lists.01.org To unsubscribe send an email to linux-nvdimm-leave@lists.01.org
WARNING: multiple messages have this Message-ID (diff)
From: "Darrick J. Wong" <darrick.wong@oracle.com> To: "Matthew Wilcox (Oracle)" <willy@infradead.org> Cc: linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, Christoph Hellwig <hch@infradead.org>, linux-nvdimm@lists.01.org, linux-kernel@vger.kernel.org, Dave Kleikamp <shaggy@kernel.org>, jfs-discussion@lists.sourceforge.net, Christoph Hellwig <hch@lst.de> Subject: Re: [PATCH v2 7/9] iomap: Convert write_count to write_bytes_pending Date: Thu, 17 Sep 2020 15:02:38 -0700 [thread overview] Message-ID: <20200917220238.GP7955@magnolia> (raw) In-Reply-To: <20200910234707.5504-8-willy@infradead.org> On Fri, Sep 11, 2020 at 12:47:05AM +0100, Matthew Wilcox (Oracle) wrote: > Instead of counting bio segments, count the number of bytes submitted. > This insulates us from the block layer's definition of what a 'same page' > is, which is not necessarily clear once THPs are involved. > > Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> > Reviewed-by: Christoph Hellwig <hch@lst.de> Looks ok, Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> --D > --- > fs/iomap/buffered-io.c | 19 ++++++++++--------- > 1 file changed, 10 insertions(+), 9 deletions(-) > > diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c > index 1cf976a8e55c..64a5cb383f30 100644 > --- a/fs/iomap/buffered-io.c > +++ b/fs/iomap/buffered-io.c > @@ -27,7 +27,7 @@ > */ > struct iomap_page { > atomic_t read_bytes_pending; > - atomic_t write_count; > + atomic_t write_bytes_pending; > spinlock_t uptodate_lock; > unsigned long uptodate[]; > }; > @@ -73,7 +73,7 @@ iomap_page_release(struct page *page) > if (!iop) > return; > WARN_ON_ONCE(atomic_read(&iop->read_bytes_pending)); > - WARN_ON_ONCE(atomic_read(&iop->write_count)); > + WARN_ON_ONCE(atomic_read(&iop->write_bytes_pending)); > WARN_ON_ONCE(bitmap_full(iop->uptodate, nr_blocks) != > PageUptodate(page)); > kfree(iop); > @@ -1047,7 +1047,7 @@ EXPORT_SYMBOL_GPL(iomap_page_mkwrite); > > static void > iomap_finish_page_writeback(struct inode *inode, struct page *page, > - int error) > + int error, unsigned int len) > { > struct iomap_page *iop = to_iomap_page(page); > > @@ -1057,9 +1057,9 @@ iomap_finish_page_writeback(struct inode *inode, struct page *page, > } > > WARN_ON_ONCE(i_blocks_per_page(inode, page) > 1 && !iop); > - WARN_ON_ONCE(iop && atomic_read(&iop->write_count) <= 0); > + WARN_ON_ONCE(iop && atomic_read(&iop->write_bytes_pending) <= 0); > > - if (!iop || atomic_dec_and_test(&iop->write_count)) > + if (!iop || atomic_sub_and_test(len, &iop->write_bytes_pending)) > end_page_writeback(page); > } > > @@ -1093,7 +1093,8 @@ iomap_finish_ioend(struct iomap_ioend *ioend, int error) > > /* walk each page on bio, ending page IO on them */ > bio_for_each_segment_all(bv, bio, iter_all) > - iomap_finish_page_writeback(inode, bv->bv_page, error); > + iomap_finish_page_writeback(inode, bv->bv_page, error, > + bv->bv_len); > bio_put(bio); > } > /* The ioend has been freed by bio_put() */ > @@ -1309,8 +1310,8 @@ iomap_add_to_ioend(struct inode *inode, loff_t offset, struct page *page, > > merged = __bio_try_merge_page(wpc->ioend->io_bio, page, len, poff, > &same_page); > - if (iop && !same_page) > - atomic_inc(&iop->write_count); > + if (iop) > + atomic_add(len, &iop->write_bytes_pending); > > if (!merged) { > if (bio_full(wpc->ioend->io_bio, len)) { > @@ -1353,7 +1354,7 @@ iomap_writepage_map(struct iomap_writepage_ctx *wpc, > LIST_HEAD(submit_list); > > WARN_ON_ONCE(i_blocks_per_page(inode, page) > 1 && !iop); > - WARN_ON_ONCE(iop && atomic_read(&iop->write_count) != 0); > + WARN_ON_ONCE(iop && atomic_read(&iop->write_bytes_pending) != 0); > > /* > * Walk through the page to find areas to write back. If we run off the > -- > 2.28.0 >
next prev parent reply other threads:[~2020-09-17 22:02 UTC|newest] Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-09-10 23:46 [PATCH v2 0/9] THP iomap patches for 5.10 Matthew Wilcox (Oracle) 2020-09-10 23:46 ` Matthew Wilcox (Oracle) 2020-09-10 23:46 ` [PATCH v2 1/9] iomap: Fix misplaced page flushing Matthew Wilcox (Oracle) 2020-09-10 23:46 ` Matthew Wilcox (Oracle) 2020-09-10 23:47 ` [PATCH v2 2/9] fs: Introduce i_blocks_per_page Matthew Wilcox (Oracle) 2020-09-10 23:47 ` Matthew Wilcox (Oracle) 2020-09-15 14:58 ` Dave Kleikamp 2020-09-15 14:58 ` Dave Kleikamp 2020-09-15 15:40 ` David Laight 2020-09-15 15:40 ` David Laight 2020-09-15 15:49 ` Matthew Wilcox 2020-09-15 15:49 ` Matthew Wilcox 2020-09-10 23:47 ` [PATCH v2 3/9] iomap: Use kzalloc to allocate iomap_page Matthew Wilcox (Oracle) 2020-09-10 23:47 ` Matthew Wilcox (Oracle) 2020-09-10 23:47 ` [PATCH v2 4/9] iomap: Use bitmap ops to set uptodate bits Matthew Wilcox (Oracle) 2020-09-10 23:47 ` Matthew Wilcox (Oracle) 2020-09-10 23:47 ` [PATCH v2 5/9] iomap: Support arbitrarily many blocks per page Matthew Wilcox (Oracle) 2020-09-10 23:47 ` Matthew Wilcox (Oracle) 2020-09-11 5:36 ` Christoph Hellwig 2020-09-11 5:36 ` Christoph Hellwig 2020-09-17 22:00 ` Darrick J. Wong 2020-09-17 22:00 ` Darrick J. Wong 2020-09-22 16:23 ` Qian Cai 2020-09-22 16:23 ` Qian Cai 2020-09-22 17:05 ` Matthew Wilcox 2020-09-22 17:05 ` Matthew Wilcox 2020-09-22 17:25 ` Qian Cai 2020-09-22 17:25 ` Qian Cai 2020-09-23 1:06 ` Qian Cai 2020-09-23 1:06 ` Qian Cai 2020-09-23 2:48 ` Matthew Wilcox 2020-09-23 2:48 ` Matthew Wilcox 2020-09-23 5:00 ` Darrick J. Wong 2020-09-23 5:00 ` Darrick J. Wong 2020-09-23 18:59 ` Matthew Wilcox 2020-09-23 18:59 ` Matthew Wilcox 2020-09-23 16:55 ` Qian Cai 2020-09-23 16:55 ` Qian Cai 2020-09-24 1:07 ` Matthew Wilcox 2020-09-24 1:07 ` Matthew Wilcox 2020-09-10 23:47 ` [PATCH v2 6/9] iomap: Convert read_count to read_bytes_pending Matthew Wilcox (Oracle) 2020-09-10 23:47 ` Matthew Wilcox (Oracle) 2020-09-11 5:36 ` Christoph Hellwig 2020-09-11 5:36 ` Christoph Hellwig 2020-09-17 22:02 ` Darrick J. Wong 2020-09-17 22:02 ` Darrick J. Wong 2020-09-10 23:47 ` [PATCH v2 7/9] iomap: Convert write_count to write_bytes_pending Matthew Wilcox (Oracle) 2020-09-10 23:47 ` Matthew Wilcox (Oracle) 2020-09-17 22:02 ` Darrick J. Wong [this message] 2020-09-17 22:02 ` Darrick J. Wong 2020-09-10 23:47 ` [PATCH v2 8/9] iomap: Convert iomap_write_end types Matthew Wilcox (Oracle) 2020-09-10 23:47 ` Matthew Wilcox (Oracle) 2020-09-17 22:03 ` Darrick J. Wong 2020-09-17 22:03 ` Darrick J. Wong 2020-09-10 23:47 ` [PATCH v2 9/9] iomap: Change calling convention for zeroing Matthew Wilcox (Oracle) 2020-09-10 23:47 ` Matthew Wilcox (Oracle) 2020-09-11 6:42 ` Christoph Hellwig 2020-09-11 6:42 ` Christoph Hellwig 2020-09-17 22:05 ` Darrick J. Wong 2020-09-17 22:05 ` Darrick J. Wong 2020-09-17 22:11 ` Matthew Wilcox 2020-09-17 22:11 ` Matthew Wilcox 2020-09-17 22:18 ` Darrick J. Wong 2020-09-17 22:18 ` Darrick J. Wong
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=20200917220238.GP7955@magnolia \ --to=darrick.wong@oracle.com \ --cc=hch@infradead.org \ --cc=hch@lst.de \ --cc=jfs-discussion@lists.sourceforge.net \ --cc=linux-fsdevel@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-nvdimm@lists.01.org \ --cc=linux-xfs@vger.kernel.org \ --cc=shaggy@kernel.org \ --cc=willy@infradead.org \ /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: linkBe 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.