[PATCH v3 00/15] netfs: Miscellaneous fixes
From: David Howells
Date: Thu Jun 25 2026 - 10:09:30 EST
Hi Christian,
Here are some miscellaneous fixes for netfslib. I separated them from my
netfs-next branch. Various Sashiko review comments[1][2][3] are addressed:
(1) Fix the decision whether to disallow write-streaming due to fscache
use.
(2) Fix netfs_create_write_req() to better handle async cache object
creation.
(3) Fix a double fput in cachefiles_create_tmpfile().
(4) Fix alteration of S_KERNEL_FILE inode flag without holding inode lock.
(5) Fix a potential mathematical underflow in
iov_iter_extract_xarray_pages() and make it return 0 and free the
array if no pages could be extracted.
(6) Fix a missing alloc failure check in iov_iter_extract_bvec_pages().
(7) Fix iov_iter_extract_user_pages() so that it doesn't leak the pages
array if it returns an error or 0 (inasmuch as the leak is really in
the callers).
(8) Remove an unused variable in kunit_iov_iter.c.
(9) Fix extract_xarray_to_sg() to calculate folio offset correctly.
(10) Fix a kdoc comment.
(11) Replace the netfs_inode::wb_lock mutex with a bit lock so that the
lock can be passed to the collector so that multiple asynchronous
writebacks won't interfere with each other.
(12) Fix writeback error handling to go through writeback_iter() so that it
can clean up its state.
(13) Fix ENOMEM handling in writeback to clean up the current folio if we
can't allocate a rolling buffer segment.
(14) Fix unbuffered/DIO write retry for filesystems that don't have a
->prepare_write() method.
The patches can also be found here:
https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git/log/?h=netfs-fixes
Thanks,
David
[1] https://sashiko.dev/#/patchset/20260608145432.681865-1-dhowells%40redhat.com
[2] https://sashiko.dev/#/patchset/20260616100821.2062304-1-dhowells%40redhat.com
[3] https://sashiko.dev/#/patchset/20260619140646.2633762-1-dhowells%40redhat.com
[4] https://sashiko.dev/#/patchset/20260624115737.2964520-1-dhowells%40redhat.com
Changes
=======
ver #3)
- Addressed more Sashiko comments[4]:
- Applied the disallow write-streaming fix to netfs_write_begin() also.
- Improve the synchronisation with async cache object creation in
netfs_create_write_req().
- Fix netfs_writepages() so it doesn't both redirty and kill folios (and
double unlock) if it can't create the request.
- Move the cleanup of the folio on ENOMEM from netfs_write_folio() to
netfs_writepages() as writethrough shouldn't do this.
- Alter the unbuffered/DIO write retry fix so that it sets the
IN_PROGRESS flag. Also made it clear the MADE_PROGRESS flag and update
wreq->transferred.
ver #2)
- Addressed various Sashiko comments[3]:
- Changed some kfree() to kvfree().
- Added some writeback error handling patches.
- Fixed DIO write retry.
ver #1)
- Added a fix for S_KERNEL_FILE in cachefiles_bury_object().
- Fixed how iov_iter_extract_*_pages() deals with *pages when returning 0
or error.
- Fixed the replacement of wb_lock with bit lock:
- Only release the bit lock for writeback, writethrough and write-single,
not for PG_private_2-based I/O, which doesn't take the lock.
- In netfs_writeback_single(), need to redirty the inode if can't get the
lock.
David Howells (15):
netfs: Fix decision whether to disallow write-streaming due to fscache
use
netfs: Fix netfs_create_write_req() to handle async cache object
creation
cachefiles: Fix double fput
cachefiles: Fix file burial to take lock when unsetting S_KERNEL_FILE
iov_iter: Fix potential underflow in iov_iter_extract_xarray_pages()
iov_iter: Fix missing alloc fail check in
iov_iter_extract_bvec_pages()
iov_iter: Fix a memory leak in iov_iter_extract_user_pages()
iov_iter: Remove unused variable in kunit_iov_iter.c
scatterlist: Fix offset in folio calc in extract_xarray_to_sg()
netfs: Fix kdoc warning
netfs: Replace wb_lock with a bit lock for asynchronicity
netfs: Fix writethrough to use collection offload
netfs: Fix writeback error handling
netfs: Fix folio state after ENOMEM whilst under writeback iteration
netfs: Fix DIO write retry for filesystems without a ->prepare_write()
fs/afs/symlink.c | 4 +-
fs/cachefiles/namei.c | 3 +-
fs/netfs/buffered_read.c | 2 +-
fs/netfs/buffered_write.c | 2 +-
fs/netfs/direct_write.c | 18 +++-----
fs/netfs/internal.h | 12 +++++
fs/netfs/locking.c | 95 ++++++++++++++++++++++++++++++++++++++
fs/netfs/write_collect.c | 10 ++++
fs/netfs/write_issue.c | 55 ++++++++++------------
include/linux/netfs.h | 13 ++++--
lib/iov_iter.c | 20 +++++++-
lib/scatterlist.c | 1 +
lib/tests/kunit_iov_iter.c | 5 +-
13 files changed, 185 insertions(+), 55 deletions(-)