From ef531a6f46992e2c068746cf38ef3f211792716a Mon Sep 17 00:00:00 2001 From: Alessio Balsini Date: Mon, 25 Jan 2021 22:39:04 +0000 Subject: [PATCH] Revert "FROMLIST: fuse: Passthrough initialization and release" This reverts commit 89d67670605c505e46546af2b38922acb4907607. Change-Id: Ib52bde74f238b91abcc6c0281b6ab96f435cce74 Signed-off-by: Alessio Balsini --- fs/fuse/inode.c | 5 --- fs/fuse/passthrough.c | 80 ++----------------------------------------- 2 files changed, 2 insertions(+), 83 deletions(-) diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c index 975d2c60a70d..14d2887193c6 100644 --- a/fs/fuse/inode.c +++ b/fs/fuse/inode.c @@ -1136,11 +1136,6 @@ EXPORT_SYMBOL_GPL(fuse_send_init); static int free_fuse_passthrough(int id, void *p, void *data) { - struct fuse_passthrough *passthrough = (struct fuse_passthrough *)p; - - fuse_passthrough_release(passthrough); - kfree(p); - return 0; } diff --git a/fs/fuse/passthrough.c b/fs/fuse/passthrough.c index a135c955cc33..594060c654f8 100644 --- a/fs/fuse/passthrough.c +++ b/fs/fuse/passthrough.c @@ -3,95 +3,19 @@ #include "fuse_i.h" #include -#include int fuse_passthrough_open(struct fuse_dev *fud, struct fuse_passthrough_out *pto) { - int res; - struct file *passthrough_filp; - struct fuse_conn *fc = fud->fc; - struct fuse_passthrough *passthrough; - - if (!fc->passthrough) - return -EPERM; - - /* This field is reserved for future implementation */ - if (pto->len != 0) - return -EINVAL; - - passthrough_filp = fget(pto->fd); - if (!passthrough_filp) { - pr_err("FUSE: invalid file descriptor for passthrough.\n"); - return -EBADF; - } - - if (!passthrough_filp->f_op->read_iter || - !passthrough_filp->f_op->write_iter) { - pr_err("FUSE: passthrough file misses file operations.\n"); - return -EBADF; - } - - passthrough = kmalloc(sizeof(struct fuse_passthrough), GFP_KERNEL); - if (!passthrough) - return -ENOMEM; - - passthrough->filp = passthrough_filp; - - idr_preload(GFP_KERNEL); - spin_lock(&fc->passthrough_req_lock); - res = idr_alloc(&fc->passthrough_req, passthrough, 1, 0, GFP_ATOMIC); - spin_unlock(&fc->passthrough_req_lock); - idr_preload_end(); - if (res <= 0) { - fuse_passthrough_release(passthrough); - kfree(passthrough); - } - - return res; + return -EINVAL; } int fuse_passthrough_setup(struct fuse_conn *fc, struct fuse_file *ff, struct fuse_open_out *openarg) { - struct inode *passthrough_inode; - struct super_block *passthrough_sb; - struct fuse_passthrough *passthrough; - int passthrough_fh = openarg->passthrough_fh; - - if (!fc->passthrough) - return -EPERM; - - /* Default case, passthrough is not requested */ - if (passthrough_fh <= 0) - return -EINVAL; - - spin_lock(&fc->passthrough_req_lock); - passthrough = idr_remove(&fc->passthrough_req, passthrough_fh); - spin_unlock(&fc->passthrough_req_lock); - - if (!passthrough) - return -EINVAL; - - passthrough_inode = file_inode(passthrough->filp); - passthrough_sb = passthrough_inode->i_sb; - if (passthrough_sb->s_stack_depth >= FILESYSTEM_MAX_STACK_DEPTH) { - pr_err("FUSE: fs stacking depth exceeded for passthrough\n"); - fuse_passthrough_release(passthrough); - kfree(passthrough); - return -EINVAL; - } - - ff->passthrough = *passthrough; - kfree(passthrough); - - return 0; + return -EINVAL; } void fuse_passthrough_release(struct fuse_passthrough *passthrough) { - if (passthrough->filp) { - fput(passthrough->filp); - passthrough->filp = NULL; - } }