Skip to content

Commit

Permalink
netfs: Allow the netfs to make the io (sub)request alloc larger
Browse files Browse the repository at this point in the history
Allow the network filesystem to specify extra space to be allocated on the
end of the io (sub)request.  This allows cifs, for example, to use this
space rather than allocating its own cifs_readdata struct.

Signed-off-by: David Howells <dhowells@redhat.com>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
cc: linux-cachefs@redhat.com
cc: linux-fsdevel@vger.kernel.org
cc: linux-mm@kvack.org
  • Loading branch information
David Howells committed Dec 24, 2023
1 parent 87b57a0 commit cc3cb0a
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 2 deletions.
7 changes: 5 additions & 2 deletions fs/netfs/objects.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ struct netfs_io_request *netfs_alloc_request(struct address_space *mapping,
struct netfs_io_request *rreq;
int ret;

rreq = kzalloc(sizeof(struct netfs_io_request), GFP_KERNEL);
rreq = kzalloc(ctx->ops->io_request_size ?: sizeof(struct netfs_io_request),
GFP_KERNEL);
if (!rreq)
return ERR_PTR(-ENOMEM);

Expand Down Expand Up @@ -114,7 +115,9 @@ struct netfs_io_subrequest *netfs_alloc_subrequest(struct netfs_io_request *rreq
{
struct netfs_io_subrequest *subreq;

subreq = kzalloc(sizeof(struct netfs_io_subrequest), GFP_KERNEL);
subreq = kzalloc(rreq->netfs_ops->io_subrequest_size ?:
sizeof(struct netfs_io_subrequest),
GFP_KERNEL);
if (subreq) {
INIT_LIST_HEAD(&subreq->rreq_link);
refcount_set(&subreq->ref, 2);
Expand Down
2 changes: 2 additions & 0 deletions include/linux/netfs.h
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,8 @@ struct netfs_io_request {
* Operations the network filesystem can/must provide to the helpers.
*/
struct netfs_request_ops {
unsigned int io_request_size; /* Alloc size for netfs_io_request struct */
unsigned int io_subrequest_size; /* Alloc size for netfs_io_subrequest struct */
int (*init_request)(struct netfs_io_request *rreq, struct file *file);
void (*free_request)(struct netfs_io_request *rreq);

Expand Down

0 comments on commit cc3cb0a

Please sign in to comment.