From: John Hubbard <jhubbard@nvidia.com>
To: Matthew Wilcox <willy@infradead.org>
Cc: Christoph Hellwig <hch@infradead.org>,
David Hildenbrand <david@redhat.com>,
David Howells <dhowells@redhat.com>,
"Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>,
linux-mm@kvack.org, Jens Axboe <axboe@kernel.dk>,
linux-block@vger.kernel.org
Subject: Re: Does GUP page unpinning have to be done in the pinning context?
Date: Thu, 10 Apr 2025 12:34:44 -0700 [thread overview]
Message-ID: <f7d0df82-18a6-41e7-9588-e841b2a01d18@nvidia.com> (raw)
In-Reply-To: <Z_gYpwn5TvvYap6N@casper.infradead.org>
On 4/10/25 12:14 PM, Matthew Wilcox wrote:
> On Thu, Apr 10, 2025 at 12:11:42PM -0700, John Hubbard wrote:
>> On 4/10/25 12:28 AM, Christoph Hellwig wrote:
>>> On Wed, Apr 09, 2025 at 07:56:07PM -0700, John Hubbard wrote:
...
>> Oh actually I think I was wrong in my earlier reply about clearing
>> the dirty bit. Because in Jan Kara's original bug report, what
>> happened was that periodic writeback came in while the pages
>> were pinned, and cleared the dirty bit--and also deleted the
>> page buffers (file system specific behavior) that are required
>> for writeback.
>>
>> So then later when the pages are unpinned and marked dirty,
>> that causes the next writeback to fail in an unexpected way
>> (it used to cause ext4 BUG checks, in fact).
>>
>> So the problem here is that these pinned pages can get cleaned
>> while they are pinned, and then dirtied again by DMA (invisible
>> to the filesystem).
>
> Did we fix that already? Because it's relatively easy to writeback
Maybe not?
On a closely related note, I do still see folio_clear_dirty() being
called from ext4's mpage_prepare_extent_to_map(), along with the ext4
bandaid [1] that was applied to mitigate the problem:
/*
* Should never happen but for buggy code in
* other subsystems that call
* set_page_dirty() without properly warning
* the file system first. See [1] for more
* information.
*
* [1] https://lore.kernel.org/linux-mm/20180103100430.GE4911@quack2.suse.cz
*/
if (!folio_buffers(folio)) {
ext4_warning_inode(mpd->inode, "page %lu does not have buffers attached", folio->index);
folio_clear_dirty(folio);
folio_unlock(folio);
continue;
}
[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cc5095747edf
> pinned pages and _not_ clear the dirty flag. That handles the two
> problems which are falsely thinking that a heavily-mapped order-0 page
> is pinned (we write it back anyway, so don't lose data on crash),
> and doesn't strip the bufferheads.
That sounds like a viable solution!
thanks,
--
John Hubbard
next prev parent reply other threads:[~2025-04-10 19:34 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-04 10:20 Does GUP page unpinning have to be done in the pinning context? David Howells
2025-04-04 10:29 ` David Hildenbrand
2025-04-04 16:59 ` John Hubbard
2025-04-07 6:39 ` Christoph Hellwig
2025-04-10 2:56 ` John Hubbard
2025-04-10 7:28 ` Christoph Hellwig
2025-04-10 19:11 ` John Hubbard
2025-04-10 19:14 ` Matthew Wilcox
2025-04-10 19:34 ` John Hubbard [this message]
2025-05-12 6:21 ` Christoph Hellwig
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=f7d0df82-18a6-41e7-9588-e841b2a01d18@nvidia.com \
--to=jhubbard@nvidia.com \
--cc=axboe@kernel.dk \
--cc=david@redhat.com \
--cc=dhowells@redhat.com \
--cc=hch@infradead.org \
--cc=kirill.shutemov@linux.intel.com \
--cc=linux-block@vger.kernel.org \
--cc=linux-mm@kvack.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: 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.