Merge branch 'devel'
This commit is contained in:
@@ -91,6 +91,7 @@ struct nlm_wait;
|
||||
*/
|
||||
#define NLMCLNT_OHSIZE ((__NEW_UTS_LEN) + 10u)
|
||||
struct nlm_rqst {
|
||||
atomic_t a_count;
|
||||
unsigned int a_flags; /* initial RPC task flags */
|
||||
struct nlm_host * a_host; /* host handle */
|
||||
struct nlm_args a_args; /* arguments */
|
||||
@@ -173,8 +174,10 @@ void nlmclnt_next_cookie(struct nlm_cookie *);
|
||||
/*
|
||||
* Host cache
|
||||
*/
|
||||
struct nlm_host *nlmclnt_lookup_host(const struct sockaddr_in *, int, int,
|
||||
const char *, unsigned int);
|
||||
struct nlm_host *nlmclnt_lookup_host(const struct sockaddr_in *sin,
|
||||
int proto, u32 version,
|
||||
const char *hostname,
|
||||
unsigned int hostname_len);
|
||||
struct nlm_host *nlmsvc_lookup_host(struct svc_rqst *, const char *,
|
||||
unsigned int);
|
||||
struct rpc_clnt * nlm_bind_host(struct nlm_host *);
|
||||
@@ -217,8 +220,7 @@ void nlmsvc_mark_resources(void);
|
||||
void nlmsvc_free_host_resources(struct nlm_host *);
|
||||
void nlmsvc_invalidate_all(void);
|
||||
|
||||
static __inline__ struct inode *
|
||||
nlmsvc_file_inode(struct nlm_file *file)
|
||||
static inline struct inode *nlmsvc_file_inode(struct nlm_file *file)
|
||||
{
|
||||
return file->f_file->f_path.dentry->d_inode;
|
||||
}
|
||||
@@ -226,8 +228,8 @@ nlmsvc_file_inode(struct nlm_file *file)
|
||||
/*
|
||||
* Compare two host addresses (needs modifying for ipv6)
|
||||
*/
|
||||
static __inline__ int
|
||||
nlm_cmp_addr(const struct sockaddr_in *sin1, const struct sockaddr_in *sin2)
|
||||
static inline int nlm_cmp_addr(const struct sockaddr_in *sin1,
|
||||
const struct sockaddr_in *sin2)
|
||||
{
|
||||
return sin1->sin_addr.s_addr == sin2->sin_addr.s_addr;
|
||||
}
|
||||
@@ -236,8 +238,8 @@ nlm_cmp_addr(const struct sockaddr_in *sin1, const struct sockaddr_in *sin2)
|
||||
* Compare two NLM locks.
|
||||
* When the second lock is of type F_UNLCK, this acts like a wildcard.
|
||||
*/
|
||||
static __inline__ int
|
||||
nlm_compare_locks(const struct file_lock *fl1, const struct file_lock *fl2)
|
||||
static inline int nlm_compare_locks(const struct file_lock *fl1,
|
||||
const struct file_lock *fl2)
|
||||
{
|
||||
return fl1->fl_pid == fl2->fl_pid
|
||||
&& fl1->fl_owner == fl2->fl_owner
|
||||
|
@@ -19,6 +19,7 @@
|
||||
#define SM_NOTIFY 6
|
||||
|
||||
#define SM_MAXSTRLEN 1024
|
||||
#define SM_PRIV_SIZE 16
|
||||
|
||||
/*
|
||||
* Arguments for all calls to statd
|
||||
|
@@ -430,7 +430,6 @@ extern void nfs_unregister_sysctl(void);
|
||||
/*
|
||||
* linux/fs/nfs/namespace.c
|
||||
*/
|
||||
extern struct list_head nfs_automount_list;
|
||||
extern const struct inode_operations nfs_mountpoint_inode_operations;
|
||||
extern const struct inode_operations nfs_referral_inode_operations;
|
||||
extern int nfs_mountpoint_expiry_timeout;
|
||||
@@ -466,9 +465,9 @@ extern int nfs_wb_page(struct inode *inode, struct page* page);
|
||||
extern int nfs_wb_page_cancel(struct inode *inode, struct page* page);
|
||||
#if defined(CONFIG_NFS_V3) || defined(CONFIG_NFS_V4)
|
||||
extern int nfs_commit_inode(struct inode *, int);
|
||||
extern struct nfs_write_data *nfs_commit_alloc(void);
|
||||
extern struct nfs_write_data *nfs_commitdata_alloc(void);
|
||||
extern void nfs_commit_free(struct nfs_write_data *wdata);
|
||||
extern void nfs_commit_release(void *wdata);
|
||||
extern void nfs_commitdata_release(void *wdata);
|
||||
#else
|
||||
static inline int
|
||||
nfs_commit_inode(struct inode *inode, int how)
|
||||
|
@@ -32,6 +32,8 @@ struct nfs_client {
|
||||
const struct nfs_rpc_ops *rpc_ops; /* NFS protocol vector */
|
||||
int cl_proto; /* Network transport protocol */
|
||||
|
||||
struct rpc_cred *cl_machine_cred;
|
||||
|
||||
#ifdef CONFIG_NFS_V4
|
||||
u64 cl_clientid; /* constant */
|
||||
nfs4_verifier cl_confirm;
|
||||
@@ -93,6 +95,7 @@ struct nfs_server {
|
||||
unsigned int wpages; /* write size (in pages) */
|
||||
unsigned int wtmult; /* server disk block size */
|
||||
unsigned int dtsize; /* readdir size */
|
||||
unsigned short port; /* "port=" setting */
|
||||
unsigned int bsize; /* server block size */
|
||||
unsigned int acregmin; /* attr cache timeouts */
|
||||
unsigned int acregmax;
|
||||
@@ -117,6 +120,13 @@ struct nfs_server {
|
||||
|
||||
atomic_t active; /* Keep trace of any activity to this server */
|
||||
wait_queue_head_t active_wq; /* Wait for any activity to stop */
|
||||
|
||||
/* mountd-related mount options */
|
||||
struct sockaddr_storage mountd_address;
|
||||
size_t mountd_addrlen;
|
||||
u32 mountd_version;
|
||||
unsigned short mountd_port;
|
||||
unsigned short mountd_protocol;
|
||||
};
|
||||
|
||||
/* Server capabilities */
|
||||
|
@@ -140,6 +140,7 @@ struct nfs_openres {
|
||||
__u32 rflags;
|
||||
struct nfs_fattr * f_attr;
|
||||
struct nfs_fattr * dir_attr;
|
||||
struct nfs_seqid * seqid;
|
||||
const struct nfs_server *server;
|
||||
int delegation_type;
|
||||
nfs4_stateid delegation;
|
||||
@@ -159,6 +160,7 @@ struct nfs_open_confirmargs {
|
||||
|
||||
struct nfs_open_confirmres {
|
||||
nfs4_stateid stateid;
|
||||
struct nfs_seqid * seqid;
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -175,6 +177,7 @@ struct nfs_closeargs {
|
||||
struct nfs_closeres {
|
||||
nfs4_stateid stateid;
|
||||
struct nfs_fattr * fattr;
|
||||
struct nfs_seqid * seqid;
|
||||
const struct nfs_server *server;
|
||||
};
|
||||
/*
|
||||
@@ -199,7 +202,9 @@ struct nfs_lock_args {
|
||||
};
|
||||
|
||||
struct nfs_lock_res {
|
||||
nfs4_stateid stateid;
|
||||
nfs4_stateid stateid;
|
||||
struct nfs_seqid * lock_seqid;
|
||||
struct nfs_seqid * open_seqid;
|
||||
};
|
||||
|
||||
struct nfs_locku_args {
|
||||
@@ -210,7 +215,8 @@ struct nfs_locku_args {
|
||||
};
|
||||
|
||||
struct nfs_locku_res {
|
||||
nfs4_stateid stateid;
|
||||
nfs4_stateid stateid;
|
||||
struct nfs_seqid * seqid;
|
||||
};
|
||||
|
||||
struct nfs_lockt_args {
|
||||
|
@@ -26,6 +26,7 @@ struct auth_cred {
|
||||
uid_t uid;
|
||||
gid_t gid;
|
||||
struct group_info *group_info;
|
||||
unsigned char machine_cred : 1;
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -59,8 +60,8 @@ struct rpc_cred {
|
||||
/*
|
||||
* Client authentication handle
|
||||
*/
|
||||
#define RPC_CREDCACHE_NR 8
|
||||
#define RPC_CREDCACHE_MASK (RPC_CREDCACHE_NR - 1)
|
||||
#define RPC_CREDCACHE_HASHBITS 4
|
||||
#define RPC_CREDCACHE_NR (1 << RPC_CREDCACHE_HASHBITS)
|
||||
struct rpc_cred_cache {
|
||||
struct hlist_head hashtable[RPC_CREDCACHE_NR];
|
||||
spinlock_t lock;
|
||||
@@ -89,7 +90,6 @@ struct rpc_auth {
|
||||
|
||||
/* Flags for rpcauth_lookupcred() */
|
||||
#define RPCAUTH_LOOKUP_NEW 0x01 /* Accept an uninitialised cred */
|
||||
#define RPCAUTH_LOOKUP_ROOTCREDS 0x02 /* This really ought to go! */
|
||||
|
||||
/*
|
||||
* Client authentication ops
|
||||
@@ -97,9 +97,7 @@ struct rpc_auth {
|
||||
struct rpc_authops {
|
||||
struct module *owner;
|
||||
rpc_authflavor_t au_flavor; /* flavor (RPC_AUTH_*) */
|
||||
#ifdef RPC_DEBUG
|
||||
char * au_name;
|
||||
#endif
|
||||
struct rpc_auth * (*create)(struct rpc_clnt *, rpc_authflavor_t);
|
||||
void (*destroy)(struct rpc_auth *);
|
||||
|
||||
@@ -113,6 +111,7 @@ struct rpc_credops {
|
||||
void (*crdestroy)(struct rpc_cred *);
|
||||
|
||||
int (*crmatch)(struct auth_cred *, struct rpc_cred *, int);
|
||||
void (*crbind)(struct rpc_task *, struct rpc_cred *);
|
||||
__be32 * (*crmarshal)(struct rpc_task *, __be32 *);
|
||||
int (*crrefresh)(struct rpc_task *);
|
||||
__be32 * (*crvalidate)(struct rpc_task *, __be32 *);
|
||||
@@ -126,9 +125,13 @@ extern const struct rpc_authops authunix_ops;
|
||||
extern const struct rpc_authops authnull_ops;
|
||||
|
||||
void __init rpc_init_authunix(void);
|
||||
void __init rpc_init_generic_auth(void);
|
||||
void __init rpcauth_init_module(void);
|
||||
void __exit rpcauth_remove_module(void);
|
||||
void __exit rpc_destroy_generic_auth(void);
|
||||
|
||||
struct rpc_cred * rpc_lookup_cred(void);
|
||||
struct rpc_cred * rpc_lookup_machine_cred(void);
|
||||
int rpcauth_register(const struct rpc_authops *);
|
||||
int rpcauth_unregister(const struct rpc_authops *);
|
||||
struct rpc_auth * rpcauth_create(rpc_authflavor_t, struct rpc_clnt *);
|
||||
@@ -136,8 +139,8 @@ void rpcauth_release(struct rpc_auth *);
|
||||
struct rpc_cred * rpcauth_lookup_credcache(struct rpc_auth *, struct auth_cred *, int);
|
||||
void rpcauth_init_cred(struct rpc_cred *, const struct auth_cred *, struct rpc_auth *, const struct rpc_credops *);
|
||||
struct rpc_cred * rpcauth_lookupcred(struct rpc_auth *, int);
|
||||
struct rpc_cred * rpcauth_bindcred(struct rpc_task *);
|
||||
void rpcauth_holdcred(struct rpc_task *);
|
||||
void rpcauth_bindcred(struct rpc_task *, struct rpc_cred *, int);
|
||||
void rpcauth_generic_bind_cred(struct rpc_task *, struct rpc_cred *);
|
||||
void put_rpccred(struct rpc_cred *);
|
||||
void rpcauth_unbindcred(struct rpc_task *);
|
||||
__be32 * rpcauth_marshcred(struct rpc_task *, __be32 *);
|
||||
|
@@ -84,6 +84,7 @@ struct gss_cred {
|
||||
enum rpc_gss_svc gc_service;
|
||||
struct gss_cl_ctx *gc_ctx;
|
||||
struct gss_upcall_msg *gc_upcall;
|
||||
unsigned char gc_machine_cred : 1;
|
||||
};
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
@@ -127,11 +127,12 @@ int rpcb_getport_sync(struct sockaddr_in *, u32, u32, int);
|
||||
void rpcb_getport_async(struct rpc_task *);
|
||||
|
||||
void rpc_call_start(struct rpc_task *);
|
||||
int rpc_call_async(struct rpc_clnt *clnt, struct rpc_message *msg,
|
||||
int flags, const struct rpc_call_ops *tk_ops,
|
||||
int rpc_call_async(struct rpc_clnt *clnt,
|
||||
const struct rpc_message *msg, int flags,
|
||||
const struct rpc_call_ops *tk_ops,
|
||||
void *calldata);
|
||||
int rpc_call_sync(struct rpc_clnt *clnt, struct rpc_message *msg,
|
||||
int flags);
|
||||
int rpc_call_sync(struct rpc_clnt *clnt,
|
||||
const struct rpc_message *msg, int flags);
|
||||
struct rpc_task *rpc_call_null(struct rpc_clnt *clnt, struct rpc_cred *cred,
|
||||
int flags);
|
||||
void rpc_restart_call(struct rpc_task *);
|
||||
|
@@ -11,7 +11,6 @@
|
||||
|
||||
#include <linux/timer.h>
|
||||
#include <linux/sunrpc/types.h>
|
||||
#include <linux/rcupdate.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/wait.h>
|
||||
#include <linux/workqueue.h>
|
||||
@@ -33,7 +32,8 @@ struct rpc_wait_queue;
|
||||
struct rpc_wait {
|
||||
struct list_head list; /* wait queue links */
|
||||
struct list_head links; /* Links to related tasks */
|
||||
struct rpc_wait_queue * rpc_waitq; /* RPC wait queue we're on */
|
||||
struct list_head timer_list; /* Timer list */
|
||||
unsigned long expires;
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -57,33 +57,25 @@ struct rpc_task {
|
||||
__u8 tk_cred_retry;
|
||||
|
||||
/*
|
||||
* timeout_fn to be executed by timer bottom half
|
||||
* callback to be executed after waking up
|
||||
* action next procedure for async tasks
|
||||
* tk_ops caller callbacks
|
||||
*/
|
||||
void (*tk_timeout_fn)(struct rpc_task *);
|
||||
void (*tk_callback)(struct rpc_task *);
|
||||
void (*tk_action)(struct rpc_task *);
|
||||
const struct rpc_call_ops *tk_ops;
|
||||
void * tk_calldata;
|
||||
|
||||
/*
|
||||
* tk_timer is used for async processing by the RPC scheduling
|
||||
* primitives. You should not access this directly unless
|
||||
* you have a pathological interest in kernel oopses.
|
||||
*/
|
||||
struct timer_list tk_timer; /* kernel timer */
|
||||
unsigned long tk_timeout; /* timeout for rpc_sleep() */
|
||||
unsigned short tk_flags; /* misc flags */
|
||||
unsigned long tk_runstate; /* Task run status */
|
||||
struct workqueue_struct *tk_workqueue; /* Normally rpciod, but could
|
||||
* be any workqueue
|
||||
*/
|
||||
struct rpc_wait_queue *tk_waitqueue; /* RPC wait queue we're on */
|
||||
union {
|
||||
struct work_struct tk_work; /* Async task work queue */
|
||||
struct rpc_wait tk_wait; /* RPC wait */
|
||||
struct rcu_head tk_rcu; /* for task deletion */
|
||||
} u;
|
||||
|
||||
unsigned short tk_timeouts; /* maj timeouts */
|
||||
@@ -123,6 +115,7 @@ struct rpc_task_setup {
|
||||
const struct rpc_message *rpc_message;
|
||||
const struct rpc_call_ops *callback_ops;
|
||||
void *callback_data;
|
||||
struct workqueue_struct *workqueue;
|
||||
unsigned short flags;
|
||||
signed char priority;
|
||||
};
|
||||
@@ -147,9 +140,7 @@ struct rpc_task_setup {
|
||||
|
||||
#define RPC_TASK_RUNNING 0
|
||||
#define RPC_TASK_QUEUED 1
|
||||
#define RPC_TASK_WAKEUP 2
|
||||
#define RPC_TASK_HAS_TIMER 3
|
||||
#define RPC_TASK_ACTIVE 4
|
||||
#define RPC_TASK_ACTIVE 2
|
||||
|
||||
#define RPC_IS_RUNNING(t) test_bit(RPC_TASK_RUNNING, &(t)->tk_runstate)
|
||||
#define rpc_set_running(t) set_bit(RPC_TASK_RUNNING, &(t)->tk_runstate)
|
||||
@@ -171,15 +162,6 @@ struct rpc_task_setup {
|
||||
smp_mb__after_clear_bit(); \
|
||||
} while (0)
|
||||
|
||||
#define rpc_start_wakeup(t) \
|
||||
(test_and_set_bit(RPC_TASK_WAKEUP, &(t)->tk_runstate) == 0)
|
||||
#define rpc_finish_wakeup(t) \
|
||||
do { \
|
||||
smp_mb__before_clear_bit(); \
|
||||
clear_bit(RPC_TASK_WAKEUP, &(t)->tk_runstate); \
|
||||
smp_mb__after_clear_bit(); \
|
||||
} while (0)
|
||||
|
||||
#define RPC_IS_ACTIVATED(t) test_bit(RPC_TASK_ACTIVE, &(t)->tk_runstate)
|
||||
|
||||
/*
|
||||
@@ -192,6 +174,12 @@ struct rpc_task_setup {
|
||||
#define RPC_PRIORITY_HIGH (1)
|
||||
#define RPC_NR_PRIORITY (1 + RPC_PRIORITY_HIGH - RPC_PRIORITY_LOW)
|
||||
|
||||
struct rpc_timer {
|
||||
struct timer_list timer;
|
||||
struct list_head list;
|
||||
unsigned long expires;
|
||||
};
|
||||
|
||||
/*
|
||||
* RPC synchronization objects
|
||||
*/
|
||||
@@ -204,6 +192,7 @@ struct rpc_wait_queue {
|
||||
unsigned char count; /* # task groups remaining serviced so far */
|
||||
unsigned char nr; /* # tasks remaining for cookie */
|
||||
unsigned short qlen; /* total # tasks waiting in queue */
|
||||
struct rpc_timer timer_list;
|
||||
#ifdef RPC_DEBUG
|
||||
const char * name;
|
||||
#endif
|
||||
@@ -229,9 +218,11 @@ void rpc_killall_tasks(struct rpc_clnt *);
|
||||
void rpc_execute(struct rpc_task *);
|
||||
void rpc_init_priority_wait_queue(struct rpc_wait_queue *, const char *);
|
||||
void rpc_init_wait_queue(struct rpc_wait_queue *, const char *);
|
||||
void rpc_destroy_wait_queue(struct rpc_wait_queue *);
|
||||
void rpc_sleep_on(struct rpc_wait_queue *, struct rpc_task *,
|
||||
rpc_action action, rpc_action timer);
|
||||
void rpc_wake_up_task(struct rpc_task *);
|
||||
rpc_action action);
|
||||
void rpc_wake_up_queued_task(struct rpc_wait_queue *,
|
||||
struct rpc_task *);
|
||||
void rpc_wake_up(struct rpc_wait_queue *);
|
||||
struct rpc_task *rpc_wake_up_next(struct rpc_wait_queue *);
|
||||
void rpc_wake_up_status(struct rpc_wait_queue *, int);
|
||||
|
@@ -86,6 +86,10 @@ struct rpc_rqst {
|
||||
unsigned long rq_majortimeo; /* major timeout alarm */
|
||||
unsigned long rq_timeout; /* Current timeout value */
|
||||
unsigned int rq_retries; /* # of retries */
|
||||
unsigned int rq_connect_cookie;
|
||||
/* A cookie used to track the
|
||||
state of the transport
|
||||
connection */
|
||||
|
||||
/*
|
||||
* Partial send handling
|
||||
@@ -152,6 +156,9 @@ struct rpc_xprt {
|
||||
unsigned long connect_timeout,
|
||||
bind_timeout,
|
||||
reestablish_timeout;
|
||||
unsigned int connect_cookie; /* A cookie that gets bumped
|
||||
every time the transport
|
||||
is reconnected */
|
||||
|
||||
/*
|
||||
* Disconnection of idle transports
|
||||
@@ -232,7 +239,7 @@ int xprt_unregister_transport(struct xprt_class *type);
|
||||
void xprt_set_retrans_timeout_def(struct rpc_task *task);
|
||||
void xprt_set_retrans_timeout_rtt(struct rpc_task *task);
|
||||
void xprt_wake_pending_tasks(struct rpc_xprt *xprt, int status);
|
||||
void xprt_wait_for_buffer_space(struct rpc_task *task);
|
||||
void xprt_wait_for_buffer_space(struct rpc_task *task, rpc_action action);
|
||||
void xprt_write_space(struct rpc_xprt *xprt);
|
||||
void xprt_update_rtt(struct rpc_task *task);
|
||||
void xprt_adjust_cwnd(struct rpc_task *task, int result);
|
||||
@@ -241,6 +248,7 @@ void xprt_complete_rqst(struct rpc_task *task, int copied);
|
||||
void xprt_release_rqst_cong(struct rpc_task *task);
|
||||
void xprt_disconnect_done(struct rpc_xprt *xprt);
|
||||
void xprt_force_disconnect(struct rpc_xprt *xprt);
|
||||
void xprt_conditional_disconnect(struct rpc_xprt *xprt, unsigned int cookie);
|
||||
|
||||
/*
|
||||
* Reserved bit positions in xprt->state
|
||||
|
Reference in New Issue
Block a user