]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
SUNRPC: remove groupinfo from struct auth_cred.
authorNeilBrown <neilb@suse.com>
Mon, 3 Dec 2018 00:30:30 +0000 (11:30 +1100)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Wed, 19 Dec 2018 18:52:45 +0000 (13:52 -0500)
We can use cred->groupinfo (from the 'struct cred') instead.

Signed-off-by: NeilBrown <neilb@suse.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
fs/nfs/flexfilelayout/flexfilelayout.c
include/linux/sunrpc/auth.h
net/sunrpc/auth.c
net/sunrpc/auth_generic.c
net/sunrpc/auth_unix.c

index 22e164106333e096d1a0756eb0fd67e3512b12ca..c6e64ce5ca42d7f90e3c0cbf87f127ce802c5a90 100644 (file)
@@ -28,9 +28,6 @@
 #define FF_LAYOUT_POLL_RETRY_MAX     (15*HZ)
 #define FF_LAYOUTRETURN_MAXERR 20
 
-
-static struct group_info       *ff_zero_group;
-
 static void ff_layout_read_record_layoutstats_done(struct rpc_task *task,
                struct nfs_pgio_header *hdr);
 static int ff_layout_mirror_prepare_stats(struct pnfs_layout_hdr *lo,
@@ -414,7 +411,7 @@ ff_layout_alloc_lseg(struct pnfs_layout_hdr *lh,
 
        for (i = 0; i < fls->mirror_array_cnt; i++) {
                struct nfs4_ff_layout_mirror *mirror;
-               struct auth_cred acred = { .group_info = ff_zero_group };
+               struct auth_cred acred = {};
                struct rpc_cred __rcu *cred;
                struct cred *kcred;
                u32 ds_count, fh_count, id;
@@ -2400,11 +2397,6 @@ static int __init nfs4flexfilelayout_init(void)
 {
        printk(KERN_INFO "%s: NFSv4 Flexfile Layout Driver Registering...\n",
               __func__);
-       if (!ff_zero_group) {
-               ff_zero_group = groups_alloc(0);
-               if (!ff_zero_group)
-                       return -ENOMEM;
-       }
        return pnfs_register_layoutdriver(&flexfilelayout_type);
 }
 
@@ -2413,10 +2405,6 @@ static void __exit nfs4flexfilelayout_exit(void)
        printk(KERN_INFO "%s: NFSv4 Flexfile Layout Driver Unregistering...\n",
               __func__);
        pnfs_unregister_layoutdriver(&flexfilelayout_type);
-       if (ff_zero_group) {
-               put_group_info(ff_zero_group);
-               ff_zero_group = NULL;
-       }
 }
 
 MODULE_ALIAS("nfs-layouttype4-4");
index 1f95bd61205340c3cb678557d7283d1f48f95696..30eb9b9b9c8ca856e3611ac0c82cba765c5e4234 100644 (file)
@@ -49,7 +49,6 @@ struct auth_cred {
        const struct cred *cred;
        kuid_t  uid;
        kgid_t  gid;
-       struct group_info *group_info;
        const char *principal;
        unsigned long ac_flags;
        unsigned char machine_cred : 1;
index a7e08e44f92b06825f41d14225d8709f68aefd1d..e1053b96e0e5ed2f5dac2a816179d82dde567f13 100644 (file)
@@ -658,7 +658,6 @@ rpcauth_lookupcred(struct rpc_auth *auth, int flags)
        memset(&acred, 0, sizeof(acred));
        acred.uid = cred->fsuid;
        acred.gid = cred->fsgid;
-       acred.group_info = cred->group_info;
        acred.cred = cred;
        ret = auth->au_ops->lookup_cred(auth, &acred, flags);
        return ret;
index 16a0a4b89bb4c84aa0cd97b26c3bc9de6968426f..a4ae7bd7ca7b3ce91019addb9e3833acc228e218 100644 (file)
@@ -113,11 +113,8 @@ generic_create_cred(struct rpc_auth *auth, struct auth_cred *acred, int flags, g
 
        gcred->acred.uid = acred->uid;
        gcred->acred.gid = acred->gid;
-       gcred->acred.group_info = acred->group_info;
        gcred->acred.cred = gcred->gc_base.cr_cred;
        gcred->acred.ac_flags = 0;
-       if (gcred->acred.group_info != NULL)
-               get_group_info(gcred->acred.group_info);
        gcred->acred.machine_cred = acred->machine_cred;
        gcred->acred.principal = acred->principal;
 
@@ -135,8 +132,6 @@ generic_free_cred(struct rpc_cred *cred)
        struct generic_cred *gcred = container_of(cred, struct generic_cred, gc_base);
 
        dprintk("RPC:       generic_free_cred %p\n", gcred);
-       if (gcred->acred.group_info != NULL)
-               put_group_info(gcred->acred.group_info);
        put_cred(cred->cr_cred);
        kfree(gcred);
 }
@@ -173,6 +168,7 @@ generic_match(struct auth_cred *acred, struct rpc_cred *cred, int flags)
 {
        struct generic_cred *gcred = container_of(cred, struct generic_cred, gc_base);
        int i;
+       struct group_info *a, *g;
 
        if (acred->machine_cred)
                return machine_cred_match(acred, gcred, flags);
@@ -182,16 +178,17 @@ generic_match(struct auth_cred *acred, struct rpc_cred *cred, int flags)
            gcred->acred.machine_cred != 0)
                goto out_nomatch;
 
+       a = acred->cred->group_info;
+       g = gcred->acred.cred->group_info;
        /* Optimisation in the case where pointers are identical... */
-       if (gcred->acred.group_info == acred->group_info)
+       if (a == g)
                goto out_match;
 
        /* Slow path... */
-       if (gcred->acred.group_info->ngroups != acred->group_info->ngroups)
+       if (g->ngroups != a->ngroups)
                goto out_nomatch;
-       for (i = 0; i < gcred->acred.group_info->ngroups; i++) {
-               if (!gid_eq(gcred->acred.group_info->gid[i],
-                               acred->group_info->gid[i]))
+       for (i = 0; i < g->ngroups; i++) {
+               if (!gid_eq(g->gid[i], a->gid[i]))
                        goto out_nomatch;
        }
 out_match:
index 36e01384f082706ea3bbb827b42ea7703ea8c178..0a6397a099d6fc0fd7eb7afe91446d192b5246d2 100644 (file)
@@ -79,14 +79,14 @@ unx_create_cred(struct rpc_auth *auth, struct auth_cred *acred, int flags, gfp_t
        rpcauth_init_cred(&cred->uc_base, acred, auth, &unix_credops);
        cred->uc_base.cr_flags = 1UL << RPCAUTH_CRED_UPTODATE;
 
-       if (acred->group_info != NULL)
-               groups = acred->group_info->ngroups;
+       if (acred->cred && acred->cred->group_info != NULL)
+               groups = acred->cred->group_info->ngroups;
        if (groups > UNX_NGROUPS)
                groups = UNX_NGROUPS;
 
        cred->uc_gid = acred->gid;
        for (i = 0; i < groups; i++)
-               cred->uc_gids[i] = acred->group_info->gid[i];
+               cred->uc_gids[i] = acred->cred->group_info->gid[i];
        if (i < UNX_NGROUPS)
                cred->uc_gids[i] = INVALID_GID;
 
@@ -130,12 +130,12 @@ unx_match(struct auth_cred *acred, struct rpc_cred *rcred, int flags)
        if (!uid_eq(cred->uc_uid, acred->uid) || !gid_eq(cred->uc_gid, acred->gid))
                return 0;
 
-       if (acred->group_info != NULL)
-               groups = acred->group_info->ngroups;
+       if (acred->cred && acred->cred->group_info != NULL)
+               groups = acred->cred->group_info->ngroups;
        if (groups > UNX_NGROUPS)
                groups = UNX_NGROUPS;
        for (i = 0; i < groups ; i++)
-               if (!gid_eq(cred->uc_gids[i], acred->group_info->gid[i]))
+               if (!gid_eq(cred->uc_gids[i], acred->cred->group_info->gid[i]))
                        return 0;
        if (groups < UNX_NGROUPS && gid_valid(cred->uc_gids[groups]))
                return 0;