On Wed, Aug 7, 2024 at 1:53 PM Shakeel Butt <shakeel.butt@xxxxxxxxx> wrote: > > On Wed, Aug 07, 2024 at 10:54:08AM GMT, Shakeel Butt wrote: > > On Wed, Aug 07, 2024 at 06:46:00PM GMT, Matthew Wilcox wrote: > > > On Wed, Aug 07, 2024 at 10:19:11AM -0700, Shakeel Butt wrote: > > > > On Wed, Aug 07, 2024 at 04:28:53PM GMT, Matthew Wilcox wrote: > > > > > On Tue, Jul 30, 2024 at 01:39:06PM -0700, Andrii Nakryiko wrote: > > > > > > + union { > > > > > > + struct { > > > > > > + struct address_space *mapping; > > > > > > + struct page *page; > > > > > > > > > > NAK. All the page-based interfaces are deprecated. Only we can't mark > > > > > them as deprecated because our tooling is a pile of crap. > > > > > > > > > > > + void *page_addr; > > > > > > + u64 file_off; > > > > > > > > > > loff_t pos. > > > > > > > > > > > + r->page = find_get_page(r->mapping, pg_off); > > > > > > > > > > r->folio = read_mapping_folio(r->mapping, r->pos / PAGE_SIZE, ...) > > > > > > > > > > OK, for network filesystems, you're going to need to retain the struct > > > > > file that's used to access them. So maybe this becomes > > > > > read_mapping_folio(r->file->f_mapping, r->pos, r->file) > > > > > > > > This code path can be called from non-sleepable context. What would be > > > > the appropriate way to get the folio in that case? > > > > > > There isn't. If there's no folio, or the folio isn't uptodate, we need > > > to sleep to wait for I/O. We can't busy-wait for I/O. > > > > > > > Failure is fine if there is no folio or the folio is not uptodate. I > > assume we can do: > > > > folio = __filemap_get_folio(r->mapping, pg_off, 0, 0); > > if (!folio || !folio_test_uptodate(folio)) > > return -EFAULT; > > And a folio_put(folio) if we return due to !folio_test_uptodate(). > Ok, did the conversion, thanks Shakeel and Matthew for the help. Sent v4. > > > > Is this appropriate here?