Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fc0664fd authored by NeilBrown's avatar NeilBrown Committed by Anna Schumaker
Browse files

SUNRPC: remove groupinfo from struct auth_cred.



We can use cred->groupinfo (from the 'struct cred') instead.

Signed-off-by: default avatarNeilBrown <neilb@suse.com>
Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
parent 97f68c6b
Loading
Loading
Loading
Loading
+1 −13
Original line number Diff line number Diff line
@@ -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");
+0 −1
Original line number Diff line number Diff line
@@ -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;
+0 −1
Original line number Diff line number Diff line
@@ -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;
+7 −10
Original line number Diff line number Diff line
@@ -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:
+6 −6
Original line number Diff line number Diff line
@@ -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;