mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	fuse: allow skipping control interface and forced unmount
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>
This commit is contained in:
		
							parent
							
								
									783863d647
								
							
						
					
					
						commit
						15c8e72e88
					
				
					 2 changed files with 14 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -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;
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue