Merge branch 'for-2.6.37' of git://linux-nfs.org/~bfields/linux
* 'for-2.6.37' of git://linux-nfs.org/~bfields/linux: (99 commits) svcrpc: svc_tcp_sendto XPT_DEAD check is redundant svcrpc: no need for XPT_DEAD check in svc_xprt_enqueue svcrpc: assume svc_delete_xprt() called only once svcrpc: never clear XPT_BUSY on dead xprt nfsd4: fix connection allocation in sequence() nfsd4: only require krb5 principal for NFSv4.0 callbacks nfsd4: move minorversion to client nfsd4: delay session removal till free_client nfsd4: separate callback change and callback probe nfsd4: callback program number is per-session nfsd4: track backchannel connections nfsd4: confirm only on succesful create_session nfsd4: make backchannel sequence number per-session nfsd4: use client pointer to backchannel session nfsd4: move callback setup into session init code nfsd4: don't cache seq_misordered replies SUNRPC: Properly initialize sock_xprt.srcaddr in all cases SUNRPC: Use conventional switch statement when reclassifying sockets sunrpc/xprtrdma: clean up workqueue usage sunrpc: Turn list_for_each-s into the ..._entry-s ... Fix up trivial conflicts (two different deprecation notices added in separate branches) in Documentation/feature-removal-schedule.txt
This commit is contained in:
@@ -122,8 +122,8 @@ extern const struct rpc_authops authnull_ops;
|
||||
int __init rpc_init_authunix(void);
|
||||
int __init rpc_init_generic_auth(void);
|
||||
int __init rpcauth_init_module(void);
|
||||
void __exit rpcauth_remove_module(void);
|
||||
void __exit rpc_destroy_generic_auth(void);
|
||||
void rpcauth_remove_module(void);
|
||||
void rpc_destroy_generic_auth(void);
|
||||
void rpc_destroy_authunix(void);
|
||||
|
||||
struct rpc_cred * rpc_lookup_cred(void);
|
||||
|
||||
@@ -125,12 +125,15 @@ struct cache_detail {
|
||||
*/
|
||||
struct cache_req {
|
||||
struct cache_deferred_req *(*defer)(struct cache_req *req);
|
||||
int thread_wait; /* How long (jiffies) we can block the
|
||||
* current thread to wait for updates.
|
||||
*/
|
||||
};
|
||||
/* this must be embedded in a deferred_request that is being
|
||||
* delayed awaiting cache-fill
|
||||
*/
|
||||
struct cache_deferred_req {
|
||||
struct list_head hash; /* on hash chain */
|
||||
struct hlist_node hash; /* on hash chain */
|
||||
struct list_head recent; /* on fifo */
|
||||
struct cache_head *item; /* cache item we wait on */
|
||||
void *owner; /* we might need to discard all defered requests
|
||||
@@ -194,7 +197,9 @@ extern void cache_purge(struct cache_detail *detail);
|
||||
#define NEVER (0x7FFFFFFF)
|
||||
extern void __init cache_initialize(void);
|
||||
extern int cache_register(struct cache_detail *cd);
|
||||
extern int cache_register_net(struct cache_detail *cd, struct net *net);
|
||||
extern void cache_unregister(struct cache_detail *cd);
|
||||
extern void cache_unregister_net(struct cache_detail *cd, struct net *net);
|
||||
|
||||
extern int sunrpc_cache_register_pipefs(struct dentry *parent, const char *,
|
||||
mode_t, struct cache_detail *);
|
||||
@@ -218,14 +223,42 @@ static inline int get_int(char **bpp, int *anint)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* timestamps kept in the cache are expressed in seconds
|
||||
* since boot. This is the best for measuring differences in
|
||||
* real time.
|
||||
*/
|
||||
static inline time_t seconds_since_boot(void)
|
||||
{
|
||||
struct timespec boot;
|
||||
getboottime(&boot);
|
||||
return get_seconds() - boot.tv_sec;
|
||||
}
|
||||
|
||||
static inline time_t convert_to_wallclock(time_t sinceboot)
|
||||
{
|
||||
struct timespec boot;
|
||||
getboottime(&boot);
|
||||
return boot.tv_sec + sinceboot;
|
||||
}
|
||||
|
||||
static inline time_t get_expiry(char **bpp)
|
||||
{
|
||||
int rv;
|
||||
struct timespec boot;
|
||||
|
||||
if (get_int(bpp, &rv))
|
||||
return 0;
|
||||
if (rv < 0)
|
||||
return 0;
|
||||
return rv;
|
||||
getboottime(&boot);
|
||||
return rv - boot.tv_sec;
|
||||
}
|
||||
|
||||
static inline void sunrpc_invalidate(struct cache_head *h,
|
||||
struct cache_detail *detail)
|
||||
{
|
||||
h->expiry_time = seconds_since_boot() - 1;
|
||||
detail->nextcheck = seconds_since_boot();
|
||||
}
|
||||
#endif /* _LINUX_SUNRPC_CACHE_H_ */
|
||||
|
||||
@@ -102,6 +102,7 @@ struct rpc_procinfo {
|
||||
#ifdef __KERNEL__
|
||||
|
||||
struct rpc_create_args {
|
||||
struct net *net;
|
||||
int protocol;
|
||||
struct sockaddr *address;
|
||||
size_t addrsize;
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
/*
|
||||
* linux/include/linux/sunrpc/gss_spkm3.h
|
||||
*
|
||||
* Copyright (c) 2000 The Regents of the University of Michigan.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Andy Adamson <andros@umich.edu>
|
||||
*/
|
||||
|
||||
#include <linux/sunrpc/auth_gss.h>
|
||||
#include <linux/sunrpc/gss_err.h>
|
||||
#include <linux/sunrpc/gss_asn1.h>
|
||||
|
||||
struct spkm3_ctx {
|
||||
struct xdr_netobj ctx_id; /* per message context id */
|
||||
int endtime; /* endtime of the context */
|
||||
struct xdr_netobj mech_used;
|
||||
unsigned int ret_flags ;
|
||||
struct xdr_netobj conf_alg;
|
||||
struct xdr_netobj derived_conf_key;
|
||||
struct xdr_netobj intg_alg;
|
||||
struct xdr_netobj derived_integ_key;
|
||||
};
|
||||
|
||||
/* OIDs declarations for K-ALG, I-ALG, C-ALG, and OWF-ALG */
|
||||
extern const struct xdr_netobj hmac_md5_oid;
|
||||
extern const struct xdr_netobj cast5_cbc_oid;
|
||||
|
||||
/* SPKM InnerContext Token types */
|
||||
|
||||
#define SPKM_ERROR_TOK 3
|
||||
#define SPKM_MIC_TOK 4
|
||||
#define SPKM_WRAP_TOK 5
|
||||
#define SPKM_DEL_TOK 6
|
||||
|
||||
u32 spkm3_make_token(struct spkm3_ctx *ctx, struct xdr_buf * text, struct xdr_netobj * token, int toktype);
|
||||
|
||||
u32 spkm3_read_token(struct spkm3_ctx *ctx, struct xdr_netobj *read_token, struct xdr_buf *message_buffer, int toktype);
|
||||
|
||||
#define CKSUMTYPE_RSA_MD5 0x0007
|
||||
#define CKSUMTYPE_HMAC_MD5 0x0008
|
||||
|
||||
s32 make_spkm3_checksum(s32 cksumtype, struct xdr_netobj *key, char *header,
|
||||
unsigned int hdrlen, struct xdr_buf *body,
|
||||
unsigned int body_offset, struct xdr_netobj *cksum);
|
||||
void asn1_bitstring_len(struct xdr_netobj *in, int *enclen, int *zerobits);
|
||||
int decode_asn1_bitstring(struct xdr_netobj *out, char *in, int enclen,
|
||||
int explen);
|
||||
void spkm3_mic_header(unsigned char **hdrbuf, unsigned int *hdrlen,
|
||||
unsigned char *ctxhdr, int elen, int zbit);
|
||||
void spkm3_make_mic_token(unsigned char **tokp, int toklen,
|
||||
struct xdr_netobj *mic_hdr,
|
||||
struct xdr_netobj *md5cksum, int md5elen, int md5zbit);
|
||||
u32 spkm3_verify_mic_token(unsigned char **tokp, int *mic_hdrlen,
|
||||
unsigned char **cksum);
|
||||
@@ -38,8 +38,21 @@ struct svc_stat {
|
||||
rpcbadclnt;
|
||||
};
|
||||
|
||||
void rpc_proc_init(void);
|
||||
void rpc_proc_exit(void);
|
||||
struct net;
|
||||
#ifdef CONFIG_PROC_FS
|
||||
int rpc_proc_init(struct net *);
|
||||
void rpc_proc_exit(struct net *);
|
||||
#else
|
||||
static inline int rpc_proc_init(struct net *net)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void rpc_proc_exit(struct net *net)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef MODULE
|
||||
void rpc_modcount(struct inode *, int);
|
||||
#endif
|
||||
@@ -54,9 +67,6 @@ void svc_proc_unregister(const char *);
|
||||
|
||||
void svc_seq_show(struct seq_file *,
|
||||
const struct svc_stat *);
|
||||
|
||||
extern struct proc_dir_entry *proc_net_rpc;
|
||||
|
||||
#else
|
||||
|
||||
static inline struct proc_dir_entry *rpc_proc_register(struct rpc_stat *s) { return NULL; }
|
||||
@@ -69,9 +79,6 @@ static inline void svc_proc_unregister(const char *p) {}
|
||||
|
||||
static inline void svc_seq_show(struct seq_file *seq,
|
||||
const struct svc_stat *st) {}
|
||||
|
||||
#define proc_net_rpc NULL
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* _LINUX_SUNRPC_STATS_H */
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
|
||||
struct svc_xprt_ops {
|
||||
struct svc_xprt *(*xpo_create)(struct svc_serv *,
|
||||
struct net *net,
|
||||
struct sockaddr *, int,
|
||||
int);
|
||||
struct svc_xprt *(*xpo_accept)(struct svc_xprt *);
|
||||
@@ -32,6 +33,16 @@ struct svc_xprt_class {
|
||||
u32 xcl_max_payload;
|
||||
};
|
||||
|
||||
/*
|
||||
* This is embedded in an object that wants a callback before deleting
|
||||
* an xprt; intended for use by NFSv4.1, which needs to know when a
|
||||
* client's tcp connection (and hence possibly a backchannel) goes away.
|
||||
*/
|
||||
struct svc_xpt_user {
|
||||
struct list_head list;
|
||||
void (*callback)(struct svc_xpt_user *);
|
||||
};
|
||||
|
||||
struct svc_xprt {
|
||||
struct svc_xprt_class *xpt_class;
|
||||
struct svc_xprt_ops *xpt_ops;
|
||||
@@ -66,14 +77,31 @@ struct svc_xprt {
|
||||
struct sockaddr_storage xpt_remote; /* remote peer's address */
|
||||
size_t xpt_remotelen; /* length of address */
|
||||
struct rpc_wait_queue xpt_bc_pending; /* backchannel wait queue */
|
||||
struct list_head xpt_users; /* callbacks on free */
|
||||
|
||||
struct net *xpt_net;
|
||||
};
|
||||
|
||||
static inline void register_xpt_user(struct svc_xprt *xpt, struct svc_xpt_user *u)
|
||||
{
|
||||
spin_lock(&xpt->xpt_lock);
|
||||
list_add(&u->list, &xpt->xpt_users);
|
||||
spin_unlock(&xpt->xpt_lock);
|
||||
}
|
||||
|
||||
static inline void unregister_xpt_user(struct svc_xprt *xpt, struct svc_xpt_user *u)
|
||||
{
|
||||
spin_lock(&xpt->xpt_lock);
|
||||
list_del_init(&u->list);
|
||||
spin_unlock(&xpt->xpt_lock);
|
||||
}
|
||||
|
||||
int svc_reg_xprt_class(struct svc_xprt_class *);
|
||||
void svc_unreg_xprt_class(struct svc_xprt_class *);
|
||||
void svc_xprt_init(struct svc_xprt_class *, struct svc_xprt *,
|
||||
struct svc_serv *);
|
||||
int svc_create_xprt(struct svc_serv *, const char *, const int,
|
||||
const unsigned short, int);
|
||||
int svc_create_xprt(struct svc_serv *, const char *, struct net *,
|
||||
const int, const unsigned short, int);
|
||||
void svc_xprt_enqueue(struct svc_xprt *xprt);
|
||||
void svc_xprt_received(struct svc_xprt *);
|
||||
void svc_xprt_put(struct svc_xprt *xprt);
|
||||
|
||||
@@ -108,10 +108,15 @@ struct auth_ops {
|
||||
#define SVC_NEGATIVE 4
|
||||
#define SVC_OK 5
|
||||
#define SVC_DROP 6
|
||||
#define SVC_DENIED 7
|
||||
#define SVC_PENDING 8
|
||||
#define SVC_COMPLETE 9
|
||||
#define SVC_CLOSE 7 /* Like SVC_DROP, but request is definitely
|
||||
* lost so if there is a tcp connection, it
|
||||
* should be closed
|
||||
*/
|
||||
#define SVC_DENIED 8
|
||||
#define SVC_PENDING 9
|
||||
#define SVC_COMPLETE 10
|
||||
|
||||
struct svc_xprt;
|
||||
|
||||
extern int svc_authenticate(struct svc_rqst *rqstp, __be32 *authp);
|
||||
extern int svc_authorise(struct svc_rqst *rqstp);
|
||||
@@ -121,13 +126,13 @@ extern void svc_auth_unregister(rpc_authflavor_t flavor);
|
||||
|
||||
extern struct auth_domain *unix_domain_find(char *name);
|
||||
extern void auth_domain_put(struct auth_domain *item);
|
||||
extern int auth_unix_add_addr(struct in6_addr *addr, struct auth_domain *dom);
|
||||
extern int auth_unix_add_addr(struct net *net, struct in6_addr *addr, struct auth_domain *dom);
|
||||
extern struct auth_domain *auth_domain_lookup(char *name, struct auth_domain *new);
|
||||
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 net *net, struct in6_addr *addr);
|
||||
extern int auth_unix_forget_old(struct auth_domain *dom);
|
||||
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);
|
||||
|
||||
static inline unsigned long hash_str(char *name, int bits)
|
||||
|
||||
@@ -224,6 +224,7 @@ struct rpc_xprt {
|
||||
bklog_u; /* backlog queue utilization */
|
||||
} stat;
|
||||
|
||||
struct net *xprt_net;
|
||||
const char *address_strings[RPC_DISPLAY_MAX];
|
||||
};
|
||||
|
||||
@@ -249,6 +250,7 @@ static inline int bc_prealloc(struct rpc_rqst *req)
|
||||
|
||||
struct xprt_create {
|
||||
int ident; /* XPRT_TRANSPORT identifier */
|
||||
struct net * net;
|
||||
struct sockaddr * srcaddr; /* optional local address */
|
||||
struct sockaddr * dstaddr; /* remote peer address */
|
||||
size_t addrlen;
|
||||
@@ -280,6 +282,8 @@ void xprt_release_xprt_cong(struct rpc_xprt *xprt, struct rpc_task *task);
|
||||
void xprt_release(struct rpc_task *task);
|
||||
struct rpc_xprt * xprt_get(struct rpc_xprt *xprt);
|
||||
void xprt_put(struct rpc_xprt *xprt);
|
||||
struct rpc_xprt * xprt_alloc(struct net *net, int size, int max_req);
|
||||
void xprt_free(struct rpc_xprt *);
|
||||
|
||||
static inline __be32 *xprt_skip_transport_header(struct rpc_xprt *xprt, __be32 *p)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user