On Thu 09-02-23 18:10:23, John Hubbard wrote: > On 2/9/23 17:54, John Hubbard wrote: > > On 2/9/23 04:31, Jan Kara wrote: > > > When a folio is pinned, there is no point in trying to write it during > > > memory cleaning writeback. We cannot reclaim the folio until it is > > > unpinned anyway and we cannot even be sure the folio is really clean. > > > On top of that writeback of such folio may be problematic as the data > > > can change while the writeback is running thus causing checksum or > > > DIF/DIX failures. So just don't bother doing memory cleaning writeback > > > for pinned folios. > > > > > > Signed-off-by: Jan Kara <jack@xxxxxxx> > > > --- > > > fs/9p/vfs_addr.c | 2 +- > > > fs/afs/file.c | 2 +- > > > fs/afs/write.c | 6 +++--- > > > fs/btrfs/extent_io.c | 14 +++++++------- > > > fs/btrfs/free-space-cache.c | 2 +- > > > fs/btrfs/inode.c | 2 +- > > > fs/btrfs/subpage.c | 2 +- > > > > Oh, and one more fix, below, is required in order to build with my local > test config. Assuming that it is reasonable to deal with pinned pages > here, which I think it is: > > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c > index 9c759df700ca..c3279fb0edc8 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c > +++ b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c > @@ -313,7 +313,7 @@ void __shmem_writeback(size_t size, struct address_space *mapping) > if (!page) > continue; > - if (!page_mapped(page) && clear_page_dirty_for_io(page)) { > + if (!page_mapped(page) && clear_page_dirty_for_io(&wbc, page)) { > int ret; > SetPageReclaim(page); > Thanks, fixed up. It didn't occur to me to grep drivers/ for these functions :). Honza -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR