mirror of
https://github.com/ukui/kernel.git
synced 2026-03-09 10:07:04 -07:00
Merge branch 'nfs-for-2.6.38' of git://git.linux-nfs.org/projects/trondmy/nfs-2.6
* 'nfs-for-2.6.38' of git://git.linux-nfs.org/projects/trondmy/nfs-2.6: (89 commits) NFS fix the setting of exchange id flag NFS: Don't use vm_map_ram() in readdir NFSv4: Ensure continued open and lockowner name uniqueness NFS: Move cl_delegations to the nfs_server struct NFS: Introduce nfs_detach_delegations() NFS: Move cl_state_owners and related fields to the nfs_server struct NFS: Allow walking nfs_client.cl_superblocks list outside client.c pnfs: layout roc code pnfs: update nfs4_callback_recallany to handle layouts pnfs: add CB_LAYOUTRECALL handling pnfs: CB_LAYOUTRECALL xdr code pnfs: change lo refcounting to atomic_t pnfs: check that partial LAYOUTGET return is ignored pnfs: add layout to client list before sending rpc pnfs: serialize LAYOUTGET(openstateid) pnfs: layoutget rpc code cleanup pnfs: change how lsegs are removed from layout list pnfs: change layout state seqlock to a spinlock pnfs: add prefix to struct pnfs_layout_hdr fields pnfs: add prefix to struct pnfs_layout_segment fields ...
This commit is contained in:
@@ -44,14 +44,4 @@
|
||||
#define NLMDBG_XDR 0x0100
|
||||
#define NLMDBG_ALL 0x7fff
|
||||
|
||||
|
||||
/*
|
||||
* Support for printing NLM cookies in dprintk()
|
||||
*/
|
||||
#ifdef RPC_DEBUG
|
||||
struct nlm_cookie;
|
||||
/* Call this function with the BKL held (it uses a static buffer) */
|
||||
extern const char *nlmdbg_cookie2a(const struct nlm_cookie *);
|
||||
#endif
|
||||
|
||||
#endif /* LINUX_LOCKD_DEBUG_H */
|
||||
|
||||
@@ -202,9 +202,9 @@ extern u32 nsm_local_state;
|
||||
* Lockd client functions
|
||||
*/
|
||||
struct nlm_rqst * nlm_alloc_call(struct nlm_host *host);
|
||||
void nlm_release_call(struct nlm_rqst *);
|
||||
int nlm_async_call(struct nlm_rqst *, u32, const struct rpc_call_ops *);
|
||||
int nlm_async_reply(struct nlm_rqst *, u32, const struct rpc_call_ops *);
|
||||
void nlmclnt_release_call(struct nlm_rqst *);
|
||||
struct nlm_wait * nlmclnt_prepare_block(struct nlm_host *host, struct file_lock *fl);
|
||||
void nlmclnt_finish_block(struct nlm_wait *block);
|
||||
int nlmclnt_block(struct nlm_wait *block, struct nlm_rqst *req, long timeout);
|
||||
@@ -223,13 +223,14 @@ struct nlm_host *nlmclnt_lookup_host(const struct sockaddr *sap,
|
||||
const u32 version,
|
||||
const char *hostname,
|
||||
int noresvport);
|
||||
void nlmclnt_release_host(struct nlm_host *);
|
||||
struct nlm_host *nlmsvc_lookup_host(const struct svc_rqst *rqstp,
|
||||
const char *hostname,
|
||||
const size_t hostname_len);
|
||||
void nlmsvc_release_host(struct nlm_host *);
|
||||
struct rpc_clnt * nlm_bind_host(struct nlm_host *);
|
||||
void nlm_rebind_host(struct nlm_host *);
|
||||
struct nlm_host * nlm_get_host(struct nlm_host *);
|
||||
void nlm_release_host(struct nlm_host *);
|
||||
void nlm_shutdown_hosts(void);
|
||||
void nlm_host_rebooted(const struct nlm_reboot *);
|
||||
|
||||
@@ -267,6 +268,7 @@ unsigned long nlmsvc_retry_blocked(void);
|
||||
void nlmsvc_traverse_blocks(struct nlm_host *, struct nlm_file *,
|
||||
nlm_host_match_fn_t match);
|
||||
void nlmsvc_grant_reply(struct nlm_cookie *, __be32);
|
||||
void nlmsvc_release_call(struct nlm_rqst *);
|
||||
|
||||
/*
|
||||
* File handling for the server personality
|
||||
|
||||
@@ -11,6 +11,9 @@
|
||||
#define NFS3_MAXGROUPS 16
|
||||
#define NFS3_FHSIZE 64
|
||||
#define NFS3_COOKIESIZE 4
|
||||
#define NFS3_CREATEVERFSIZE 8
|
||||
#define NFS3_COOKIEVERFSIZE 8
|
||||
#define NFS3_WRITEVERFSIZE 8
|
||||
#define NFS3_FIFO_DEV (-1)
|
||||
#define NFS3MODE_FMT 0170000
|
||||
#define NFS3MODE_DIR 0040000
|
||||
|
||||
@@ -111,9 +111,13 @@
|
||||
|
||||
#define EXCHGID4_FLAG_SUPP_MOVED_REFER 0x00000001
|
||||
#define EXCHGID4_FLAG_SUPP_MOVED_MIGR 0x00000002
|
||||
#define EXCHGID4_FLAG_BIND_PRINC_STATEID 0x00000100
|
||||
|
||||
#define EXCHGID4_FLAG_USE_NON_PNFS 0x00010000
|
||||
#define EXCHGID4_FLAG_USE_PNFS_MDS 0x00020000
|
||||
#define EXCHGID4_FLAG_USE_PNFS_DS 0x00040000
|
||||
#define EXCHGID4_FLAG_MASK_PNFS 0x00070000
|
||||
|
||||
#define EXCHGID4_FLAG_UPD_CONFIRMED_REC_A 0x40000000
|
||||
#define EXCHGID4_FLAG_CONFIRMED_R 0x80000000
|
||||
/*
|
||||
@@ -121,8 +125,8 @@
|
||||
* they're set in the argument or response, have separate
|
||||
* invalid flag masks for arg (_A) and resp (_R).
|
||||
*/
|
||||
#define EXCHGID4_FLAG_MASK_A 0x40070003
|
||||
#define EXCHGID4_FLAG_MASK_R 0x80070003
|
||||
#define EXCHGID4_FLAG_MASK_A 0x40070103
|
||||
#define EXCHGID4_FLAG_MASK_R 0x80070103
|
||||
|
||||
#define SEQ4_STATUS_CB_PATH_DOWN 0x00000001
|
||||
#define SEQ4_STATUS_CB_GSS_CONTEXTS_EXPIRING 0x00000002
|
||||
|
||||
@@ -47,11 +47,6 @@ struct nfs_client {
|
||||
u64 cl_clientid; /* constant */
|
||||
unsigned long cl_state;
|
||||
|
||||
struct rb_root cl_openowner_id;
|
||||
struct rb_root cl_lockowner_id;
|
||||
|
||||
struct list_head cl_delegations;
|
||||
struct rb_root cl_state_owners;
|
||||
spinlock_t cl_lock;
|
||||
|
||||
unsigned long cl_lease_time;
|
||||
@@ -71,6 +66,7 @@ struct nfs_client {
|
||||
*/
|
||||
char cl_ipaddr[48];
|
||||
unsigned char cl_id_uniquifier;
|
||||
u32 cl_cb_ident; /* v4.0 callback identifier */
|
||||
const struct nfs4_minor_version_ops *cl_mvops;
|
||||
#endif /* CONFIG_NFS_V4 */
|
||||
|
||||
@@ -148,7 +144,14 @@ struct nfs_server {
|
||||
that are supported on this
|
||||
filesystem */
|
||||
struct pnfs_layoutdriver_type *pnfs_curr_ld; /* Active layout driver */
|
||||
struct rpc_wait_queue roc_rpcwaitq;
|
||||
|
||||
/* the following fields are protected by nfs_client->cl_lock */
|
||||
struct rb_root state_owners;
|
||||
struct rb_root openowner_id;
|
||||
struct rb_root lockowner_id;
|
||||
#endif
|
||||
struct list_head delegations;
|
||||
void (*destroy)(struct nfs_server *);
|
||||
|
||||
atomic_t active; /* Keep trace of any activity to this server */
|
||||
@@ -196,6 +199,7 @@ struct nfs4_slot_table {
|
||||
* op for dynamic resizing */
|
||||
int target_max_slots; /* Set by CB_RECALL_SLOT as
|
||||
* the new max_slots */
|
||||
struct completion complete;
|
||||
};
|
||||
|
||||
static inline int slot_idx(struct nfs4_slot_table *tbl, struct nfs4_slot *sp)
|
||||
@@ -212,7 +216,6 @@ struct nfs4_session {
|
||||
unsigned long session_state;
|
||||
u32 hash_alg;
|
||||
u32 ssv_len;
|
||||
struct completion complete;
|
||||
|
||||
/* The fore and back channel */
|
||||
struct nfs4_channel_attrs fc_attrs;
|
||||
|
||||
@@ -208,6 +208,7 @@ struct nfs4_layoutget_args {
|
||||
struct inode *inode;
|
||||
struct nfs_open_context *ctx;
|
||||
struct nfs4_sequence_args seq_args;
|
||||
nfs4_stateid stateid;
|
||||
};
|
||||
|
||||
struct nfs4_layoutget_res {
|
||||
@@ -223,7 +224,6 @@ struct nfs4_layoutget {
|
||||
struct nfs4_layoutget_args args;
|
||||
struct nfs4_layoutget_res res;
|
||||
struct pnfs_layout_segment **lsegpp;
|
||||
int status;
|
||||
};
|
||||
|
||||
struct nfs4_getdeviceinfo_args {
|
||||
@@ -317,6 +317,7 @@ struct nfs_closeres {
|
||||
struct nfs_lowner {
|
||||
__u64 clientid;
|
||||
__u64 id;
|
||||
dev_t s_dev;
|
||||
};
|
||||
|
||||
struct nfs_lock_args {
|
||||
@@ -484,6 +485,7 @@ struct nfs_entry {
|
||||
struct nfs_fh * fh;
|
||||
struct nfs_fattr * fattr;
|
||||
unsigned char d_type;
|
||||
struct nfs_server * server;
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -1089,7 +1091,7 @@ struct nfs_rpc_ops {
|
||||
int (*pathconf) (struct nfs_server *, struct nfs_fh *,
|
||||
struct nfs_pathconf *);
|
||||
int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
|
||||
__be32 *(*decode_dirent)(struct xdr_stream *, struct nfs_entry *, struct nfs_server *, int plus);
|
||||
int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, int);
|
||||
void (*read_setup) (struct nfs_read_data *, struct rpc_message *);
|
||||
int (*read_done) (struct rpc_task *, struct nfs_read_data *);
|
||||
void (*write_setup) (struct nfs_write_data *, struct rpc_message *);
|
||||
|
||||
@@ -110,9 +110,9 @@ struct rpc_credops {
|
||||
__be32 * (*crmarshal)(struct rpc_task *, __be32 *);
|
||||
int (*crrefresh)(struct rpc_task *);
|
||||
__be32 * (*crvalidate)(struct rpc_task *, __be32 *);
|
||||
int (*crwrap_req)(struct rpc_task *, kxdrproc_t,
|
||||
int (*crwrap_req)(struct rpc_task *, kxdreproc_t,
|
||||
void *, __be32 *, void *);
|
||||
int (*crunwrap_resp)(struct rpc_task *, kxdrproc_t,
|
||||
int (*crunwrap_resp)(struct rpc_task *, kxdrdproc_t,
|
||||
void *, __be32 *, void *);
|
||||
};
|
||||
|
||||
@@ -139,8 +139,8 @@ struct rpc_cred * rpcauth_generic_bind_cred(struct rpc_task *, struct rpc_cred *
|
||||
void put_rpccred(struct rpc_cred *);
|
||||
__be32 * rpcauth_marshcred(struct rpc_task *, __be32 *);
|
||||
__be32 * rpcauth_checkverf(struct rpc_task *, __be32 *);
|
||||
int rpcauth_wrap_req(struct rpc_task *task, kxdrproc_t encode, void *rqstp, __be32 *data, void *obj);
|
||||
int rpcauth_unwrap_resp(struct rpc_task *task, kxdrproc_t decode, void *rqstp, __be32 *data, void *obj);
|
||||
int rpcauth_wrap_req(struct rpc_task *task, kxdreproc_t encode, void *rqstp, __be32 *data, void *obj);
|
||||
int rpcauth_unwrap_resp(struct rpc_task *task, kxdrdproc_t decode, void *rqstp, __be32 *data, void *obj);
|
||||
int rpcauth_refreshcred(struct rpc_task *);
|
||||
void rpcauth_invalcred(struct rpc_task *);
|
||||
int rpcauth_uptodatecred(struct rpc_task *);
|
||||
|
||||
@@ -43,10 +43,18 @@ int bc_send(struct rpc_rqst *req);
|
||||
*/
|
||||
static inline int svc_is_backchannel(const struct svc_rqst *rqstp)
|
||||
{
|
||||
if (rqstp->rq_server->bc_xprt)
|
||||
if (rqstp->rq_server->sv_bc_xprt)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
static inline struct nfs4_sessionid *bc_xprt_sid(struct svc_rqst *rqstp)
|
||||
{
|
||||
if (svc_is_backchannel(rqstp))
|
||||
return (struct nfs4_sessionid *)
|
||||
rqstp->rq_server->sv_bc_xprt->xpt_bc_sid;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#else /* CONFIG_NFS_V4_1 */
|
||||
static inline int xprt_setup_backchannel(struct rpc_xprt *xprt,
|
||||
unsigned int min_reqs)
|
||||
@@ -59,6 +67,11 @@ static inline int svc_is_backchannel(const struct svc_rqst *rqstp)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline struct nfs4_sessionid *bc_xprt_sid(struct svc_rqst *rqstp)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline void xprt_free_bc_request(struct rpc_rqst *req)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -89,8 +89,8 @@ struct rpc_version {
|
||||
*/
|
||||
struct rpc_procinfo {
|
||||
u32 p_proc; /* RPC procedure number */
|
||||
kxdrproc_t p_encode; /* XDR encode function */
|
||||
kxdrproc_t p_decode; /* XDR decode function */
|
||||
kxdreproc_t p_encode; /* XDR encode function */
|
||||
kxdrdproc_t p_decode; /* XDR decode function */
|
||||
unsigned int p_arglen; /* argument hdr length (u32) */
|
||||
unsigned int p_replen; /* reply hdr length (u32) */
|
||||
unsigned int p_count; /* call count */
|
||||
|
||||
@@ -99,7 +99,7 @@ struct svc_serv {
|
||||
spinlock_t sv_cb_lock; /* protects the svc_cb_list */
|
||||
wait_queue_head_t sv_cb_waitq; /* sleep here if there are no
|
||||
* entries in the svc_cb_list */
|
||||
struct svc_xprt *bc_xprt;
|
||||
struct svc_xprt *sv_bc_xprt; /* callback on fore channel */
|
||||
#endif /* CONFIG_NFS_V4_1 */
|
||||
};
|
||||
|
||||
|
||||
@@ -78,6 +78,7 @@ struct svc_xprt {
|
||||
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 */
|
||||
void *xpt_bc_sid; /* back channel session ID */
|
||||
|
||||
struct net *xpt_net;
|
||||
};
|
||||
|
||||
@@ -33,8 +33,8 @@ struct xdr_netobj {
|
||||
};
|
||||
|
||||
/*
|
||||
* This is the generic XDR function. rqstp is either a rpc_rqst (client
|
||||
* side) or svc_rqst pointer (server side).
|
||||
* This is the legacy generic XDR function. rqstp is either a rpc_rqst
|
||||
* (client side) or svc_rqst pointer (server side).
|
||||
* Encode functions always assume there's enough room in the buffer.
|
||||
*/
|
||||
typedef int (*kxdrproc_t)(void *rqstp, __be32 *data, void *obj);
|
||||
@@ -201,14 +201,22 @@ struct xdr_stream {
|
||||
|
||||
__be32 *end; /* end of available buffer space */
|
||||
struct kvec *iov; /* pointer to the current kvec */
|
||||
struct kvec scratch; /* Scratch buffer */
|
||||
struct page **page_ptr; /* pointer to the current page */
|
||||
};
|
||||
|
||||
/*
|
||||
* These are the xdr_stream style generic XDR encode and decode functions.
|
||||
*/
|
||||
typedef void (*kxdreproc_t)(void *rqstp, struct xdr_stream *xdr, void *obj);
|
||||
typedef int (*kxdrdproc_t)(void *rqstp, struct xdr_stream *xdr, void *obj);
|
||||
|
||||
extern void xdr_init_encode(struct xdr_stream *xdr, struct xdr_buf *buf, __be32 *p);
|
||||
extern __be32 *xdr_reserve_space(struct xdr_stream *xdr, size_t nbytes);
|
||||
extern void xdr_write_pages(struct xdr_stream *xdr, struct page **pages,
|
||||
unsigned int base, unsigned int len);
|
||||
extern void xdr_init_decode(struct xdr_stream *xdr, struct xdr_buf *buf, __be32 *p);
|
||||
extern __be32 *xdr_inline_peek(struct xdr_stream *xdr, size_t nbytes);
|
||||
extern void xdr_set_scratch_buffer(struct xdr_stream *xdr, void *buf, size_t buflen);
|
||||
extern __be32 *xdr_inline_decode(struct xdr_stream *xdr, size_t nbytes);
|
||||
extern void xdr_read_pages(struct xdr_stream *xdr, unsigned int len);
|
||||
extern void xdr_enter_page(struct xdr_stream *xdr, unsigned int len);
|
||||
|
||||
Reference in New Issue
Block a user