Skip to content

Commit

Permalink
fuse: allow skipping control interface and forced unmount
Browse files Browse the repository at this point in the history
virtio-fs does not support aborting requests which are being
processed. That is requests which have been sent to fuse daemon on host.

Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
  • Loading branch information
Vivek Goyal authored and Miklos Szeredi committed Sep 12, 2019
1 parent 783863d commit 15c8e72
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 1 deletion.
8 changes: 8 additions & 0 deletions fs/fuse/fuse_i.h
Original file line number Diff line number Diff line change
Expand Up @@ -468,6 +468,8 @@ struct fuse_fs_context {
bool default_permissions:1;
bool allow_other:1;
bool destroy:1;
bool no_control:1;
bool no_force_umount:1;
unsigned int max_read;
unsigned int blksize;
const char *subtype;
Expand Down Expand Up @@ -696,6 +698,12 @@ struct fuse_conn {
/* Delete dentries that have gone stale */
unsigned int delete_stale:1;

/** Do not create entry in fusectl fs */
unsigned int no_control:1;

/** Do not allow MNT_FORCE umount */
unsigned int no_force_umount:1;

/** The number of requests waiting for completion */
atomic_t num_waiting;

Expand Down
7 changes: 6 additions & 1 deletion fs/fuse/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -364,7 +364,10 @@ void fuse_unlock_inode(struct inode *inode, bool locked)

static void fuse_umount_begin(struct super_block *sb)
{
fuse_abort_conn(get_fuse_conn_super(sb));
struct fuse_conn *fc = get_fuse_conn_super(sb);

if (!fc->no_force_umount)
fuse_abort_conn(fc);
}

static void fuse_send_destroy(struct fuse_conn *fc)
Expand Down Expand Up @@ -1171,6 +1174,8 @@ int fuse_fill_super_common(struct super_block *sb, struct fuse_fs_context *ctx)
fc->group_id = ctx->group_id;
fc->max_read = max_t(unsigned, 4096, ctx->max_read);
fc->destroy = ctx->destroy;
fc->no_control = ctx->no_control;
fc->no_force_umount = ctx->no_force_umount;

err = -ENOMEM;
root = fuse_get_root_inode(sb, ctx->rootmode);
Expand Down

0 comments on commit 15c8e72

Please sign in to comment.