[Devel] [PATCH 1/3] fuse: Fix parse_fuse_opt() return values wrong interpretation

Kirill Tkhai ktkhai at virtuozzo.com
Tue Oct 30 11:55:20 MSK 2018


This function returns not 0 in case of success, and 0 in case
of failure. So, error values like -EPERM are interpreted as
success, which is wrong. Fix that.
Note, that fuse has generic EINVAL return value for all types
of unacceptable parameters.

Signed-off-by: Kirill Tkhai <ktkhai at virtuozzo.com>
---
 fs/fuse/inode.c |    8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c
index ca9a146d39fa..0695b79c4c50 100644
--- a/fs/fuse/inode.c
+++ b/fs/fuse/inode.c
@@ -688,19 +688,19 @@ static int parse_fuse_opt(char *opt, struct fuse_mount_data *d, int is_bdev)
 
 		case OPT_WBCACHE:
 			if (!ve_is_super(get_exec_env()) && !fuse_ve_odirect)
-				return -EPERM;
+				return 0;
 			d->writeback_cache = 1;
 			break;
 
 		case OPT_ODIRECT:
 			if (!ve_is_super(get_exec_env()) && !fuse_ve_odirect)
-				return -EPERM;
+				return 0;
 			d->flags |= FUSE_ODIRECT;
 			break;
 
 		case OPT_UMOUNT_WAIT:
 			if (!ve_is_super(get_exec_env()) && !fuse_ve_odirect)
-				return -EPERM;
+				return 0;
 			d->flags |= FUSE_UMOUNT_WAIT;
 			break;
 
@@ -711,7 +711,7 @@ static int parse_fuse_opt(char *opt, struct fuse_mount_data *d, int is_bdev)
 			char *name;
 			name = match_strdup(&args[0]);
 			if (!name)
-				return 1;
+				return 0;
 
 			strncpy(d->kio_name, name, FUSE_KIO_NAME);
 			d->flags |= FUSE_KDIRECT_IO;



More information about the Devel mailing list