On Thu, May 15, 2025 at 1:26 AM Miklos Szeredi <miklos@xxxxxxxxxx> wrote: > > On Wed, 14 May 2025 at 02:18, Matthew Wilcox <willy@xxxxxxxxxxxxx> wrote: > > > > On Mon, May 12, 2025 at 03:58:30PM -0700, Joanne Koong wrote: > > > @@ -1126,22 +1127,22 @@ static int fuse_copy_page(struct fuse_copy_state *cs, struct page **pagep, > > > return err; > > > } > > > } > > > - if (page) { > > > - void *mapaddr = kmap_local_page(page); > > > - void *buf = mapaddr + offset; > > > + if (folio) { > > > + void *mapaddr = kmap_local_folio(folio, offset); > > > + void *buf = mapaddr; > > > offset += fuse_copy_do(cs, &buf, &count); > > > kunmap_local(mapaddr); > > Fixed version pushed. I think this needs to be: if (folio) { void *mapaddr = kmap_local_folio(folio, offset); void *buf = mapaddr; unsigned copy = count; unsigned bytes_copied; if (folio_test_highmem(folio) && count > PAGE_SIZE - offset_in_page(offset)) copy = PAGE_SIZE - offset_in_page(offset); bytes_copied = fuse_copy_do(cs, &buf, ©); kunmap_local(mapaddr); offset += bytes_copied; count -= bytes_copied; else it will only copy the first page of the highmem folio. Thanks, Joanne > > Thanks, > Miklos