On Fri, Sep 13, 2024 at 06:56:36PM +0200, Christian Brauner wrote: > Hey Linus, > > /* Summary */ > > This contains the work to improve read/write performance for the new > netfs library. > > The main performance enhancing changes are: > > - Define a structure, struct folio_queue, and a new iterator type, > ITER_FOLIOQ, to hold a buffer as a replacement for ITER_XARRAY. See > that patch for questions about naming and form. > > ITER_FOLIOQ is provided as a replacement for ITER_XARRAY. The > problem with an xarray is that accessing it requires the use of a > lock (typically the RCU read lock) - and this means that we can't > supply iterate_and_advance() with a step function that might sleep > (crypto for example) without having to drop the lock between > pages. ITER_FOLIOQ is the iterator for a chain of folio_queue > structs, where each folio_queue holds a small list of folios. A > folio_queue struct is a simpler structure than xarray and is not > subject to concurrent manipulation by the VM. folio_queue is used > rather than a bvec[] as it can form lists of indefinite size, > adding to one end and removing from the other on the fly. <...> > David Howells (24): > cachefiles: Fix non-taking of sb_writers around set/removexattr > netfs: Adjust labels in /proc/fs/netfs/stats > netfs: Record contention stats for writeback lock > netfs: Reduce number of conditional branches in netfs_perform_write() > netfs, cifs: Move CIFS_INO_MODIFIED_ATTR to netfs_inode > netfs: Move max_len/max_nr_segs from netfs_io_subrequest to netfs_io_stream > netfs: Reserve netfs_sreq_source 0 as unset/unknown > netfs: Remove NETFS_COPY_TO_CACHE > netfs: Set the request work function upon allocation > netfs: Use bh-disabling spinlocks for rreq->lock > mm: Define struct folio_queue and ITER_FOLIOQ to handle a sequence of folios > iov_iter: Provide copy_folio_from_iter() > cifs: Provide the capability to extract from ITER_FOLIOQ to RDMA SGEs > netfs: Use new folio_queue data type and iterator instead of xarray iter > netfs: Provide an iterator-reset function > netfs: Simplify the writeback code > afs: Make read subreqs async > netfs: Speed up buffered reading > netfs: Remove fs/netfs/io.c > cachefiles, netfs: Fix write to partial block at EOF > netfs: Cancel dirty folios that have no storage destination > cifs: Use iterate_and_advance*() routines directly for hashing > cifs: Switch crypto buffer to use a folio_queue rather than an xarray > cifs: Don't support ITER_XARRAY Christian, David, Do you have fixes for the following issues reported for series? https://lore.kernel.org/all/20240923183432.1876750-1-chantr4@xxxxxxxxx/ https://lore.kernel.org/all/4b5621958a758da830c1cf09c6f6893aed371f9d.camel@xxxxxxxxx/ https://lore.kernel.org/all/20240924094809.GA1182241@unreal/ In my case, I don't have any other workaround but simply revert these commits: "netfs: Use new folio_queue data type and iterator instead of xarray iter" "netfs: Provide an iterator-reset function" "netfs: Simplify the writeback code" "afs: Make read subreqs async" "netfs: Speed up buffered reading" "netfs: Remove fs/netfs/io.c" "cachefiles, netfs: Fix write to partial block at EOF" "netfs: Cancel dirty folios that have no storage destination" "cifs: Use iterate_and_advance*() routines directly for hashing" "cifs: Switch crypto buffer to use a folio_queue rather than an xarray" "cifs: Don't support ITER_XARRAY" "cifs: Fix signature miscalculation" "cifs: Fix cifs readv callback merge resolution issue" "cifs: Remove redundant setting of NETFS_SREQ_HIT_EOF" Thanks