Re: [PATCH v6 01/11] fuse: support copying large folios

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, May 14, 2025 at 03:59:50PM -0700, Joanne Koong wrote:
> On Tue, May 13, 2025 at 5:18 PM Matthew Wilcox <willy@xxxxxxxxxxxxx> wrote:
> > kmap_local_folio() only maps the page which contains 'offset'.
> > following what the functions in highmem.h do, i'd suggest something
> > like:
> >
> >                 if (folio) {
> >                         void *mapaddr = kmap_local_folio(folio, offset);
> >                         void *buf = mapaddr;
> >
> >                         if (folio_test_highmem(folio) &&
> >                             size > PAGE_SIZE - offset_in_page(offset))
> >                                 size = PAGE_SIZE - offset_in_page(offset);
> >                         offset += fuse_copy_do(cs, &buf, &count);
> >                         kunmap_local(mapaddr);
> >
> Ahh okay, I see, thanks. Do you think it makes sense to change
> kmap_local_folio() to kmap all the pages in the folio if the folio is
> in highmem instead of the caller needing to do that for each page in
> the folio one by one? We would need a kunmap_local_folio() where we
> pass in the folio so that we know how many pages need to be unmapped,
> but it seems to me like with large folios, every caller will be
> running into this issue, so maybe we should just have
> kmap_local_folio() handle it?

Spoken like someone who hasn't looked into the implementation of
kmap_local at all ;-)

Basically, this isn't possible.  There's only space for 16 pages to be
mapped at once, and we might want to copy from one folio to another, so
we'd be limited to a maximum folio order of 8.  Expanding the reserved
space for kmap is hard because it's primarily used on 32-bit machines
and we're very constrained in VA space.




[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [NTFS 3]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [NTFS 3]     [Samba]     [Device Mapper]     [CEPH Development]

  Powered by Linux