[Devel] [PATCH RHEL7 COMMIT] fuse kio: Revert "fuse: Move FUSE_DESTROY request handling in conn_abort"
Konstantin Khorenko
khorenko at virtuozzo.com
Mon Jun 18 13:02:44 MSK 2018
The commit is pushed to "branch-rh7-3.10.0-693.21.1.vz7.50.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git
after rh7-3.10.0-693.21.1.vz7.50.11
------>
commit f6f8d2fcef6060841bf0b7e36e0dd93e1794662c
Author: Kirill Tkhai <ktkhai at virtuozzo.com>
Date: Mon Jun 18 13:02:44 2018 +0300
fuse kio: Revert "fuse: Move FUSE_DESTROY request handling in conn_abort"
This reverts commit 58d18acf7cd024dbb5fe8c11c2829c10521b387f.
fuse_conn_abort() is also called from fuse_umount_begin(),
so we can't destroy kio connection from conn_abort().
https://pmc.acronis.com/browse/VSTOR-11187
Signed-off-by: Kirill Tkhai <ktkhai at virtuozzo.com>
---
fs/fuse/dev.c | 5 ++---
fs/fuse/kio/pcs/pcs_fuse_kdirect.c | 17 ++++++++++++-----
2 files changed, 14 insertions(+), 8 deletions(-)
diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c
index 96d6db217570..a958783ee113 100644
--- a/fs/fuse/dev.c
+++ b/fs/fuse/dev.c
@@ -2210,6 +2210,8 @@ void fuse_abort_conn(struct fuse_conn *fc)
list_splice_init(&fpq->processing, &to_end2);
spin_unlock(&fpq->lock);
}
+ if (fc->kio.op)
+ fc->kio.op->conn_abort(fc);
fc->max_background = UINT_MAX;
for_each_online_cpu(cpu)
@@ -2231,9 +2233,6 @@ void fuse_abort_conn(struct fuse_conn *fc)
request_end(fc, req);
}
end_requests(fc, &to_end2);
-
- if (fc->kio.op)
- fc->kio.op->conn_abort(fc);
} else {
spin_unlock(&fc->lock);
}
diff --git a/fs/fuse/kio/pcs/pcs_fuse_kdirect.c b/fs/fuse/kio/pcs/pcs_fuse_kdirect.c
index 797f07be7a82..af82b043f786 100644
--- a/fs/fuse/kio/pcs/pcs_fuse_kdirect.c
+++ b/fs/fuse/kio/pcs/pcs_fuse_kdirect.c
@@ -148,11 +148,9 @@ void kpcs_conn_abort(struct fuse_conn *fc)
if (!fc->kio.ctx)
return;
- /* TODO: This is just a crunch, Conn cleanup requires sane locking */
- kpcs_conn_fini(fc);
- spin_lock(&fc->lock);
- fc->kio.ctx = NULL;
- spin_unlock(&fc->lock);
+ //pcs_cluster_fini((struct pcs_fuse_cluster *) fc->kio.ctx);
+ printk("%s TODO: implement this method\n", __FUNCTION__);
+
}
static int kpcs_probe(struct fuse_conn *fc, char *name)
@@ -1004,6 +1002,15 @@ static int kpcs_req_send(struct fuse_conn* fc, struct fuse_req *req, bool bg, bo
TRACE(" Enter req:%p op:%d end:%p bg:%d lk:%d\n", req, req->in.h.opcode, req->end, bg, lk);
+ /* TODO: This is just a crunch, Conn cleanup requires sane locking */
+ if (req->in.h.opcode == FUSE_DESTROY) {
+ kpcs_conn_fini(fc);
+ spin_lock(&fc->lock);
+ fc->kio.ctx = NULL;
+ spin_unlock(&fc->lock);
+ return 1;
+ }
+
if (!fi || !fi->private)
return 1;
More information about the Devel
mailing list