• David Howells's avatar
    netfs: Dispatch write requests to process a writeback slice · 0e0f2dfe
    David Howells authored
    Dispatch one or more write reqeusts to process a writeback slice, where a
    slice is tailored more to logical block divisions within the file (such as
    crypto blocks, an object layout or cache granules) than the protocol RPC
    maximum capacity.
    
    The dispatch doesn't happen until throttling allows, at which point the
    entire writeback slice is processed and queued.  A slice may be written to
    multiple destinations (one or more servers and the local cache) and the
    writes to each destination might be split up along different lines.
    
    The writeback slice holds the required folios pinned.  An iov_iter is
    provided in netfs_write_request that describes the buffer to be used.  This
    may be part of the pagecache, may have auxiliary padding pages attached or
    may be a bounce buffer resulting from crypto or compression.  Consequently,
    the filesystem must not twiddle the folio markings directly.
    
    The following API is available to the filesystem:
    
     (1) The ->create_write_requests() method is called to ask the filesystem
         to create the requests it needs.  This is passed the writeback slice
         to be processed.
    
     (2) The filesystem should then call netfs_create_write_request() to create
         the requests it needs.
    
     (3) Once a request is initialised, netfs_queue_write_request() can be
         called to dispatch it asynchronously, if not completed immediately.
    
     (4) netfs_write_request_completed() should be called to note the
         completion of a request.
    
     (5) netfs_get_write_request() and netfs_put_write_request() are provided
         to refcount a request.  These take constants from the netfs_wreq_trace
         enum for logging into ftrace.
    
     (6) The ->free_write_request is method is called to ask the filesystem to
         clean up a request.
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
    cc: linux-cachefs@redhat.com
    cc: linux-fsdevel@vger.kernel.org
    cc: linux-mm@kvack.org
    0e0f2dfe
netfs.h 11.2 KB