Re: Ceph patches for the merge window?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Jun 27, 2023 at 4:28 PM David Howells <dhowells@xxxxxxxxxx> wrote:
>
> Looking at "ceph: add a dedicated private data for netfs rreq" you might find
> the attached patch useful.  It's in my list of netfs patches to push once I
> get away from splice.
>
> David
> ---
> netfs: Allow the netfs to make the io (sub)request alloc larger
>
> 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@xxxxxxxxxx>
> ---
>  fs/netfs/objects.c    |    7 +++++--
>  include/linux/netfs.h |    2 ++
>  2 files changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/fs/netfs/objects.c b/fs/netfs/objects.c
> index e41f9fc9bdd2..2f1865ff7cce 100644
> --- a/fs/netfs/objects.c
> +++ b/fs/netfs/objects.c
> @@ -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);
>
> @@ -116,7 +117,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);
> diff --git a/include/linux/netfs.h b/include/linux/netfs.h
> index b76a1548d311..442b88e39945 100644
> --- a/include/linux/netfs.h
> +++ b/include/linux/netfs.h
> @@ -214,6 +214,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 */

Yup, definitely a case for a future improvement to get rid of an extra
allocation.  I would suggest adding helpers for casting to and from the
private area for both netfs_io_request and netfs_io_subrequest to the
framework, see blk_mq_rq_to/from_pdu() for an example.

Thanks,

                Ilya




[Index of Archives]     [CEPH Users]     [Ceph Large]     [Ceph Dev]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux