Skip to content

Commit

Permalink
[PATCH] knfsd: Get rid of 'inplace' sunrpc caches
Browse files Browse the repository at this point in the history
These were an unnecessary wart.  Also only have one 'DefineSimpleCache..'
instead of two.

Signed-off-by: Neil Brown <neilb@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
NeilBrown authored and Linus Torvalds committed Mar 27, 2006
1 parent eab7e2e commit 7d317f2
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 30 deletions.
4 changes: 2 additions & 2 deletions fs/nfsd/export.c
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ static inline void svc_expkey_update(struct svc_expkey *new, struct svc_expkey *
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_HASHMAX (1<< EXPORT_HASHBITS)
Expand Down Expand Up @@ -482,7 +482,7 @@ static inline void svc_export_update(struct svc_export *new, struct svc_export *
new->ex_fsid = item->ex_fsid;
}

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


struct svc_expkey *
Expand Down
10 changes: 2 additions & 8 deletions fs/nfsd/nfs4idmap.c
Original file line number Diff line number Diff line change
Expand Up @@ -76,12 +76,6 @@ struct ent {
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 */

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

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

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

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

/*
* Exported API
Expand Down
28 changes: 11 additions & 17 deletions include/linux/sunrpc/cache.h
Original file line number Diff line number Diff line change
Expand Up @@ -133,14 +133,11 @@ struct cache_deferred_req {
* If "set" == 0 :
* If an entry is found, it is returned
* 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 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
* 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
* run but insteead CACHE_NEGATIVE is set in any new item.
Expand All @@ -159,13 +156,8 @@ struct cache_deferred_req {
* TEST tests if "tmp" matches "item"
* INIT copies key information from "item" to "new"
* 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 *tmp, *new=NULL; \
Expand All @@ -179,13 +171,13 @@ RTN *FNAME ARGS \
tmp = container_of(*hp, RTN, MEMBER); \
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; \
\
if (new) \
{INIT;} \
if (set) { \
if (!INPLACE && test_bit(CACHE_VALID, &tmp->MEMBER.flags))\
if (test_bit(CACHE_VALID, &tmp->MEMBER.flags))\
{ /* need to swap in new */ \
RTN *t2; \
\
Expand All @@ -206,7 +198,7 @@ RTN *FNAME ARGS \
else read_unlock(&(DETAIL)->hash_lock); \
if (set) \
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); \
return tmp; \
} \
Expand Down Expand Up @@ -239,10 +231,12 @@ RTN *FNAME ARGS \
return NULL; \
}

#define DefineSimpleCacheLookup(STRUCT,INPLACE) \
DefineCacheLookup(struct STRUCT, h, STRUCT##_lookup, (struct STRUCT *item, int set), /*no setup */, \
& STRUCT##_cache, STRUCT##_hash(item), STRUCT##_match(item, tmp),\
STRUCT##_init(new, item), STRUCT##_update(tmp, item),INPLACE)
#define DefineSimpleCacheLookup(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))


#define cache_for_each(pos, detail, index, member) \
for (({read_lock(&(detail)->hash_lock); index = (detail)->hash_size;}) ; \
Expand Down
4 changes: 2 additions & 2 deletions net/sunrpc/auth_gss/svcauth_gss.c
Original file line number Diff line number Diff line change
Expand Up @@ -259,7 +259,7 @@ static struct cache_detail rsi_cache = {
.cache_parse = rsi_parse,
};

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

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

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

static struct rsc *
gss_svc_searchbyctx(struct xdr_netobj *handle)
Expand Down
2 changes: 1 addition & 1 deletion net/sunrpc/svcauth_unix.c
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,7 @@ struct cache_detail ip_map_cache = {
.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)
Expand Down

0 comments on commit 7d317f2

Please sign in to comment.