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

Commit 7d317f2c authored by NeilBrown's avatar NeilBrown Committed by Linus Torvalds
Browse files

[PATCH] knfsd: Get rid of 'inplace' sunrpc caches



These were an unnecessary wart.  Also only have one 'DefineSimpleCache..'
instead of two.

Signed-off-by: default avatarNeil Brown <neilb@suse.de>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent eab7e2e6
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -250,7 +250,7 @@ static inline void svc_expkey_update(struct svc_expkey *new, struct svc_expkey *
	new->ek_dentry = dget(item->ek_dentry);
	new->ek_dentry = dget(item->ek_dentry);
}
}


static DefineSimpleCacheLookup(svc_expkey,0) /* no inplace updates */
static DefineSimpleCacheLookup(svc_expkey, svc_expkey)


#define	EXPORT_HASHBITS		8
#define	EXPORT_HASHBITS		8
#define	EXPORT_HASHMAX		(1<< EXPORT_HASHBITS)
#define	EXPORT_HASHMAX		(1<< EXPORT_HASHBITS)
@@ -482,7 +482,7 @@ static inline void svc_export_update(struct svc_export *new, struct svc_export *
	new->ex_fsid = item->ex_fsid;
	new->ex_fsid = item->ex_fsid;
}
}


static DefineSimpleCacheLookup(svc_export,1) /* allow inplace updates */
static DefineSimpleCacheLookup(svc_export, svc_export)




struct svc_expkey *
struct svc_expkey *
+2 −8
Original line number Original line Diff line number Diff line
@@ -76,12 +76,6 @@ struct ent {
	char              authname[IDMAP_NAMESZ];
	char              authname[IDMAP_NAMESZ];
};
};


#define DefineSimpleCacheLookupMap(STRUCT, FUNC)			\
        DefineCacheLookup(struct STRUCT, h, FUNC##_lookup,		\
        (struct STRUCT *item, int set), /*no setup */,			\
	& FUNC##_cache, FUNC##_hash(item), FUNC##_match(item, tmp),	\
	STRUCT##_init(new, item), STRUCT##_update(tmp, item), 0)

/* Common entry handling */
/* Common entry handling */


#define ENT_HASHBITS          8
#define ENT_HASHBITS          8
@@ -264,7 +258,7 @@ idtoname_parse(struct cache_detail *cd, char *buf, int buflen)
	return error;
	return error;
}
}


static DefineSimpleCacheLookupMap(ent, idtoname);
static DefineSimpleCacheLookup(ent, idtoname);


/*
/*
 * Name -> ID cache
 * Name -> ID cache
@@ -390,7 +384,7 @@ nametoid_parse(struct cache_detail *cd, char *buf, int buflen)
	return (error);
	return (error);
}
}


static DefineSimpleCacheLookupMap(ent, nametoid);
static DefineSimpleCacheLookup(ent, nametoid);


/*
/*
 * Exported API
 * Exported API
+11 −17
Original line number Original line Diff line number Diff line
@@ -133,14 +133,11 @@ struct cache_deferred_req {
 * If "set" == 0 :
 * If "set" == 0 :
 *    If an entry is found, it is returned
 *    If an entry is found, it is returned
 *    If no entry is found, a new non-VALID entry is created.
 *    If no entry is found, a new non-VALID entry is created.
 * If "set" == 1 and INPLACE == 0 :
 * If "set" == 1 :
 *    If no entry is found a new one is inserted with data from "template"
 *    If no entry is found a new one is inserted with data from "template"
 *    If a non-CACHE_VALID entry is found, it is updated from template using UPDATE
 *    If a non-CACHE_VALID entry is found, it is updated from template using UPDATE
 *    If a CACHE_VALID entry is found, a new entry is swapped in with data
 *    If a CACHE_VALID entry is found, a new entry is swapped in with data
 *       from "template"
 *       from "template"
 * If set == 1, and INPLACE == 1 :
 *    As above, except that if a CACHE_VALID entry is found, we UPDATE in place
 *       instead of swapping in a new entry.
 *
 *
 * If the passed handle has the CACHE_NEGATIVE flag set, then UPDATE is not
 * If the passed handle has the CACHE_NEGATIVE flag set, then UPDATE is not
 * run but insteead CACHE_NEGATIVE is set in any new item.
 * run but insteead CACHE_NEGATIVE is set in any new item.
@@ -159,13 +156,8 @@ struct cache_deferred_req {
 * TEST  tests if "tmp" matches "item"
 * TEST  tests if "tmp" matches "item"
 * INIT copies key information from "item" to "new"
 * INIT copies key information from "item" to "new"
 * UPDATE copies content information from "item" to "tmp"
 * UPDATE copies content information from "item" to "tmp"
 * INPLACE is true if updates can happen inplace rather than allocating a new structure
 *
 * WARNING: any substantial changes to this must be reflected in
 *   net/sunrpc/svcauth.c(auth_domain_lookup)
 *  which is a similar routine that is open-coded.
 */
 */
