All of lore.kernel.org
 help / color / mirror / Atom feed
From: Josef Bacik <josef@toxicpanda.com>
To: Bernd Schubert <bschubert@ddn.com>
Cc: Miklos Szeredi <miklos@szeredi.hu>,
	Amir Goldstein <amir73il@gmail.com>,
	linux-fsdevel@vger.kernel.org, bernd.schubert@fastmail.fm
Subject: Re: [PATCH RFC v2 08/19] fuse: Add the queue configuration ioctl
Date: Thu, 30 May 2024 11:54:00 -0400	[thread overview]
Message-ID: <20240530155400.GE2205585@perftesting> (raw)
In-Reply-To: <20240529-fuse-uring-for-6-9-rfc2-out-v1-8-d149476b1d65@ddn.com>

On Wed, May 29, 2024 at 08:00:43PM +0200, Bernd Schubert wrote:
> Signed-off-by: Bernd Schubert <bschubert@ddn.com>
> ---
>  fs/fuse/dev.c             | 10 +++++
>  fs/fuse/dev_uring.c       | 95 +++++++++++++++++++++++++++++++++++++++++++++++
>  fs/fuse/dev_uring_i.h     | 18 +++++++++
>  fs/fuse/fuse_i.h          |  3 ++
>  include/uapi/linux/fuse.h | 26 +++++++++++++
>  5 files changed, 152 insertions(+)
> 
> diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c
> index 349c1d16b0df..78c05516da7f 100644
> --- a/fs/fuse/dev.c
> +++ b/fs/fuse/dev.c
> @@ -2395,6 +2395,12 @@ static long fuse_uring_ioctl(struct file *file, __u32 __user *argp)
>  	if (res != 0)
>  		return -EFAULT;
>  
> +	if (cfg.cmd == FUSE_URING_IOCTL_CMD_QUEUE_CFG) {
> +		res = _fuse_dev_ioctl_clone(file, cfg.qconf.control_fd);
> +		if (res != 0)
> +			return res;
> +	}
> +
>  	fud = fuse_get_dev(file);
>  	if (fud == NULL)
>  		return -ENODEV;
> @@ -2424,6 +2430,10 @@ static long fuse_uring_ioctl(struct file *file, __u32 __user *argp)
>  		if (res != 0)
>  			return res;
>  		break;
> +		case FUSE_URING_IOCTL_CMD_QUEUE_CFG:
> +			fud->uring_dev = 1;
> +			res = fuse_uring_queue_cfg(fc->ring, &cfg.qconf);
> +		break;
>  	default:
>  		res = -EINVAL;
>  	}
> diff --git a/fs/fuse/dev_uring.c b/fs/fuse/dev_uring.c
> index 9491bdaa5716..2c0ccb378908 100644
> --- a/fs/fuse/dev_uring.c
> +++ b/fs/fuse/dev_uring.c
> @@ -144,6 +144,39 @@ static char *fuse_uring_alloc_queue_buf(int size, int node)
>  	return buf ? buf : ERR_PTR(-ENOMEM);
>  }
>  
> +/*
> + * mmaped allocated buffers, but does not know which queue that is for
> + * This ioctl uses the userspace address as key to identify the kernel address
> + * and assign it to the kernel side of the queue.
> + */
> +static int fuse_uring_ioctl_mem_reg(struct fuse_ring *ring,
> +				    struct fuse_ring_queue *queue,
> +				    uint64_t uaddr)
> +{
> +	struct rb_node *node;
> +	struct fuse_uring_mbuf *entry;
> +	int tag;
> +
> +	node = rb_find((const void *)uaddr, &ring->mem_buf_map,
> +		       fuse_uring_rb_tree_buf_cmp);
> +	if (!node)
> +		return -ENOENT;
> +	entry = rb_entry(node, struct fuse_uring_mbuf, rb_node);
> +
> +	rb_erase(node, &ring->mem_buf_map);
> +
> +	queue->queue_req_buf = entry->kbuf;
> +
> +	for (tag = 0; tag < ring->queue_depth; tag++) {
> +		struct fuse_ring_ent *ent = &queue->ring_ent[tag];
> +
> +		ent->rreq = entry->kbuf + tag * ring->req_buf_sz;
> +	}
> +
> +	kfree(node);
> +	return 0;
> +}
> +
>  /**
>   * fuse uring mmap, per ring qeuue.
>   * Userpsace maps a kernel allocated ring/queue buffer. For numa awareness,
> @@ -234,3 +267,65 @@ fuse_uring_mmap(struct file *filp, struct vm_area_struct *vma)
>  
>  	return ret;
>  }
> +
> +int fuse_uring_queue_cfg(struct fuse_ring *ring,
> +			 struct fuse_ring_queue_config *qcfg)
> +{
> +	int tag;
> +	struct fuse_ring_queue *queue;
> +
> +	if (qcfg->qid >= ring->nr_queues) {
> +		pr_info("fuse ring queue config: qid=%u >= nr-queues=%zu\n",
> +			qcfg->qid, ring->nr_queues);
> +		return -EINVAL;
> +	}
> +	queue = fuse_uring_get_queue(ring, qcfg->qid);
> +
> +	if (queue->configured) {
> +		pr_info("fuse ring qid=%u already configured!\n", queue->qid);
> +		return -EALREADY;
> +	}
> +
> +	mutex_lock(&ring->start_stop_lock);
> +	fuse_uring_ioctl_mem_reg(ring, queue, qcfg->uaddr);
> +	mutex_unlock(&ring->start_stop_lock);

You're not handling the error here.  Thanks,

Josef

  reply	other threads:[~2024-05-30 15:54 UTC|newest]

Thread overview: 113+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-29 18:00 [PATCH RFC v2 00/19] fuse: fuse-over-io-uring Bernd Schubert
2024-05-29 18:00 ` [PATCH RFC v2 01/19] fuse: rename to fuse_dev_end_requests and make non-static Bernd Schubert
2024-05-29 21:09   ` Josef Bacik
2024-05-29 18:00 ` [PATCH RFC v2 02/19] fuse: Move fuse_get_dev to header file Bernd Schubert
2024-05-29 21:09   ` Josef Bacik
2024-05-29 18:00 ` [PATCH RFC v2 03/19] fuse: Move request bits Bernd Schubert
2024-05-29 21:10   ` Josef Bacik
2024-05-29 18:00 ` [PATCH RFC v2 04/19] fuse: Add fuse-io-uring design documentation Bernd Schubert
2024-05-29 21:17   ` Josef Bacik
2024-05-30 12:50     ` Bernd Schubert
2024-05-30 14:59       ` Josef Bacik
2024-05-29 18:00 ` [PATCH RFC v2 05/19] fuse: Add a uring config ioctl Bernd Schubert
2024-05-29 21:24   ` Josef Bacik
2024-05-30 12:51     ` Bernd Schubert
2024-06-03 13:03   ` Miklos Szeredi
2024-06-03 13:48     ` Bernd Schubert
2024-05-29 18:00 ` [PATCH RFC v2 06/19] Add a vmalloc_node_user function Bernd Schubert
2024-05-30 15:10   ` Josef Bacik
2024-05-30 16:13     ` Bernd Schubert
2024-05-31 13:56   ` Christoph Hellwig
2024-06-03 15:59     ` Kent Overstreet
2024-06-03 19:24       ` Bernd Schubert
2024-06-04  4:20         ` Christoph Hellwig
2024-06-07  2:30           ` Dave Chinner
2024-06-07  4:49             ` Christoph Hellwig
2024-06-04  4:08       ` Christoph Hellwig
2024-05-29 18:00 ` [PATCH RFC v2 07/19] fuse uring: Add an mmap method Bernd Schubert
2024-05-30 15:37   ` Josef Bacik
2024-05-29 18:00 ` [PATCH RFC v2 08/19] fuse: Add the queue configuration ioctl Bernd Schubert
2024-05-30 15:54   ` Josef Bacik [this message]
2024-05-30 17:49     ` Bernd Schubert
2024-05-29 18:00 ` [PATCH RFC v2 09/19] fuse: {uring} Add a dev_release exception for fuse-over-io-uring Bernd Schubert
2024-05-30 19:00   ` Josef Bacik
2024-05-29 18:00 ` [PATCH RFC v2 10/19] fuse: {uring} Handle SQEs - register commands Bernd Schubert
2024-05-30 19:55   ` Josef Bacik
2024-05-29 18:00 ` [PATCH RFC v2 11/19] fuse: Add support to copy from/to the ring buffer Bernd Schubert
2024-05-30 19:59   ` Josef Bacik
2024-09-01 11:56     ` Bernd Schubert
2024-09-01 11:56     ` Bernd Schubert
2024-05-29 18:00 ` [PATCH RFC v2 12/19] fuse: {uring} Add uring sqe commit and fetch support Bernd Schubert
2024-05-30 20:08   ` Josef Bacik
2024-05-29 18:00 ` [PATCH RFC v2 13/19] fuse: {uring} Handle uring shutdown Bernd Schubert
2024-05-30 20:21   ` Josef Bacik
2024-05-29 18:00 ` [PATCH RFC v2 14/19] fuse: {uring} Allow to queue to the ring Bernd Schubert
2024-05-30 20:32   ` Josef Bacik
2024-05-30 21:26     ` Bernd Schubert
2024-05-29 18:00 ` [PATCH RFC v2 15/19] export __wake_on_current_cpu Bernd Schubert
2024-05-30 20:37   ` Josef Bacik
2024-06-04  9:26     ` Peter Zijlstra
2024-06-04  9:36       ` Bernd Schubert
2024-06-04 19:27         ` Peter Zijlstra
2024-09-01 12:07           ` Bernd Schubert
2024-05-31 13:51   ` Christoph Hellwig
2024-05-29 18:00 ` [PATCH RFC v2 16/19] fuse: {uring} Wake requests on the the current cpu Bernd Schubert
2024-05-30 16:44   ` Shachar Sharon
2024-05-30 16:59     ` Bernd Schubert
2024-05-29 18:00 ` [PATCH RFC v2 17/19] fuse: {uring} Send async requests to qid of core + 1 Bernd Schubert
2024-05-29 18:00 ` [PATCH RFC v2 18/19] fuse: {uring} Set a min cpu offset io-size for reads/writes Bernd Schubert
2024-05-29 18:00 ` [PATCH RFC v2 19/19] fuse: {uring} Optimize async sends Bernd Schubert
2024-05-31 16:24   ` Jens Axboe
2024-05-31 17:36     ` Bernd Schubert
2024-05-31 19:10       ` Jens Axboe
2024-06-01 16:37         ` Bernd Schubert
2024-05-30  7:07 ` [PATCH RFC v2 00/19] fuse: fuse-over-io-uring Amir Goldstein
2024-05-30 12:09   ` Bernd Schubert
2024-05-30 15:36 ` Kent Overstreet
2024-05-30 16:02   ` Bernd Schubert
2024-05-30 16:10     ` Kent Overstreet
2024-05-30 16:17       ` Bernd Schubert
2024-05-30 17:30         ` Kent Overstreet
2024-05-30 19:09         ` Josef Bacik
2024-05-30 20:05           ` Kent Overstreet
2024-05-31  3:53         ` [PATCH] fs: sys_ringbuffer() (WIP) Kent Overstreet
2024-05-31 13:11           ` kernel test robot
2024-05-31 15:49           ` kernel test robot
2024-05-30 16:21     ` [PATCH RFC v2 00/19] fuse: fuse-over-io-uring Jens Axboe
2024-05-30 16:32       ` Bernd Schubert
2024-05-30 17:26         ` Jens Axboe
2024-05-30 17:16       ` Kent Overstreet
2024-05-30 17:28         ` Jens Axboe
2024-05-30 17:58           ` Kent Overstreet
2024-05-30 18:48             ` Jens Axboe
2024-05-30 19:35               ` Kent Overstreet
2024-05-31  0:11                 ` Jens Axboe
2024-06-04 23:45       ` Ming Lei
2024-05-30 20:47 ` Josef Bacik
2024-06-11  8:20 ` Miklos Szeredi
2024-06-11 10:26   ` Bernd Schubert
2024-06-11 15:35     ` Miklos Szeredi
2024-06-11 17:37       ` Bernd Schubert
2024-06-11 23:35         ` Kent Overstreet
2024-06-12 13:53           ` Bernd Schubert
2024-06-12 14:19             ` Kent Overstreet
2024-06-12 15:40               ` Bernd Schubert
2024-06-12 15:55                 ` Kent Overstreet
2024-06-12 16:15                   ` Bernd Schubert
2024-06-12 16:24                     ` Kent Overstreet
2024-06-12 16:44                       ` Bernd Schubert
2024-06-12  7:39         ` Miklos Szeredi
2024-06-12 13:32           ` Bernd Schubert
2024-06-12 13:46             ` Bernd Schubert
2024-06-12 14:07             ` Miklos Szeredi
2024-06-12 14:56               ` Bernd Schubert
2024-08-02 23:03                 ` Bernd Schubert
2024-08-29 22:32                 ` Bernd Schubert
2024-08-30 13:12                   ` Jens Axboe
2024-08-30 13:28                     ` Bernd Schubert
2024-08-30 13:33                       ` Jens Axboe
2024-08-30 14:55                         ` Pavel Begunkov
2024-08-30 15:10                           ` Bernd Schubert
2024-08-30 20:08                           ` Jens Axboe
2024-08-31  0:02                             ` Bernd Schubert
2024-08-31  0:49                               ` Bernd Schubert

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240530155400.GE2205585@perftesting \
    --to=josef@toxicpanda.com \
    --cc=amir73il@gmail.com \
    --cc=bernd.schubert@fastmail.fm \
    --cc=bschubert@ddn.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=miklos@szeredi.hu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.