From: Christoph Hellwig <hch@lst.de>
To: Tal Zussman <tz2294@columbia.edu>
Cc: Jens Axboe <axboe@kernel.dk>, Christoph Hellwig <hch@lst.de>,
Johannes Thumshirn <johannes.thumshirn@wdc.com>,
Luis Chamberlain <mcgrof@kernel.org>,
Hannes Reinecke <hare@suse.de>,
"Matthew Wilcox (Oracle)" <willy@infradead.org>,
John Garry <john.g.garry@oracle.com>,
Christian Brauner <brauner@kernel.org>,
"Darrick J. Wong" <djwong@kernel.org>,
Keith Busch <kbusch@kernel.org>,
"Martin K. Petersen" <martin.petersen@oracle.com>,
linux-block@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 6/7] block: unpin all pages of a bvec in bio_iov_iter_align_down()
Date: Mon, 7 Sep 2026 09:13:18 +0200 [thread overview]
Message-ID: <20260907071318.GE934@lst.de> (raw)
In-Reply-To: <8da4a2dd-a4ef-4a61-888f-60c611d3f911@columbia.edu>
On Fri, Aug 28, 2026 at 05:36:24PM +0300, Tal Zussman wrote:
> > Both issues occur only with a logical block size above PAGE_SIZE and a
> > large folio backing the user buffer. On a device with a 64K logical
> > block size, an O_DIRECT pwritev() from a hugetlb mapping that ends 16K
> > past a block boundary leaks one huge page per call, whether the
> > remainder is its own bvec or the tail of a larger one.
Do you have a reproducer for that?
> > @@ -1213,14 +1219,24 @@ static int bio_iov_iter_align_down(struct bio *bio, struct iov_iter *iter,
> > bio->bi_iter.bi_size -= nbytes;
> > while (nbytes >= bv->bv_len) {
> > if (bio_flagged(bio, BIO_PAGE_PINNED))
> > - unpin_user_page(bv->bv_page);
> > + unpin_user_folio(bvec_folio(bv),
> > + bvec_nr_pages(bv));
>
> And right after sending this, I noticed bvec_unpin()...
>
> I think a cleaner solution is to move bvec_unpin() up, make bvec_nr_pages()
> handle bv_offset > PAGE_SIZE, use bvec_nr_pages() in bvec_unpin(), and then
> use bvec_unpin() here.
Yes, that sounds better.
next prev parent reply other threads:[~2026-09-07 7:13 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-28 13:49 [PATCH v2 0/7] block device fixes for large block sizes, IOCB_NOWAIT, and direct I/O Tal Zussman
2026-08-28 13:49 ` [PATCH v2 1/7] block: use iomap_dirty_folio for block devices Tal Zussman
2026-09-02 12:43 ` Hannes Reinecke
2026-08-28 13:49 ` [PATCH v2 2/7] block: take i_rwsem for the direct I/O write fallback Tal Zussman
2026-09-02 12:47 ` Hannes Reinecke
2026-09-04 16:22 ` Tal Zussman
2026-09-07 7:08 ` Christoph Hellwig
2026-09-07 23:15 ` Tal Zussman
2026-08-28 13:49 ` [PATCH v2 3/7] block: take i_rwsem for the splice read path Tal Zussman
2026-09-02 12:52 ` Hannes Reinecke
2026-09-07 7:10 ` Christoph Hellwig
2026-08-28 13:49 ` [PATCH v2 4/7] block: honor IOCB_NOWAIT in the block device buffered " Tal Zussman
2026-09-02 13:04 ` Hannes Reinecke
2026-09-07 7:11 ` Christoph Hellwig
2026-09-08 0:09 ` Tal Zussman
2026-08-28 13:49 ` [PATCH v2 5/7] block: fail atomic writes instead of falling back to buffered I/O Tal Zussman
2026-09-02 14:09 ` Hannes Reinecke
2026-09-07 7:12 ` Christoph Hellwig
2026-09-07 7:49 ` John Garry
2026-09-09 6:03 ` Tal Zussman
2026-08-28 13:49 ` [PATCH v2 6/7] block: unpin all pages of a bvec in bio_iov_iter_align_down() Tal Zussman
2026-08-28 14:36 ` Tal Zussman
2026-09-07 7:13 ` Christoph Hellwig [this message]
2026-09-08 0:11 ` Tal Zussman
2026-09-02 14:13 ` Hannes Reinecke
2026-08-28 13:49 ` [PATCH v2 7/7] block: remove dead metadata handling from the async direct I/O path Tal Zussman
2026-09-07 7:13 ` Christoph Hellwig
2026-08-28 15:32 ` [PATCH v2 0/7] block device fixes for large block sizes, IOCB_NOWAIT, and direct I/O Tal Zussman
2026-09-04 16:19 ` Tal Zussman
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=20260907071318.GE934@lst.de \
--to=hch@lst.de \
--cc=axboe@kernel.dk \
--cc=brauner@kernel.org \
--cc=djwong@kernel.org \
--cc=hare@suse.de \
--cc=johannes.thumshirn@wdc.com \
--cc=john.g.garry@oracle.com \
--cc=kbusch@kernel.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=mcgrof@kernel.org \
--cc=tz2294@columbia.edu \
--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: 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.