Merge git://git.linux-nfs.org/pub/linux/nfs-2.6
* git://git.linux-nfs.org/pub/linux/nfs-2.6: (122 commits) sunrpc: drop BKL around wrap and unwrap NFSv4: Make sure unlock is really an unlock when cancelling a lock NLM: fix source address of callback to client SUNRPC client: add interface for binding to a local address SUNRPC server: record the destination address of a request SUNRPC: cleanup transport creation argument passing NFSv4: Make the NFS state model work with the nosharedcache mount option NFS: Error when mounting the same filesystem with different options NFS: Add the mount option "nosharecache" NFS: Add support for mounting NFSv4 file systems with string options NFS: Add final pieces to support in-kernel mount option parsing NFS: Introduce generic mount client API NFS: Add enums and match tables for mount option parsing NFS: Improve debugging output in NFS in-kernel mount client NFS: Clean up in-kernel NFS mount NFS: Remake nfsroot_mount as a permanent part of NFS client SUNRPC: Add a convenient default for the hostname when calling rpc_create() SUNRPC: Rename rpcb_getport to be consistent with new rpcb_getport_sync name SUNRPC: Rename rpcb_getport_external routine SUNRPC: Allow rpcbind requests to be interrupted by a signal. ...
This commit is contained in:
@@ -39,6 +39,7 @@
|
||||
struct nlm_host {
|
||||
struct hlist_node h_hash; /* doubly linked list */
|
||||
struct sockaddr_in h_addr; /* peer address */
|
||||
struct sockaddr_in h_saddr; /* our address (optional) */
|
||||
struct rpc_clnt * h_rpcclnt; /* RPC client to talk to peer */
|
||||
char * h_name; /* remote hostname */
|
||||
u32 h_version; /* interface version */
|
||||
|
@@ -15,6 +15,7 @@
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define NFS4_BITMAP_SIZE 2
|
||||
#define NFS4_VERIFIER_SIZE 8
|
||||
#define NFS4_STATEID_SIZE 16
|
||||
#define NFS4_FHSIZE 128
|
||||
|
@@ -65,6 +65,7 @@ struct nfs4_mount_data {
|
||||
#define NFS4_MOUNT_NOCTO 0x0010 /* 1 */
|
||||
#define NFS4_MOUNT_NOAC 0x0020 /* 1 */
|
||||
#define NFS4_MOUNT_STRICTLOCK 0x1000 /* 1 */
|
||||
#define NFS4_MOUNT_FLAGMASK 0xFFFF
|
||||
#define NFS4_MOUNT_UNSHARED 0x8000 /* 1 */
|
||||
#define NFS4_MOUNT_FLAGMASK 0x9033
|
||||
|
||||
#endif
|
||||
|
@@ -30,7 +30,9 @@
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <linux/in.h>
|
||||
#include <linux/kref.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/namei.h>
|
||||
#include <linux/pagemap.h>
|
||||
#include <linux/rbtree.h>
|
||||
#include <linux/rwsem.h>
|
||||
@@ -69,9 +71,8 @@ struct nfs_access_entry {
|
||||
|
||||
struct nfs4_state;
|
||||
struct nfs_open_context {
|
||||
atomic_t count;
|
||||
struct vfsmount *vfsmnt;
|
||||
struct dentry *dentry;
|
||||
struct kref kref;
|
||||
struct path path;
|
||||
struct rpc_cred *cred;
|
||||
struct nfs4_state *state;
|
||||
fl_owner_t lockowner;
|
||||
@@ -155,13 +156,9 @@ struct nfs_inode {
|
||||
/*
|
||||
* This is the list of dirty unwritten pages.
|
||||
*/
|
||||
spinlock_t req_lock;
|
||||
struct list_head dirty;
|
||||
struct list_head commit;
|
||||
struct radix_tree_root nfs_page_tree;
|
||||
|
||||
unsigned int ndirty,
|
||||
ncommit,
|
||||
unsigned long ncommit,
|
||||
npages;
|
||||
|
||||
/* Open contexts for shared mmap writes */
|
||||
@@ -187,6 +184,7 @@ struct nfs_inode {
|
||||
#define NFS_INO_INVALID_ACCESS 0x0008 /* cached access cred invalid */
|
||||
#define NFS_INO_INVALID_ACL 0x0010 /* cached acls are invalid */
|
||||
#define NFS_INO_REVAL_PAGECACHE 0x0020 /* must revalidate pagecache */
|
||||
#define NFS_INO_REVAL_FORCED 0x0040 /* force revalidation ignoring a delegation */
|
||||
|
||||
/*
|
||||
* Bit offsets in flags field
|
||||
@@ -496,21 +494,18 @@ static inline void nfs3_forget_cached_acls(struct inode *inode)
|
||||
|
||||
/*
|
||||
* linux/fs/mount_clnt.c
|
||||
* (Used only by nfsroot module)
|
||||
*/
|
||||
extern int nfsroot_mount(struct sockaddr_in *, char *, struct nfs_fh *,
|
||||
int, int);
|
||||
extern int nfs_mount(struct sockaddr *, size_t, char *, char *,
|
||||
int, int, struct nfs_fh *);
|
||||
|
||||
/*
|
||||
* inline functions
|
||||
*/
|
||||
|
||||
static inline loff_t
|
||||
nfs_size_to_loff_t(__u64 size)
|
||||
static inline loff_t nfs_size_to_loff_t(__u64 size)
|
||||
{
|
||||
loff_t maxsz = (((loff_t) ULONG_MAX) << PAGE_CACHE_SHIFT) + PAGE_CACHE_SIZE - 1;
|
||||
if (size > maxsz)
|
||||
return maxsz;
|
||||
if (size > (__u64) OFFSET_MAX - 1)
|
||||
return OFFSET_MAX - 1;
|
||||
return (loff_t) size;
|
||||
}
|
||||
|
||||
@@ -557,6 +552,7 @@ extern void * nfs_root_data(void);
|
||||
#define NFSDBG_ROOT 0x0080
|
||||
#define NFSDBG_CALLBACK 0x0100
|
||||
#define NFSDBG_CLIENT 0x0200
|
||||
#define NFSDBG_MOUNT 0x0400
|
||||
#define NFSDBG_ALL 0xFFFF
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
@@ -16,7 +16,6 @@ struct nfs_client {
|
||||
#define NFS_CS_INITING 1 /* busy initialising */
|
||||
int cl_nfsversion; /* NFS protocol version */
|
||||
unsigned long cl_res_state; /* NFS resources state */
|
||||
#define NFS_CS_RPCIOD 0 /* - rpciod started */
|
||||
#define NFS_CS_CALLBACK 1 /* - callback started */
|
||||
#define NFS_CS_IDMAP 2 /* - idmap started */
|
||||
#define NFS_CS_RENEWD 3 /* - renewd started */
|
||||
@@ -35,7 +34,8 @@ struct nfs_client {
|
||||
nfs4_verifier cl_confirm;
|
||||
unsigned long cl_state;
|
||||
|
||||
u32 cl_lockowner_id;
|
||||
struct rb_root cl_openowner_id;
|
||||
struct rb_root cl_lockowner_id;
|
||||
|
||||
/*
|
||||
* The following rwsem ensures exclusive access to the server
|
||||
@@ -44,9 +44,7 @@ struct nfs_client {
|
||||
struct rw_semaphore cl_sem;
|
||||
|
||||
struct list_head cl_delegations;
|
||||
struct list_head cl_state_owners;
|
||||
struct list_head cl_unused;
|
||||
int cl_nunused;
|
||||
struct rb_root cl_state_owners;
|
||||
spinlock_t cl_lock;
|
||||
|
||||
unsigned long cl_lease_time;
|
||||
|
@@ -37,7 +37,7 @@ struct nfs_mount_data {
|
||||
int acdirmin; /* 1 */
|
||||
int acdirmax; /* 1 */
|
||||
struct sockaddr_in addr; /* 1 */
|
||||
char hostname[256]; /* 1 */
|
||||
char hostname[NFS_MAXNAMLEN + 1]; /* 1 */
|
||||
int namlen; /* 2 */
|
||||
unsigned int bsize; /* 3 */
|
||||
struct nfs3_fh root; /* 4 */
|
||||
@@ -62,6 +62,7 @@ struct nfs_mount_data {
|
||||
#define NFS_MOUNT_STRICTLOCK 0x1000 /* reserved for NFSv4 */
|
||||
#define NFS_MOUNT_SECFLAVOUR 0x2000 /* 5 */
|
||||
#define NFS_MOUNT_NORDIRPLUS 0x4000 /* 5 */
|
||||
#define NFS_MOUNT_UNSHARED 0x8000 /* 5 */
|
||||
#define NFS_MOUNT_FLAGMASK 0xFFFF
|
||||
|
||||
#endif
|
||||
|
@@ -16,12 +16,13 @@
|
||||
#include <linux/sunrpc/auth.h>
|
||||
#include <linux/nfs_xdr.h>
|
||||
|
||||
#include <asm/atomic.h>
|
||||
#include <linux/kref.h>
|
||||
|
||||
/*
|
||||
* Valid flags for the radix tree
|
||||
*/
|
||||
#define NFS_PAGE_TAG_WRITEBACK 0
|
||||
#define NFS_PAGE_TAG_LOCKED 0
|
||||
#define NFS_PAGE_TAG_COMMIT 1
|
||||
|
||||
/*
|
||||
* Valid flags for a dirty buffer
|
||||
@@ -33,8 +34,7 @@
|
||||
|
||||
struct nfs_inode;
|
||||
struct nfs_page {
|
||||
struct list_head wb_list, /* Defines state of page: */
|
||||
*wb_list_head; /* read/write/commit */
|
||||
struct list_head wb_list; /* Defines state of page: */
|
||||
struct page *wb_page; /* page to read in/write out */
|
||||
struct nfs_open_context *wb_context; /* File state context info */
|
||||
atomic_t wb_complete; /* i/os we're waiting for */
|
||||
@@ -42,7 +42,7 @@ struct nfs_page {
|
||||
unsigned int wb_offset, /* Offset & ~PAGE_CACHE_MASK */
|
||||
wb_pgbase, /* Start of page data */
|
||||
wb_bytes; /* Length of request */
|
||||
atomic_t wb_count; /* reference count */
|
||||
struct kref wb_kref; /* reference count */
|
||||
unsigned long wb_flags;
|
||||
struct nfs_writeverf wb_verf; /* Commit cookie */
|
||||
};
|
||||
@@ -71,8 +71,8 @@ extern void nfs_clear_request(struct nfs_page *req);
|
||||
extern void nfs_release_request(struct nfs_page *req);
|
||||
|
||||
|
||||
extern int nfs_scan_list(struct nfs_inode *nfsi, struct list_head *head, struct list_head *dst,
|
||||
pgoff_t idx_start, unsigned int npages);
|
||||
extern int nfs_scan_list(struct nfs_inode *nfsi, struct list_head *dst,
|
||||
pgoff_t idx_start, unsigned int npages, int tag);
|
||||
extern void nfs_pageio_init(struct nfs_pageio_descriptor *desc,
|
||||
struct inode *inode,
|
||||
int (*doio)(struct inode *, struct list_head *, unsigned int, size_t, int),
|
||||
@@ -84,12 +84,11 @@ extern void nfs_pageio_complete(struct nfs_pageio_descriptor *desc);
|
||||
extern void nfs_pageio_cond_complete(struct nfs_pageio_descriptor *, pgoff_t);
|
||||
extern int nfs_wait_on_request(struct nfs_page *);
|
||||
extern void nfs_unlock_request(struct nfs_page *req);
|
||||
extern int nfs_set_page_writeback_locked(struct nfs_page *req);
|
||||
extern void nfs_clear_page_writeback(struct nfs_page *req);
|
||||
extern void nfs_clear_page_tag_locked(struct nfs_page *req);
|
||||
|
||||
|
||||
/*
|
||||
* Lock the page of an asynchronous request without incrementing the wb_count
|
||||
* Lock the page of an asynchronous request without getting a new reference
|
||||
*/
|
||||
static inline int
|
||||
nfs_lock_request_dontget(struct nfs_page *req)
|
||||
@@ -98,14 +97,14 @@ nfs_lock_request_dontget(struct nfs_page *req)
|
||||
}
|
||||
|
||||
/*
|
||||
* Lock the page of an asynchronous request
|
||||
* Lock the page of an asynchronous request and take a reference
|
||||
*/
|
||||
static inline int
|
||||
nfs_lock_request(struct nfs_page *req)
|
||||
{
|
||||
if (test_and_set_bit(PG_BUSY, &req->wb_flags))
|
||||
return 0;
|
||||
atomic_inc(&req->wb_count);
|
||||
kref_get(&req->wb_kref);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -118,7 +117,6 @@ static inline void
|
||||
nfs_list_add_request(struct nfs_page *req, struct list_head *head)
|
||||
{
|
||||
list_add_tail(&req->wb_list, head);
|
||||
req->wb_list_head = head;
|
||||
}
|
||||
|
||||
|
||||
@@ -132,7 +130,6 @@ nfs_list_remove_request(struct nfs_page *req)
|
||||
if (list_empty(&req->wb_list))
|
||||
return;
|
||||
list_del_init(&req->wb_list);
|
||||
req->wb_list_head = NULL;
|
||||
}
|
||||
|
||||
static inline struct nfs_page *
|
||||
|
@@ -119,7 +119,7 @@ struct nfs_openargs {
|
||||
struct nfs_seqid * seqid;
|
||||
int open_flags;
|
||||
__u64 clientid;
|
||||
__u32 id;
|
||||
__u64 id;
|
||||
union {
|
||||
struct iattr * attrs; /* UNCHECKED, GUARDED */
|
||||
nfs4_verifier verifier; /* EXCLUSIVE */
|
||||
@@ -144,6 +144,7 @@ struct nfs_openres {
|
||||
nfs4_stateid delegation;
|
||||
__u32 do_recall;
|
||||
__u64 maxsize;
|
||||
__u32 attrset[NFS4_BITMAP_SIZE];
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -180,7 +181,7 @@ struct nfs_closeres {
|
||||
* */
|
||||
struct nfs_lowner {
|
||||
__u64 clientid;
|
||||
u32 id;
|
||||
__u64 id;
|
||||
};
|
||||
|
||||
struct nfs_lock_args {
|
||||
|
@@ -16,6 +16,7 @@
|
||||
#include <linux/sunrpc/xdr.h>
|
||||
|
||||
#include <asm/atomic.h>
|
||||
#include <linux/rcupdate.h>
|
||||
|
||||
/* size of the nodename buffer */
|
||||
#define UNX_MAXNODENAME 32
|
||||
@@ -30,22 +31,28 @@ struct auth_cred {
|
||||
/*
|
||||
* Client user credentials
|
||||
*/
|
||||
struct rpc_auth;
|
||||
struct rpc_credops;
|
||||
struct rpc_cred {
|
||||
struct hlist_node cr_hash; /* hash chain */
|
||||
struct rpc_credops * cr_ops;
|
||||
unsigned long cr_expire; /* when to gc */
|
||||
atomic_t cr_count; /* ref count */
|
||||
unsigned short cr_flags; /* various flags */
|
||||
struct list_head cr_lru; /* lru garbage collection */
|
||||
struct rcu_head cr_rcu;
|
||||
struct rpc_auth * cr_auth;
|
||||
const struct rpc_credops *cr_ops;
|
||||
#ifdef RPC_DEBUG
|
||||
unsigned long cr_magic; /* 0x0f4aa4f0 */
|
||||
#endif
|
||||
unsigned long cr_expire; /* when to gc */
|
||||
unsigned long cr_flags; /* various flags */
|
||||
atomic_t cr_count; /* ref count */
|
||||
|
||||
uid_t cr_uid;
|
||||
|
||||
/* per-flavor data */
|
||||
};
|
||||
#define RPCAUTH_CRED_NEW 0x0001
|
||||
#define RPCAUTH_CRED_UPTODATE 0x0002
|
||||
#define RPCAUTH_CRED_NEW 0
|
||||
#define RPCAUTH_CRED_UPTODATE 1
|
||||
#define RPCAUTH_CRED_HASHED 2
|
||||
|
||||
#define RPCAUTH_CRED_MAGIC 0x0f4aa4f0
|
||||
|
||||
@@ -56,10 +63,10 @@ struct rpc_cred {
|
||||
#define RPC_CREDCACHE_MASK (RPC_CREDCACHE_NR - 1)
|
||||
struct rpc_cred_cache {
|
||||
struct hlist_head hashtable[RPC_CREDCACHE_NR];
|
||||
unsigned long nextgc; /* next garbage collection */
|
||||
unsigned long expire; /* cache expiry interval */
|
||||
spinlock_t lock;
|
||||
};
|
||||
|
||||
struct rpc_authops;
|
||||
struct rpc_auth {
|
||||
unsigned int au_cslack; /* call cred size estimate */
|
||||
/* guess at number of u32's auth adds before
|
||||
@@ -69,7 +76,7 @@ struct rpc_auth {
|
||||
unsigned int au_verfsize;
|
||||
|
||||
unsigned int au_flags; /* various flags */
|
||||
struct rpc_authops * au_ops; /* operations */
|
||||
const struct rpc_authops *au_ops; /* operations */
|
||||
rpc_authflavor_t au_flavor; /* pseudoflavor (note may
|
||||
* differ from the flavor in
|
||||
* au_ops->au_flavor in gss
|
||||
@@ -115,17 +122,19 @@ struct rpc_credops {
|
||||
void *, __be32 *, void *);
|
||||
};
|
||||
|
||||
extern struct rpc_authops authunix_ops;
|
||||
extern struct rpc_authops authnull_ops;
|
||||
#ifdef CONFIG_SUNRPC_SECURE
|
||||
extern struct rpc_authops authdes_ops;
|
||||
#endif
|
||||
extern const struct rpc_authops authunix_ops;
|
||||
extern const struct rpc_authops authnull_ops;
|
||||
|
||||
int rpcauth_register(struct rpc_authops *);
|
||||
int rpcauth_unregister(struct rpc_authops *);
|
||||
void __init rpc_init_authunix(void);
|
||||
void __init rpcauth_init_module(void);
|
||||
void __exit rpcauth_remove_module(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 *);
|
||||
void rpcauth_destroy(struct rpc_auth *);
|
||||
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 *);
|
||||
@@ -138,8 +147,9 @@ int rpcauth_unwrap_resp(struct rpc_task *task, kxdrproc_t decode, void *rqstp,
|
||||
int rpcauth_refreshcred(struct rpc_task *);
|
||||
void rpcauth_invalcred(struct rpc_task *);
|
||||
int rpcauth_uptodatecred(struct rpc_task *);
|
||||
int rpcauth_init_credcache(struct rpc_auth *, unsigned long);
|
||||
void rpcauth_free_credcache(struct rpc_auth *);
|
||||
int rpcauth_init_credcache(struct rpc_auth *);
|
||||
void rpcauth_destroy_credcache(struct rpc_auth *);
|
||||
void rpcauth_clear_credcache(struct rpc_cred_cache *);
|
||||
|
||||
static inline
|
||||
struct rpc_cred * get_rpccred(struct rpc_cred *cred)
|
||||
|
@@ -75,6 +75,7 @@ struct gss_cl_ctx {
|
||||
struct xdr_netobj gc_wire_ctx;
|
||||
u32 gc_win;
|
||||
unsigned long gc_expiry;
|
||||
struct rcu_head gc_rcu;
|
||||
};
|
||||
|
||||
struct gss_upcall_msg;
|
||||
@@ -85,11 +86,6 @@ struct gss_cred {
|
||||
struct gss_upcall_msg *gc_upcall;
|
||||
};
|
||||
|
||||
#define gc_uid gc_base.cr_uid
|
||||
#define gc_count gc_base.cr_count
|
||||
#define gc_flags gc_base.cr_flags
|
||||
#define gc_expire gc_base.cr_expire
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _LINUX_SUNRPC_AUTH_GSS_H */
|
||||
|
||||
|
@@ -24,8 +24,10 @@ struct rpc_inode;
|
||||
* The high-level client handle
|
||||
*/
|
||||
struct rpc_clnt {
|
||||
atomic_t cl_count; /* Number of clones */
|
||||
atomic_t cl_users; /* number of references */
|
||||
struct kref cl_kref; /* Number of references */
|
||||
struct list_head cl_clients; /* Global list of clients */
|
||||
struct list_head cl_tasks; /* List of tasks */
|
||||
spinlock_t cl_lock; /* spinlock */
|
||||
struct rpc_xprt * cl_xprt; /* transport */
|
||||
struct rpc_procinfo * cl_procinfo; /* procedure info */
|
||||
u32 cl_prog, /* RPC program number */
|
||||
@@ -41,9 +43,7 @@ struct rpc_clnt {
|
||||
unsigned int cl_softrtry : 1,/* soft timeouts */
|
||||
cl_intr : 1,/* interruptible */
|
||||
cl_discrtry : 1,/* disconnect before retry */
|
||||
cl_autobind : 1,/* use getport() */
|
||||
cl_oneshot : 1,/* dispose after use */
|
||||
cl_dead : 1;/* abandoned */
|
||||
cl_autobind : 1;/* use getport() */
|
||||
|
||||
struct rpc_rtt * cl_rtt; /* RTO estimator data */
|
||||
|
||||
@@ -98,6 +98,7 @@ struct rpc_create_args {
|
||||
int protocol;
|
||||
struct sockaddr *address;
|
||||
size_t addrsize;
|
||||
struct sockaddr *saddress;
|
||||
struct rpc_timeout *timeout;
|
||||
char *servername;
|
||||
struct rpc_program *program;
|
||||
@@ -110,20 +111,20 @@ struct rpc_create_args {
|
||||
#define RPC_CLNT_CREATE_HARDRTRY (1UL << 0)
|
||||
#define RPC_CLNT_CREATE_INTR (1UL << 1)
|
||||
#define RPC_CLNT_CREATE_AUTOBIND (1UL << 2)
|
||||
#define RPC_CLNT_CREATE_ONESHOT (1UL << 3)
|
||||
#define RPC_CLNT_CREATE_NONPRIVPORT (1UL << 4)
|
||||
#define RPC_CLNT_CREATE_NOPING (1UL << 5)
|
||||
#define RPC_CLNT_CREATE_DISCRTRY (1UL << 6)
|
||||
#define RPC_CLNT_CREATE_NONPRIVPORT (1UL << 3)
|
||||
#define RPC_CLNT_CREATE_NOPING (1UL << 4)
|
||||
#define RPC_CLNT_CREATE_DISCRTRY (1UL << 5)
|
||||
|
||||
struct rpc_clnt *rpc_create(struct rpc_create_args *args);
|
||||
struct rpc_clnt *rpc_bind_new_program(struct rpc_clnt *,
|
||||
struct rpc_program *, int);
|
||||
struct rpc_clnt *rpc_clone_client(struct rpc_clnt *);
|
||||
int rpc_shutdown_client(struct rpc_clnt *);
|
||||
int rpc_destroy_client(struct rpc_clnt *);
|
||||
void rpc_shutdown_client(struct rpc_clnt *);
|
||||
void rpc_release_client(struct rpc_clnt *);
|
||||
|
||||
int rpcb_register(u32, u32, int, unsigned short, int *);
|
||||
void rpcb_getport(struct rpc_task *);
|
||||
int rpcb_getport_sync(struct sockaddr_in *, __u32, __u32, int);
|
||||
void rpcb_getport_async(struct rpc_task *);
|
||||
|
||||
void rpc_call_setup(struct rpc_task *, struct rpc_message *, int);
|
||||
|
||||
@@ -132,20 +133,16 @@ int rpc_call_async(struct rpc_clnt *clnt, struct rpc_message *msg,
|
||||
void *calldata);
|
||||
int rpc_call_sync(struct rpc_clnt *clnt, 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 *);
|
||||
void rpc_clnt_sigmask(struct rpc_clnt *clnt, sigset_t *oldset);
|
||||
void rpc_clnt_sigunmask(struct rpc_clnt *clnt, sigset_t *oldset);
|
||||
void rpc_setbufsize(struct rpc_clnt *, unsigned int, unsigned int);
|
||||
size_t rpc_max_payload(struct rpc_clnt *);
|
||||
void rpc_force_rebind(struct rpc_clnt *);
|
||||
int rpc_ping(struct rpc_clnt *clnt, int flags);
|
||||
size_t rpc_peeraddr(struct rpc_clnt *, struct sockaddr *, size_t);
|
||||
char * rpc_peeraddr2str(struct rpc_clnt *, enum rpc_display_format_t);
|
||||
|
||||
/*
|
||||
* Helper function for NFSroot support
|
||||
*/
|
||||
int rpcb_getport_external(struct sockaddr_in *, __u32, __u32, int);
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _LINUX_SUNRPC_CLNT_H */
|
||||
|
@@ -77,7 +77,7 @@ struct gss_api_mech {
|
||||
struct module *gm_owner;
|
||||
struct xdr_netobj gm_oid;
|
||||
char *gm_name;
|
||||
struct gss_api_ops *gm_ops;
|
||||
const struct gss_api_ops *gm_ops;
|
||||
/* pseudoflavors supported by this mechanism: */
|
||||
int gm_pf_num;
|
||||
struct pf_desc * gm_pfs;
|
||||
|
@@ -23,9 +23,11 @@ struct rpc_inode {
|
||||
void *private;
|
||||
struct list_head pipe;
|
||||
struct list_head in_upcall;
|
||||
struct list_head in_downcall;
|
||||
int pipelen;
|
||||
int nreaders;
|
||||
int nwriters;
|
||||
int nkern_readwriters;
|
||||
wait_queue_head_t waitq;
|
||||
#define RPC_PIPE_WAIT_FOR_OPEN 1
|
||||
int flags;
|
||||
|
@@ -98,7 +98,6 @@ struct rpc_task {
|
||||
unsigned short tk_pid; /* debugging aid */
|
||||
#endif
|
||||
};
|
||||
#define tk_auth tk_client->cl_auth
|
||||
#define tk_xprt tk_client->cl_xprt
|
||||
|
||||
/* support walking a list of tasks on a wait queue */
|
||||
@@ -110,11 +109,6 @@ struct rpc_task {
|
||||
if (!list_empty(head) && \
|
||||
((task=list_entry((head)->next, struct rpc_task, u.tk_wait.list)),1))
|
||||
|
||||
/* .. and walking list of all tasks */
|
||||
#define alltask_for_each(task, pos, head) \
|
||||
list_for_each(pos, head) \
|
||||
if ((task=list_entry(pos, struct rpc_task, tk_task)),1)
|
||||
|
||||
typedef void (*rpc_action)(struct rpc_task *);
|
||||
|
||||
struct rpc_call_ops {
|
||||
|
@@ -59,6 +59,7 @@ struct svc_sock {
|
||||
/* cache of various info for TCP sockets */
|
||||
void *sk_info_authunix;
|
||||
|
||||
struct sockaddr_storage sk_local; /* local address */
|
||||
struct sockaddr_storage sk_remote; /* remote peer's address */
|
||||
int sk_remotelen; /* length of address */
|
||||
};
|
||||
|
@@ -17,6 +17,8 @@
|
||||
#include <linux/sunrpc/xdr.h>
|
||||
#include <linux/sunrpc/msg_prot.h>
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
extern unsigned int xprt_udp_slot_table_entries;
|
||||
extern unsigned int xprt_tcp_slot_table_entries;
|
||||
|
||||
@@ -194,7 +196,13 @@ struct rpc_xprt {
|
||||
char * address_strings[RPC_DISPLAY_MAX];
|
||||
};
|
||||
|
||||
#ifdef __KERNEL__
|
||||
struct rpc_xprtsock_create {
|
||||
int proto; /* IPPROTO_UDP or IPPROTO_TCP */
|
||||
struct sockaddr * srcaddr; /* optional local address */
|
||||
struct sockaddr * dstaddr; /* remote peer address */
|
||||
size_t addrlen;
|
||||
struct rpc_timeout * timeout; /* optional timeout parameters */
|
||||
};
|
||||
|
||||
/*
|
||||
* Transport operations used by ULPs
|
||||
@@ -204,7 +212,7 @@ void xprt_set_timeout(struct rpc_timeout *to, unsigned int retr, unsigned long
|
||||
/*
|
||||
* Generic internal transport functions
|
||||
*/
|
||||
struct rpc_xprt * xprt_create_transport(int proto, struct sockaddr *addr, size_t size, struct rpc_timeout *toparms);
|
||||
struct rpc_xprt * xprt_create_transport(struct rpc_xprtsock_create *args);
|
||||
void xprt_connect(struct rpc_task *task);
|
||||
void xprt_reserve(struct rpc_task *task);
|
||||
int xprt_reserve_xprt(struct rpc_task *task);
|
||||
@@ -242,8 +250,8 @@ void xprt_disconnect(struct rpc_xprt *xprt);
|
||||
/*
|
||||
* Socket transport setup operations
|
||||
*/
|
||||
struct rpc_xprt * xs_setup_udp(struct sockaddr *addr, size_t addrlen, struct rpc_timeout *to);
|
||||
struct rpc_xprt * xs_setup_tcp(struct sockaddr *addr, size_t addrlen, struct rpc_timeout *to);
|
||||
struct rpc_xprt * xs_setup_udp(struct rpc_xprtsock_create *args);
|
||||
struct rpc_xprt * xs_setup_tcp(struct rpc_xprtsock_create *args);
|
||||
int init_socket_xprt(void);
|
||||
void cleanup_socket_xprt(void);
|
||||
|
||||
|
Reference in New Issue
Block a user