[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