diff options
| author | David Howells <[email protected]> | 2024-12-16 20:41:15 +0000 |
|---|---|---|
| committer | Christian Brauner <[email protected]> | 2024-12-20 21:34:08 +0000 |
| commit | eddf51f2bb2c28b082199c6f5fd95611ca511135 (patch) | |
| tree | dd6819ac492d181ef1402b59bce125bd2c19462d /fs/netfs/iterator.c | |
| parent | afs: Fix cleanup of immediately failed async calls (diff) | |
| download | kernel-eddf51f2bb2c28b082199c6f5fd95611ca511135.tar.gz kernel-eddf51f2bb2c28b082199c6f5fd95611ca511135.zip | |
afs: Make {Y,}FS.FetchData an asynchronous operation
Make FS.FetchData and YFS.FetchData an asynchronous operation in that the
request is queued in AF_RXRPC and then we return to the caller rather than
waiting. Processing of the returning packets is then done inline if it's a
synchronous VFS/VM call (readdir, read_folio, sync DIO, prep for write) or
offloaded to a workqueue if asynchronous VM calls (eg. readahead, async
DIO).
This reduces the chain of workqueues invoking workqueues and cuts out some
of the overhead, driving rxrpc data extraction and netfslib read collection
from a thread that's going to block to completion anyway if possible.
The ->done() call op is also split with ->immediate_cancel() handling the
cancellation on failure to begin the call and ->done() handling the rest.
This means that the AFS async FetchData code doesn't try to terminate the
netfs subrequest twice.
Signed-off-by: David Howells <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
cc: Marc Dionne <[email protected]>
cc: [email protected]
Signed-off-by: Christian Brauner <[email protected]>
Diffstat (limited to 'fs/netfs/iterator.c')
0 files changed, 0 insertions, 0 deletions
