]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
autofs: simplify parse_options() function call
authorIan Kent <raven@themaw.net>
Thu, 3 Jan 2019 23:27:36 +0000 (15:27 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 4 Jan 2019 21:13:46 +0000 (13:13 -0800)
The parse_options() function uses a long list of parameters, most of
which are present in the super block info structure already.

The mount parameters set in parse_options() options don't require
cleanup so using the super block info struct directly is simpler.

Link: http://lkml.kernel.org/r/154296972423.9889.9368859245676473329.stgit@pluto-themaw-net
Signed-off-by: Ian Kent <raven@themaw.net>
Cc: Al Viro <viro@ZenIV.linux.org.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/autofs/inode.c

index 846c052569dd4913e1aea268ad88a0521251002e..bd49b16f43fdd999caecbbc2757c7371207e40aa 100644 (file)
@@ -124,21 +124,24 @@ static const match_table_t tokens = {
        {Opt_err, NULL}
 };
 
-static int parse_options(char *options, int *pipefd, kuid_t *uid, kgid_t *gid,
-                        int *pgrp, bool *pgrp_set, unsigned int *type,
-                        int *minproto, int *maxproto)
+static int parse_options(char *options,
+                        struct inode *root, int *pgrp, bool *pgrp_set,
+                        struct autofs_sb_info *sbi)
 {
        char *p;
        substring_t args[MAX_OPT_ARGS];
        int option;
+       int pipefd = -1;
+       kuid_t uid;
+       kgid_t gid;
 
-       *uid = current_uid();
-       *gid = current_gid();
+       root->i_uid = current_uid();
+       root->i_gid = current_gid();
 
-       *minproto = AUTOFS_MIN_PROTO_VERSION;
-       *maxproto = AUTOFS_MAX_PROTO_VERSION;
+       sbi->min_proto = AUTOFS_MIN_PROTO_VERSION;
+       sbi->max_proto = AUTOFS_MAX_PROTO_VERSION;
 
-       *pipefd = -1;
+       sbi->pipefd = -1;
 
        if (!options)
                return 1;
@@ -152,22 +155,25 @@ static int parse_options(char *options, int *pipefd, kuid_t *uid, kgid_t *gid,
                token = match_token(p, tokens, args);
                switch (token) {
                case Opt_fd:
-                       if (match_int(args, pipefd))
+                       if (match_int(args, &pipefd))
                                return 1;
+                       sbi->pipefd = pipefd;
                        break;
                case Opt_uid:
                        if (match_int(args, &option))
                                return 1;
-                       *uid = make_kuid(current_user_ns(), option);
-                       if (!uid_valid(*uid))
+                       uid = make_kuid(current_user_ns(), option);
+                       if (!uid_valid(uid))
                                return 1;
+                       root->i_uid = uid;
                        break;
                case Opt_gid:
                        if (match_int(args, &option))
                                return 1;
-                       *gid = make_kgid(current_user_ns(), option);
-                       if (!gid_valid(*gid))
+                       gid = make_kgid(current_user_ns(), option);
+                       if (!gid_valid(gid))
                                return 1;
+                       root->i_gid = gid;
                        break;
                case Opt_pgrp:
                        if (match_int(args, &option))
@@ -178,27 +184,27 @@ static int parse_options(char *options, int *pipefd, kuid_t *uid, kgid_t *gid,
                case Opt_minproto:
                        if (match_int(args, &option))
                                return 1;
-                       *minproto = option;
+                       sbi->min_proto = option;
                        break;
                case Opt_maxproto:
                        if (match_int(args, &option))
                                return 1;
-                       *maxproto = option;
+                       sbi->max_proto = option;
                        break;
                case Opt_indirect:
-                       set_autofs_type_indirect(type);
+                       set_autofs_type_indirect(&sbi->type);
                        break;
                case Opt_direct:
-                       set_autofs_type_direct(type);
+                       set_autofs_type_direct(&sbi->type);
                        break;
                case Opt_offset:
-                       set_autofs_type_offset(type);
+                       set_autofs_type_offset(&sbi->type);
                        break;
                default:
                        return 1;
                }
        }
-       return (*pipefd < 0);
+       return (sbi->pipefd < 0);
 }
 
 int autofs_fill_super(struct super_block *s, void *data, int silent)
@@ -206,7 +212,6 @@ int autofs_fill_super(struct super_block *s, void *data, int silent)
        struct inode *root_inode;
        struct dentry *root;
        struct file *pipe;
-       int pipefd;
        struct autofs_sb_info *sbi;
        struct autofs_info *ino;
        int pgrp = 0;
@@ -262,9 +267,7 @@ int autofs_fill_super(struct super_block *s, void *data, int silent)
        root->d_fsdata = ino;
 
        /* Can this call block? */
-       if (parse_options(data, &pipefd, &root_inode->i_uid, &root_inode->i_gid,
-                         &pgrp, &pgrp_set, &sbi->type, &sbi->min_proto,
-                         &sbi->max_proto)) {
+       if (parse_options(data, root_inode, &pgrp, &pgrp_set, sbi)) {
                pr_err("called with bogus options\n");
                goto fail_dput;
        }
@@ -303,8 +306,9 @@ int autofs_fill_super(struct super_block *s, void *data, int silent)
        root_inode->i_fop = &autofs_root_operations;
        root_inode->i_op = &autofs_dir_inode_operations;
 
-       pr_debug("pipe fd = %d, pgrp = %u\n", pipefd, pid_nr(sbi->oz_pgrp));
-       pipe = fget(pipefd);
+       pr_debug("pipe fd = %d, pgrp = %u\n",
+                sbi->pipefd, pid_nr(sbi->oz_pgrp));
+       pipe = fget(sbi->pipefd);
 
        if (!pipe) {
                pr_err("could not open pipe file descriptor\n");
@@ -314,7 +318,6 @@ int autofs_fill_super(struct super_block *s, void *data, int silent)
        if (ret < 0)
                goto fail_fput;
        sbi->pipe = pipe;
-       sbi->pipefd = pipefd;
        sbi->catatonic = 0;
 
        /*