#define DefineCacheLookup(RTN,MEMBER,FNAME,ARGS,SETUP,DETAIL,HASHFN,TEST,INIT,UPDATE,INPLACE)	\
#define DefineCacheLookup(RTN,MEMBER,FNAME,ARGS,SETUP,DETAIL,HASHFN,TEST,INIT,UPDATE)	\
RTN *FNAME ARGS										\
RTN *FNAME ARGS										\
{											\
{											\
	RTN *tmp, *new=NULL;								\
	RTN *tmp, *new=NULL;								\
@@ -179,13 +171,13 @@ RTN *FNAME ARGS \
		tmp = container_of(*hp, RTN, MEMBER);					\
		tmp = container_of(*hp, RTN, MEMBER);					\
		if (TEST) { /* found a match */						\
		if (TEST) { /* found a match */						\
											\
											\
			if (set && !INPLACE && test_bit(CACHE_VALID, &tmp->MEMBER.flags) && !new) \
			if (set && test_bit(CACHE_VALID, &tmp->MEMBER.flags) && !new)	\
				break;							\
				break;							\
											\
											\
			if (new)							\
			if (new)							\
				{INIT;}							\
				{INIT;}							\
			if (set) {							\
			if (set) {							\
				if (!INPLACE && test_bit(CACHE_VALID, &tmp->MEMBER.flags))\
				if (test_bit(CACHE_VALID, &tmp->MEMBER.flags))\
				{ /* need to swap in new */				\
				{ /* need to swap in new */				\
					RTN *t2;					\
					RTN *t2;					\
											\
											\
@@ -206,7 +198,7 @@ RTN *FNAME ARGS \
			else read_unlock(&(DETAIL)->hash_lock);				\
			else read_unlock(&(DETAIL)->hash_lock);				\
			if (set)							\
			if (set)							\
				cache_fresh(DETAIL, &tmp->MEMBER, item->MEMBER.expiry_time); \
				cache_fresh(DETAIL, &tmp->MEMBER, item->MEMBER.expiry_time); \
			if (set && !INPLACE && new) cache_fresh(DETAIL, &new->MEMBER, 0);	\
			if (set && new) cache_fresh(DETAIL, &new->MEMBER, 0);	\
			if (new) (DETAIL)->cache_put(&new->MEMBER, DETAIL);		\
			if (new) (DETAIL)->cache_put(&new->MEMBER, DETAIL);		\
			return tmp;							\
			return tmp;							\
		}									\
		}									\
@@ -239,10 +231,12 @@ RTN *FNAME ARGS \
	return NULL;									\
	return NULL;									\
}
}


#define DefineSimpleCacheLookup(STRUCT,INPLACE)	\
#define DefineSimpleCacheLookup(STRUCT, FUNC)				\
	DefineCacheLookup(struct STRUCT, h, STRUCT##_lookup, (struct STRUCT *item, int set), /*no setup */,	\
        DefineCacheLookup(struct STRUCT, h, FUNC##_lookup,		\
			  & STRUCT##_cache, STRUCT##_hash(item), STRUCT##_match(item, tmp),\
        (struct STRUCT *item, int set), /*no setup */,			\
			  STRUCT##_init(new, item), STRUCT##_update(tmp, item),INPLACE)
	& FUNC##_cache, FUNC##_hash(item), FUNC##_match(item, tmp),	\
	STRUCT##_init(new, item), STRUCT##_update(tmp, item))



#define cache_for_each(pos, detail, index, member) 						\
#define cache_for_each(pos, detail, index, member) 						\
	for (({read_lock(&(detail)->hash_lock); index = (detail)->hash_size;}) ;		\
	for (({read_lock(&(detail)->hash_lock); index = (detail)->hash_size;}) ;		\
+2 −2
Original line number Original line Diff line number Diff line
@@ -259,7 +259,7 @@ static struct cache_detail rsi_cache = {
	.cache_parse    = rsi_parse,
	.cache_parse    = rsi_parse,
};
};


static DefineSimpleCacheLookup(rsi, 0)
static DefineSimpleCacheLookup(rsi, rsi)


/*
/*
 * The rpcsec_context cache is used to store a context that is
 * The rpcsec_context cache is used to store a context that is
@@ -446,7 +446,7 @@ static struct cache_detail rsc_cache = {
	.cache_parse	= rsc_parse,
	.cache_parse	= rsc_parse,
};
};


static DefineSimpleCacheLookup(rsc, 0);
static DefineSimpleCacheLookup(rsc, rsc);


static struct rsc *
static struct rsc *
gss_svc_searchbyctx(struct xdr_netobj *handle)
gss_svc_searchbyctx(struct xdr_netobj *handle)
+1 −1
Original line number Original line Diff line number Diff line
@@ -258,7 +258,7 @@ struct cache_detail ip_map_cache = {
	.cache_show	= ip_map_show,
	.cache_show	= ip_map_show,
};
};


static DefineSimpleCacheLookup(ip_map, 0)
static DefineSimpleCacheLookup(ip_map, ip_map)




int auth_unix_add_addr(struct in_addr addr, struct auth_domain *dom)
int auth_unix_add_addr(struct in_addr addr, struct auth_domain *dom)