[Devel] [PATCH VZ10 7/7] Revert "fs/fuse/kio: keep kio requests on revoke list at all times"

Liu Kui kui.liu at virtuozzo.com
Tue Aug 26 13:44:55 MSK 2025


This reverts commit 3cb4c6ac929ed7d73f4e51abe5c520f20efe3aa7.

The fix in above commit is no longer necessary, now that a separate
revocation list has been implemented in:
 - "fs/fuse: revamp fuse_invalidate_files()"

Signed-off-by: Liu Kui <kui.liu at virtuozzo.com>
---
 fs/fuse/kio/pcs/pcs_fuse_kdirect.c | 43 +++++++++---------------------
 1 file changed, 12 insertions(+), 31 deletions(-)

diff --git a/fs/fuse/kio/pcs/pcs_fuse_kdirect.c b/fs/fuse/kio/pcs/pcs_fuse_kdirect.c
index 6225a4ede7e1..16b198d76c16 100644
--- a/fs/fuse/kio/pcs/pcs_fuse_kdirect.c
+++ b/fs/fuse/kio/pcs/pcs_fuse_kdirect.c
@@ -835,19 +835,11 @@ static void wait_shrink(struct pcs_fuse_req *r, struct pcs_dentry_info *di)
 	list_add_tail(&r->exec.ireq.list, &di->size.queue);
 }
 
-static bool kqueue_insert(struct pcs_dentry_info *di, struct fuse_req *req)
+static void kqueue_insert(struct pcs_dentry_info *di, struct fuse_req *req)
 {
 	spin_lock(&di->kq_lock);
 	list_add_tail(&req->list, &di->kq);
 	spin_unlock(&di->kq_lock);
-	return true;
-}
-
-static void kqueue_remove(struct pcs_dentry_info *di, struct fuse_req *req)
-{
-	spin_lock(&di->kq_lock);
-	list_del_init(&req->list);
-	spin_unlock(&di->kq_lock);
 }
 
 static inline int req_wait_grow_queue(struct pcs_fuse_req *r, off_t offset, size_t size)
@@ -855,6 +847,8 @@ static inline int req_wait_grow_queue(struct pcs_fuse_req *r, off_t offset, size
 	struct pcs_dentry_info *di = get_pcs_inode(r->req.args->io_inode);
 	struct fuse_inode *fi = get_fuse_inode(r->req.args->io_inode);
 
+	kqueue_insert(di, &r->req);
+
 	BUG_ON(r->req.in.h.opcode != FUSE_WRITE && r->req.in.h.opcode != FUSE_FALLOCATE);
 	fuse_write_dio_begin(fi);
 
@@ -978,6 +972,8 @@ static int pcs_fuse_prep_rw(struct pcs_fuse_req *r)
 		BUG();
 	}
 
+	kqueue_insert(di, req);
+
 	if (req->in.h.opcode == FUSE_READ || req->in.h.opcode == FUSE_FSYNC ||
 	    req->in.h.opcode == FUSE_FLUSH)
 		fuse_read_dio_begin(fi);
@@ -989,13 +985,14 @@ static int pcs_fuse_prep_rw(struct pcs_fuse_req *r)
 	return ret;
 }
 
-static int pcs_fuse_submit_prepare(struct pcs_fuse_cluster *pfc, struct fuse_req *req)
+static void pcs_fuse_submit(struct pcs_fuse_cluster *pfc, struct fuse_req *req)
 {
 	struct pcs_fuse_req *r = pcs_req_from_fuse(req);
 	struct fuse_args *args = req->args;
 	struct fuse_inode *fi = get_fuse_inode(args->io_inode);
 	struct pcs_dentry_info *di = pcs_inode_from_fuse(fi);
-	int ret = 0;
+	struct pcs_int_request* ireq;
+	int ret;
 
 	BUG_ON(!di);
 	BUG_ON(req->cache != pcs_fuse_req_cachep);
@@ -1003,21 +1000,8 @@ static int pcs_fuse_submit_prepare(struct pcs_fuse_cluster *pfc, struct fuse_req
 	/* Init pcs_fuse_req */
 	memset(&r->exec, 0, sizeof(r->exec));
 	/* Use inline request structure */
-	ireq_init(di, &r->exec.ireq);
-
-	spin_lock(&di->lock);
-	if (!kqueue_insert(di, req))
-		ret = -EIO;
-	spin_unlock(&di->lock);
-	return ret;
-}
-
-static void pcs_fuse_submit(struct pcs_fuse_cluster *pfc, struct fuse_req *req)
-{
-	struct pcs_fuse_req *r = pcs_req_from_fuse(req);
-	struct pcs_int_request *ireq = &r->exec.ireq;
-	struct pcs_dentry_info *di = ireq->dentry;
-	int ret;
+	ireq = &r->exec.ireq;
+	ireq_init(di, ireq);
 
 	switch (req->in.h.opcode) {
 	case FUSE_WRITE:
@@ -1035,7 +1019,7 @@ static void pcs_fuse_submit(struct pcs_fuse_cluster *pfc, struct fuse_req *req)
 		}
 		break;
 	case FUSE_FALLOCATE: {
-		struct fuse_fallocate_in *inarg = (void *)req->args->in_args[0].value;
+		struct fuse_fallocate_in *inarg = (void*) args->in_args[0].value;
 		size_t sz = READ_ONCE(di->fileinfo.attr.size);
 
 		if (pfc->fc->no_fallocate) {
@@ -1071,7 +1055,7 @@ static void pcs_fuse_submit(struct pcs_fuse_cluster *pfc, struct fuse_req *req)
 			 * and as i_size is still not advanced all the following ones are.
 			 */
 			WARN_ON_ONCE(inarg->offset + inarg->length > sz &&
-				     !inode_is_locked(req->args->io_inode));
+				     !inode_is_locked(&fi->inode));
 		}
 
 		ret = pcs_fuse_prep_rw(r);
@@ -1106,7 +1090,6 @@ static void pcs_fuse_submit(struct pcs_fuse_cluster *pfc, struct fuse_req *req)
 error:
 	DTRACE("do fuse_request_end req:%p op:%d err:%d\n", req, req->in.h.opcode, req->out.h.error);
 
-	kqueue_remove(di, req);
 	__fuse_request_end(req, false);
 	return;
 
@@ -1330,8 +1313,6 @@ static void kpcs_req_send(struct fuse_req *req, bool bg)
 		refcount_inc(&req->count);
 	__clear_bit(FR_PENDING, &req->flags);
 
-	pcs_fuse_submit_prepare(pfc, req);
-
 	pcs_fuse_submit(pfc, req);
 	if (!bg)
 		wait_event(req->waitq,
-- 
2.39.5 (Apple Git-154)



More information about the Devel mailing list