From: Vivek Goyal <vgoyal@redhat.com> To: linux-fsdevel@vger.kernel.org, virtio-fs@redhat.com, miklos@szeredi.hu, stefanha@redhat.com Cc: vgoyal@redhat.com, iangelak@redhat.com, jaggel@bu.edu, dgilbert@redhat.com Subject: [PATCH 3/8] virtiofs: Add an index to keep track of first request queue Date: Thu, 30 Sep 2021 10:38:45 -0400 [thread overview] Message-ID: <20210930143850.1188628-4-vgoyal@redhat.com> (raw) In-Reply-To: <20210930143850.1188628-1-vgoyal@redhat.com> We have many virtqueues and first queue which carries fuse normal requests (except forget requests) has index pointed to by enum VQ_REQUEST. This works fine as long as number of queues are not dynamic. I am about to introduce one more virtqueue, called notification queue, which will be present only if device on host supports it. That means index of request queue will change depending on if notification queue is present or not. So, add a variable to keep track of that index and this will help when notification queue is added in next patch. Signed-off-by: Vivek Goyal <vgoyal@redhat.com> Signed-off-by: Ioannis Angelakopoulos <iangelak@redhat.com> --- fs/fuse/virtio_fs.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/fs/fuse/virtio_fs.c b/fs/fuse/virtio_fs.c index f7c58a4b996d..cb3c7bf8cce4 100644 --- a/fs/fuse/virtio_fs.c +++ b/fs/fuse/virtio_fs.c @@ -61,6 +61,7 @@ struct virtio_fs { unsigned int nvqs; /* number of virtqueues */ unsigned int num_request_queues; /* number of request queues */ struct dax_device *dax_dev; + unsigned int first_reqq_idx; /* First request queue idx */ /* DAX memory window where file contents are mapped */ void *window_kaddr; @@ -676,7 +677,9 @@ static int virtio_fs_setup_vqs(struct virtio_device *vdev, if (fs->num_request_queues == 0) return -EINVAL; - fs->nvqs = VQ_REQUEST + fs->num_request_queues; + /* One hiprio queue and rest are request queues */ + fs->nvqs = 1 + fs->num_request_queues; + fs->first_reqq_idx = 1; fs->vqs = kcalloc(fs->nvqs, sizeof(fs->vqs[VQ_HIPRIO]), GFP_KERNEL); if (!fs->vqs) return -ENOMEM; @@ -696,10 +699,11 @@ static int virtio_fs_setup_vqs(struct virtio_device *vdev, names[VQ_HIPRIO] = fs->vqs[VQ_HIPRIO].name; /* Initialize the requests virtqueues */ - for (i = VQ_REQUEST; i < fs->nvqs; i++) { + for (i = fs->first_reqq_idx; i < fs->nvqs; i++) { char vq_name[VQ_NAME_LEN]; - snprintf(vq_name, VQ_NAME_LEN, "requests.%u", i - VQ_REQUEST); + snprintf(vq_name, VQ_NAME_LEN, "requests.%u", + i - fs->first_reqq_idx); virtio_fs_init_vq(&fs->vqs[i], vq_name, VQ_REQUEST); callbacks[i] = virtio_fs_vq_done; names[i] = fs->vqs[i].name; @@ -1217,7 +1221,7 @@ static int virtio_fs_enqueue_req(struct virtio_fs_vq *fsvq, static void virtio_fs_wake_pending_and_unlock(struct fuse_iqueue *fiq) __releases(fiq->lock) { - unsigned int queue_id = VQ_REQUEST; /* TODO multiqueue */ + unsigned int queue_id; struct virtio_fs *fs; struct fuse_req *req; struct virtio_fs_vq *fsvq; @@ -1231,6 +1235,7 @@ __releases(fiq->lock) spin_unlock(&fiq->lock); fs = fiq->priv; + queue_id = fs->first_reqq_idx; pr_debug("%s: opcode %u unique %#llx nodeid %#llx in.len %u out.len %u\n", __func__, req->in.h.opcode, req->in.h.unique, @@ -1411,6 +1416,7 @@ static int virtio_fs_get_tree(struct fs_context *fsc) struct fuse_mount *fm; unsigned int virtqueue_size; int err = -EIO; + struct virtio_fs_vq *first_req_fsvq; /* This gets a reference on virtio_fs object. This ptr gets installed * in fc->iq->priv. Once fuse_conn is going away, it calls ->put() @@ -1422,7 +1428,8 @@ static int virtio_fs_get_tree(struct fs_context *fsc) return -EINVAL; } - virtqueue_size = virtqueue_get_vring_size(fs->vqs[VQ_REQUEST].vq); + first_req_fsvq = &fs->vqs[fs->first_reqq_idx]; + virtqueue_size = virtqueue_get_vring_size(first_req_fsvq->vq); if (WARN_ON(virtqueue_size <= FUSE_HEADER_OVERHEAD)) goto out_err; -- 2.31.1
WARNING: multiple messages have this Message-ID (diff)
From: Vivek Goyal <vgoyal@redhat.com> To: linux-fsdevel@vger.kernel.org, virtio-fs@redhat.com, miklos@szeredi.hu, stefanha@redhat.com Cc: vgoyal@redhat.com Subject: [Virtio-fs] [PATCH 3/8] virtiofs: Add an index to keep track of first request queue Date: Thu, 30 Sep 2021 10:38:45 -0400 [thread overview] Message-ID: <20210930143850.1188628-4-vgoyal@redhat.com> (raw) In-Reply-To: <20210930143850.1188628-1-vgoyal@redhat.com> We have many virtqueues and first queue which carries fuse normal requests (except forget requests) has index pointed to by enum VQ_REQUEST. This works fine as long as number of queues are not dynamic. I am about to introduce one more virtqueue, called notification queue, which will be present only if device on host supports it. That means index of request queue will change depending on if notification queue is present or not. So, add a variable to keep track of that index and this will help when notification queue is added in next patch. Signed-off-by: Vivek Goyal <vgoyal@redhat.com> Signed-off-by: Ioannis Angelakopoulos <iangelak@redhat.com> --- fs/fuse/virtio_fs.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/fs/fuse/virtio_fs.c b/fs/fuse/virtio_fs.c index f7c58a4b996d..cb3c7bf8cce4 100644 --- a/fs/fuse/virtio_fs.c +++ b/fs/fuse/virtio_fs.c @@ -61,6 +61,7 @@ struct virtio_fs { unsigned int nvqs; /* number of virtqueues */ unsigned int num_request_queues; /* number of request queues */ struct dax_device *dax_dev; + unsigned int first_reqq_idx; /* First request queue idx */ /* DAX memory window where file contents are mapped */ void *window_kaddr; @@ -676,7 +677,9 @@ static int virtio_fs_setup_vqs(struct virtio_device *vdev, if (fs->num_request_queues == 0) return -EINVAL; - fs->nvqs = VQ_REQUEST + fs->num_request_queues; + /* One hiprio queue and rest are request queues */ + fs->nvqs = 1 + fs->num_request_queues; + fs->first_reqq_idx = 1; fs->vqs = kcalloc(fs->nvqs, sizeof(fs->vqs[VQ_HIPRIO]), GFP_KERNEL); if (!fs->vqs) return -ENOMEM; @@ -696,10 +699,11 @@ static int virtio_fs_setup_vqs(struct virtio_device *vdev, names[VQ_HIPRIO] = fs->vqs[VQ_HIPRIO].name; /* Initialize the requests virtqueues */ - for (i = VQ_REQUEST; i < fs->nvqs; i++) { + for (i = fs->first_reqq_idx; i < fs->nvqs; i++) { char vq_name[VQ_NAME_LEN]; - snprintf(vq_name, VQ_NAME_LEN, "requests.%u", i - VQ_REQUEST); + snprintf(vq_name, VQ_NAME_LEN, "requests.%u", + i - fs->first_reqq_idx); virtio_fs_init_vq(&fs->vqs[i], vq_name, VQ_REQUEST); callbacks[i] = virtio_fs_vq_done; names[i] = fs->vqs[i].name; @@ -1217,7 +1221,7 @@ static int virtio_fs_enqueue_req(struct virtio_fs_vq *fsvq, static void virtio_fs_wake_pending_and_unlock(struct fuse_iqueue *fiq) __releases(fiq->lock) { - unsigned int queue_id = VQ_REQUEST; /* TODO multiqueue */ + unsigned int queue_id; struct virtio_fs *fs; struct fuse_req *req; struct virtio_fs_vq *fsvq; @@ -1231,6 +1235,7 @@ __releases(fiq->lock) spin_unlock(&fiq->lock); fs = fiq->priv; + queue_id = fs->first_reqq_idx; pr_debug("%s: opcode %u unique %#llx nodeid %#llx in.len %u out.len %u\n", __func__, req->in.h.opcode, req->in.h.unique, @@ -1411,6 +1416,7 @@ static int virtio_fs_get_tree(struct fs_context *fsc) struct fuse_mount *fm; unsigned int virtqueue_size; int err = -EIO; + struct virtio_fs_vq *first_req_fsvq; /* This gets a reference on virtio_fs object. This ptr gets installed * in fc->iq->priv. Once fuse_conn is going away, it calls ->put() @@ -1422,7 +1428,8 @@ static int virtio_fs_get_tree(struct fs_context *fsc) return -EINVAL; } - virtqueue_size = virtqueue_get_vring_size(fs->vqs[VQ_REQUEST].vq); + first_req_fsvq = &fs->vqs[fs->first_reqq_idx]; + virtqueue_size = virtqueue_get_vring_size(first_req_fsvq->vq); if (WARN_ON(virtqueue_size <= FUSE_HEADER_OVERHEAD)) goto out_err; -- 2.31.1
next prev parent reply other threads:[~2021-09-30 14:39 UTC|newest] Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-09-30 14:38 [PATCH 0/8] virtiofs: Notification queue and blocking posix locks Vivek Goyal 2021-09-30 14:38 ` [Virtio-fs] " Vivek Goyal 2021-09-30 14:38 ` [PATCH 1/8] virtiofs: Disable interrupt requests properly Vivek Goyal 2021-09-30 14:38 ` [Virtio-fs] " Vivek Goyal 2021-09-30 14:38 ` [PATCH 2/8] virtiofs: Fix a comment about fuse_dev allocation Vivek Goyal 2021-09-30 14:38 ` [Virtio-fs] " Vivek Goyal 2021-09-30 14:38 ` Vivek Goyal [this message] 2021-09-30 14:38 ` [Virtio-fs] [PATCH 3/8] virtiofs: Add an index to keep track of first request queue Vivek Goyal 2021-09-30 14:38 ` [PATCH 4/8] virtiofs: Decouple queue index and queue type Vivek Goyal 2021-09-30 14:38 ` [Virtio-fs] " Vivek Goyal 2021-09-30 14:38 ` [PATCH 5/8] virtiofs: Add a virtqueue for notifications Vivek Goyal 2021-09-30 14:38 ` [Virtio-fs] " Vivek Goyal 2021-10-06 12:46 ` Miklos Szeredi 2021-10-06 12:46 ` [Virtio-fs] " Miklos Szeredi 2021-10-06 12:54 ` Vivek Goyal 2021-10-06 12:54 ` [Virtio-fs] " Vivek Goyal 2021-09-30 14:38 ` [PATCH 6/8] virtiofs: Add a helper to end request and decrement inflight number Vivek Goyal 2021-09-30 14:38 ` [Virtio-fs] " Vivek Goyal 2021-09-30 14:38 ` [PATCH 7/8] virtiofs: Add new notification type FUSE_NOTIFY_LOCK Vivek Goyal 2021-09-30 14:38 ` [Virtio-fs] " Vivek Goyal 2021-10-06 12:55 ` Miklos Szeredi 2021-10-06 12:55 ` [Virtio-fs] " Miklos Szeredi 2021-10-06 15:01 ` Vivek Goyal 2021-10-06 15:01 ` [Virtio-fs] " Vivek Goyal 2021-10-06 13:02 ` Miklos Szeredi 2021-10-06 13:02 ` [Virtio-fs] " Miklos Szeredi 2021-10-06 16:12 ` Vivek Goyal 2021-10-06 16:12 ` [Virtio-fs] " Vivek Goyal 2021-10-07 13:45 ` Miklos Szeredi 2021-10-07 13:45 ` [Virtio-fs] " Miklos Szeredi 2021-10-07 14:21 ` Vivek Goyal 2021-10-07 14:21 ` [Virtio-fs] " Vivek Goyal 2021-10-07 18:11 ` Miklos Szeredi 2021-10-07 18:11 ` [Virtio-fs] " Miklos Szeredi 2021-10-07 18:32 ` Vivek Goyal 2021-10-07 18:32 ` [Virtio-fs] " Vivek Goyal 2021-10-07 18:46 ` Miklos Szeredi 2021-10-07 18:46 ` [Virtio-fs] " Miklos Szeredi 2021-09-30 14:38 ` [PATCH 8/8] virtiofs: Handle reordering of reply and notification event Vivek Goyal 2021-09-30 14:38 ` [Virtio-fs] " Vivek Goyal 2021-09-30 15:43 ` [PATCH 0/8] virtiofs: Notification queue and blocking posix locks Vivek Goyal 2021-09-30 15:43 ` [Virtio-fs] " Vivek Goyal
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=20210930143850.1188628-4-vgoyal@redhat.com \ --to=vgoyal@redhat.com \ --cc=dgilbert@redhat.com \ --cc=iangelak@redhat.com \ --cc=jaggel@bu.edu \ --cc=linux-fsdevel@vger.kernel.org \ --cc=miklos@szeredi.hu \ --cc=stefanha@redhat.com \ --cc=virtio-fs@redhat.com \ /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: linkBe 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.