On Thu, Dec 19, 2024 at 01:08:15PM -0500, Jeff Layton wrote: > > + tmp = copy_folio_from_iter_atomic(folio, folio_offset, bytes, ii); > > Just to save someone else going down the same rabbit hole: > > copy_folio_from_iter_atomic() is defined as: > > static inline size_t copy_folio_from_iter_atomic(struct folio *folio, > size_t offset, size_t bytes, struct iov_iter *i) > { > return copy_page_from_iter_atomic(&folio->page, offset, bytes, i); > } > > ...which _looks_ sort of like it's not fully baked yet and can't handle > a large folio, but it turns out that copy_page_from_iter_atomic() can > handle compound pages, so I think this is actually OK. Whew! Yes, this is fine. I'd love to clean this up further. If someone wants the kudos of doing that, ntfs_compress_write() is your challenge. It's the only remaining caller of copy_page_from_iter_atomic() and once it's converted to use folios, we can push folios deeper into the iov_iter code.