mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
sunrpc: Make xprt auth cache release work with the xprt
This is done in order to facilitate getting the ip_map_cache from which to put the ip_map. Signed-off-by: Pavel Emelyanov <xemul@openvz.org> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:
parent
bf18ab32ff
commit
e3bfca01c1
3 changed files with 10 additions and 7 deletions
|
@ -116,6 +116,7 @@ struct auth_ops {
|
||||||
#define SVC_PENDING 9
|
#define SVC_PENDING 9
|
||||||
#define SVC_COMPLETE 10
|
#define SVC_COMPLETE 10
|
||||||
|
|
||||||
|
struct svc_xprt;
|
||||||
|
|
||||||
extern int svc_authenticate(struct svc_rqst *rqstp, __be32 *authp);
|
extern int svc_authenticate(struct svc_rqst *rqstp, __be32 *authp);
|
||||||
extern int svc_authorise(struct svc_rqst *rqstp);
|
extern int svc_authorise(struct svc_rqst *rqstp);
|
||||||
|
@ -131,7 +132,7 @@ extern struct auth_domain *auth_domain_find(char *name);
|
||||||
extern struct auth_domain *auth_unix_lookup(struct in6_addr *addr);
|
extern struct auth_domain *auth_unix_lookup(struct in6_addr *addr);
|
||||||
extern int auth_unix_forget_old(struct auth_domain *dom);
|
extern int auth_unix_forget_old(struct auth_domain *dom);
|
||||||
extern void svcauth_unix_purge(void);
|
extern void svcauth_unix_purge(void);
|
||||||
extern void svcauth_unix_info_release(void *);
|
extern void svcauth_unix_info_release(struct svc_xprt *xpt);
|
||||||
extern int svcauth_unix_set_client(struct svc_rqst *rqstp);
|
extern int svcauth_unix_set_client(struct svc_rqst *rqstp);
|
||||||
|
|
||||||
static inline unsigned long hash_str(char *name, int bits)
|
static inline unsigned long hash_str(char *name, int bits)
|
||||||
|
|
|
@ -128,9 +128,8 @@ static void svc_xprt_free(struct kref *kref)
|
||||||
struct svc_xprt *xprt =
|
struct svc_xprt *xprt =
|
||||||
container_of(kref, struct svc_xprt, xpt_ref);
|
container_of(kref, struct svc_xprt, xpt_ref);
|
||||||
struct module *owner = xprt->xpt_class->xcl_owner;
|
struct module *owner = xprt->xpt_class->xcl_owner;
|
||||||
if (test_bit(XPT_CACHE_AUTH, &xprt->xpt_flags) &&
|
if (test_bit(XPT_CACHE_AUTH, &xprt->xpt_flags))
|
||||||
xprt->xpt_auth_cache != NULL)
|
svcauth_unix_info_release(xprt);
|
||||||
svcauth_unix_info_release(xprt->xpt_auth_cache);
|
|
||||||
xprt->xpt_ops->xpo_free(xprt);
|
xprt->xpt_ops->xpo_free(xprt);
|
||||||
module_put(owner);
|
module_put(owner);
|
||||||
}
|
}
|
||||||
|
|
|
@ -472,10 +472,13 @@ ip_map_cached_put(struct svc_rqst *rqstp, struct ip_map *ipm)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
svcauth_unix_info_release(void *info)
|
svcauth_unix_info_release(struct svc_xprt *xpt)
|
||||||
{
|
{
|
||||||
struct ip_map *ipm = info;
|
struct ip_map *ipm;
|
||||||
cache_put(&ipm->h, &ip_map_cache);
|
|
||||||
|
ipm = xpt->xpt_auth_cache;
|
||||||
|
if (ipm != NULL)
|
||||||
|
cache_put(&ipm->h, &ip_map_cache);
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
|
|
Loading…
Reference in a new issue