match_strdup() returns NULL when kmalloc failed, so the caller
function f2fs_set_qf_name() should return -ENOMEM in this case;
match_int() returns -ENOMEM, -EINVAL, or -ERANGE on failure,
so the caller function parse_options() should not always return
-EINVAL in this case.

Signed-off-by: Tiezhu Yang <[email protected]>
---
 fs/f2fs/super.c | 60 +++++++++++++++++++++++++++++++++++++++------------------
 1 file changed, 41 insertions(+), 19 deletions(-)

diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
index 53d70b6..bf6505e 100644
--- a/fs/f2fs/super.c
+++ b/fs/f2fs/super.c
@@ -269,7 +269,7 @@ static int f2fs_set_qf_name(struct super_block *sb, int 
qtype,
        if (!qname) {
                f2fs_msg(sb, KERN_ERR,
                        "Not enough memory for storing quotafile name");
-               return -EINVAL;
+               return -ENOMEM;
        }
        if (F2FS_OPTION(sbi).s_qf_names[qtype]) {
                if (strcmp(F2FS_OPTION(sbi).s_qf_names[qtype], qname) == 0)
@@ -366,9 +366,7 @@ static int parse_options(struct super_block *sb, char 
*options)
        int arg = 0;
        kuid_t uid;
        kgid_t gid;
-#ifdef CONFIG_QUOTA
        int ret;
-#endif
 
        if (!options)
                return 0;
@@ -452,8 +450,11 @@ static int parse_options(struct super_block *sb, char 
*options)
                        clear_opt(sbi, INLINE_XATTR);
                        break;
                case Opt_inline_xattr_size:
-                       if (args->from && match_int(args, &arg))
-                               return -EINVAL;
+                       if (args->from) {
+                               ret = match_int(args, &arg);
+                               if (ret)
+                                       return ret;
+                       }
                        set_opt(sbi, INLINE_XATTR_SIZE);
                        F2FS_OPTION(sbi).inline_xattr_size = arg;
                        break;
@@ -491,8 +492,11 @@ static int parse_options(struct super_block *sb, char 
*options)
                        break;
 #endif
                case Opt_active_logs:
-                       if (args->from && match_int(args, &arg))
-                               return -EINVAL;
+                       if (args->from) {
+                               ret = match_int(args, &arg);
+                               if (ret)
+                                       return ret;
+                       }
                        if (arg != 2 && arg != 4 && arg != NR_CURSEG_TYPE)
                                return -EINVAL;
                        F2FS_OPTION(sbi).active_logs = arg;
@@ -534,8 +538,11 @@ static int parse_options(struct super_block *sb, char 
*options)
                        set_opt(sbi, DATA_FLUSH);
                        break;
                case Opt_reserve_root:
-                       if (args->from && match_int(args, &arg))
-                               return -EINVAL;
+                       if (args->from) {
+                               ret = match_int(args, &arg);
+                               if (ret)
+                                       return ret;
+                       }
                        if (test_opt(sbi, RESERVE_ROOT)) {
                                f2fs_msg(sb, KERN_INFO,
                                        "Preserve previous reserve_root=%u",
@@ -546,8 +553,11 @@ static int parse_options(struct super_block *sb, char 
*options)
                        }
                        break;
                case Opt_resuid:
-                       if (args->from && match_int(args, &arg))
-                               return -EINVAL;
+                       if (args->from) {
+                               ret = match_int(args, &arg);
+                               if (ret)
+                                       return ret;
+                       }
                        uid = make_kuid(current_user_ns(), arg);
                        if (!uid_valid(uid)) {
                                f2fs_msg(sb, KERN_ERR,
@@ -557,8 +567,11 @@ static int parse_options(struct super_block *sb, char 
*options)
                        F2FS_OPTION(sbi).s_resuid = uid;
                        break;
                case Opt_resgid:
-                       if (args->from && match_int(args, &arg))
-                               return -EINVAL;
+                       if (args->from) {
+                               ret = match_int(args, &arg);
+                               if (ret)
+                                       return ret;
+                       }
                        gid = make_kgid(current_user_ns(), arg);
                        if (!gid_valid(gid)) {
                                f2fs_msg(sb, KERN_ERR,
@@ -592,8 +605,11 @@ static int parse_options(struct super_block *sb, char 
*options)
                        kfree(name);
                        break;
                case Opt_io_size_bits:
-                       if (args->from && match_int(args, &arg))
-                               return -EINVAL;
+                       if (args->from) {
+                               ret = match_int(args, &arg);
+                               if (ret)
+                                       return ret;
+                       }
                        if (arg > __ilog2_u32(BIO_MAX_PAGES)) {
                                f2fs_msg(sb, KERN_WARNING,
                                        "Not support %d, larger than %d",
@@ -603,8 +619,11 @@ static int parse_options(struct super_block *sb, char 
*options)
                        F2FS_OPTION(sbi).write_io_size_bits = arg;
                        break;
                case Opt_fault_injection:
-                       if (args->from && match_int(args, &arg))
-                               return -EINVAL;
+                       if (args->from) {
+                               ret = match_int(args, &arg);
+                               if (ret)
+                                       return ret;
+                       }
 #ifdef CONFIG_F2FS_FAULT_INJECTION
                        f2fs_build_fault_attr(sbi, arg, F2FS_ALL_FAULT_TYPE);
                        set_opt(sbi, FAULT_INJECTION);
@@ -614,8 +633,11 @@ static int parse_options(struct super_block *sb, char 
*options)
 #endif
                        break;
                case Opt_fault_type:
-                       if (args->from && match_int(args, &arg))
-                               return -EINVAL;
+                       if (args->from) {
+                               ret = match_int(args, &arg);
+                               if (ret)
+                                       return ret;
+                       }
 #ifdef CONFIG_F2FS_FAULT_INJECTION
                        f2fs_build_fault_attr(sbi, 0, arg);
                        set_opt(sbi, FAULT_INJECTION);
-- 
1.8.3.1
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Linux-f2fs-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to