Commit 7dbe6442 authored by Li RongQing's avatar Li RongQing Committed by Miklos Szeredi
Browse files

virtio_fs: fix the hash table using in virtio_fs_enqueue_req()



The original commit be2ff42c ("fuse: Use hash table to link
processing request") converted fuse_pqueue->processing to a hash table,
but virtio_fs_enqueue_req() was not updated to use it correctly.
So use fuse_pqueue->processing as a hash table, this make the code
more coherent

Co-developed-by: default avatarFushuai Wang <wangfushuai@baidu.com>
Signed-off-by: default avatarFushuai Wang <wangfushuai@baidu.com>
Signed-off-by: default avatarLi RongQing <lirongqing@baidu.com>
Reviewed-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: default avatarMiklos Szeredi <mszeredi@redhat.com>
parent 2841808f
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -323,6 +323,7 @@ unsigned int fuse_req_hash(u64 unique)
{
	return hash_long(unique & ~FUSE_INT_REQ_BIT, FUSE_PQ_HASH_BITS);
}
EXPORT_SYMBOL_GPL(fuse_req_hash);

/*
 * A new request is available, wake fiq->waitq
+4 −2
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
#include <linux/cleanup.h>
#include <linux/uio.h>
#include "fuse_i.h"
#include "fuse_dev_i.h"

/* Used to help calculate the FUSE connection's max_pages limit for a request's
 * size. Parts of the struct fuse_req are sliced into scattergather lists in
@@ -1381,7 +1382,7 @@ static int virtio_fs_enqueue_req(struct virtio_fs_vq *fsvq,
	unsigned int out_sgs = 0;
	unsigned int in_sgs = 0;
	unsigned int total_sgs;
	unsigned int i;
	unsigned int i, hash;
	int ret;
	bool notify;
	struct fuse_pqueue *fpq;
@@ -1441,8 +1442,9 @@ static int virtio_fs_enqueue_req(struct virtio_fs_vq *fsvq,

	/* Request successfully sent. */
	fpq = &fsvq->fud->pq;
	hash = fuse_req_hash(req->in.h.unique);
	spin_lock(&fpq->lock);
	list_add_tail(&req->list, fpq->processing);
	list_add_tail(&req->list, &fpq->processing[hash]);
	spin_unlock(&fpq->lock);
	set_bit(FR_SENT, &req->flags);
	/* matches barrier in request_wait_answer() */