NFS client updates for Linux 4.13
Stable bugfixes: - Fix -EACCESS on commit to DS handling - Fix initialization of nfs_page_array->npages - Only invalidate dentries that are actually invalid Features: - Enable NFSoRDMA transparent state migration - Add support for lookup-by-filehandle - Add support for nfs re-exporting Other bugfixes and cleanups: - Christoph cleaned up the way we declare NFS operations - Clean up various internal structures - Various cleanups to commits - Various improvements to error handling - Set the dt_type of . and .. entries in NFS v4 - Make slot allocation more reliable - Fix fscache stat printing - Fix uninitialized variable warnings - Fix potential list overrun in nfs_atomic_open() - Fix a race in NFSoRDMA RPC reply handler - Fix return size for nfs42_proc_copy() - Fix against MAC forgery timing attacks -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEnZ5MQTpR7cLU7KEp18tUv7ClQOsFAlln4jEACgkQ18tUv7Cl QOv2ZxAAwbQN9Dtx4rOZmPe0Xszua23sNN0ja891PodkCjIiZrRelZhLIBAf1rfP uSR+jTD8EsBHGt3bzTXg2DHz+o8cGDZuH+uuZX+wRWJPQcKA2pC7zElqnse8nmn5 4Z1UUdzf42vE4NZ/G1ucqpEiAmOqGJ3s7pCRLLXPvOSSQXqOhiomNDAcGxX05FIv Ly4Kr6RIfg/O4oNOZBuuL/tZHodeyOj1vbyjt/4bDQ5MEXlUQfcjJZEsz/2EcNh6 rAgbquxr1pGCD072pPBwYNH2vLGbgNN41KDDMGI0clp+8p6EhV6BOlgcEoGtZM86 c0yro2oBOB2vPCv9nGr6JgTOHPKG6ksJ7vWVXrtQEjBGP82AbFfAawLgqZ6Ae8dP Sqpx55j4xdm4nyNglCuhq5PlPAogARq/eibR+RbY973Lhzr5bZb3XqlairCkNNEv 4RbTlxbWjhgrKJ56jVf+KpUDJAVG5viKMD7YDx/bOfLtvPwALbozD7ONrunz5v43 PgQEvWvVtnQAKp27pqHemTsLFhU6M6eGUEctRnAfB/0ogWZh1X8QXgulpDlqG3kb g12kr5hfA0pSfcB0aGXVzJNnHKfW3IY3WBWtxq4xaMY22YkHtuB+78+9/yk3jCAi dvimjT2Ko9fE9MnltJ/hC5BU+T+xUxg+1vfwWnKMvMH8SIqjyu4= =OpLj -----END PGP SIGNATURE----- Merge tag 'nfs-for-4.13-1' of git://git.linux-nfs.org/projects/anna/linux-nfs Pull NFS client updates from Anna Schumaker: "Stable bugfixes: - Fix -EACCESS on commit to DS handling - Fix initialization of nfs_page_array->npages - Only invalidate dentries that are actually invalid Features: - Enable NFSoRDMA transparent state migration - Add support for lookup-by-filehandle - Add support for nfs re-exporting Other bugfixes and cleanups: - Christoph cleaned up the way we declare NFS operations - Clean up various internal structures - Various cleanups to commits - Various improvements to error handling - Set the dt_type of . and .. entries in NFS v4 - Make slot allocation more reliable - Fix fscache stat printing - Fix uninitialized variable warnings - Fix potential list overrun in nfs_atomic_open() - Fix a race in NFSoRDMA RPC reply handler - Fix return size for nfs42_proc_copy() - Fix against MAC forgery timing attacks" * tag 'nfs-for-4.13-1' of git://git.linux-nfs.org/projects/anna/linux-nfs: (68 commits) NFS: Don't run wake_up_bit() when nobody is waiting... nfs: add export operations nfs4: add NFSv4 LOOKUPP handlers nfs: add a nfs_ilookup helper nfs: replace d_add with d_splice_alias in atomic_open sunrpc: use constant time memory comparison for mac NFSv4.2 fix size storage for nfs42_proc_copy xprtrdma: Fix documenting comments in frwr_ops.c xprtrdma: Replace PAGE_MASK with offset_in_page() xprtrdma: FMR does not need list_del_init() xprtrdma: Demote "connect" log messages NFSv4.1: Use seqid returned by EXCHANGE_ID after state migration NFSv4.1: Handle EXCHGID4_FLAG_CONFIRMED_R during NFSv4.1 migration xprtrdma: Don't defer MR recovery if ro_map fails xprtrdma: Fix FRWR invalidation error recovery xprtrdma: Fix client lock-up after application signal fires xprtrdma: Rename rpcrdma_req::rl_free xprtrdma: Pass only the list of registered MRs to ro_unmap_sync xprtrdma: Pre-mark remotely invalidated MRs xprtrdma: On invalidation failure, remove MWs from rl_registered ...
This commit is contained in:
commit
b86faee6d1
35 changed files with 777 additions and 289 deletions
|
|
@ -479,6 +479,7 @@ enum {
|
|||
NFSPROC4_CLNT_ACCESS,
|
||||
NFSPROC4_CLNT_GETATTR,
|
||||
NFSPROC4_CLNT_LOOKUP,
|
||||
NFSPROC4_CLNT_LOOKUPP,
|
||||
NFSPROC4_CLNT_LOOKUP_ROOT,
|
||||
NFSPROC4_CLNT_REMOVE,
|
||||
NFSPROC4_CLNT_RENAME,
|
||||
|
|
|
|||
|
|
@ -332,6 +332,7 @@ extern void nfs_zap_caches(struct inode *);
|
|||
extern void nfs_invalidate_atime(struct inode *);
|
||||
extern struct inode *nfs_fhget(struct super_block *, struct nfs_fh *,
|
||||
struct nfs_fattr *, struct nfs4_label *);
|
||||
struct inode *nfs_ilookup(struct super_block *sb, struct nfs_fattr *, struct nfs_fh *);
|
||||
extern int nfs_refresh_inode(struct inode *, struct nfs_fattr *);
|
||||
extern int nfs_post_op_update_inode(struct inode *inode, struct nfs_fattr *fattr);
|
||||
extern int nfs_post_op_update_inode_force_wcc(struct inode *inode, struct nfs_fattr *fattr);
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@ struct nfs_client {
|
|||
#define NFS_CS_MIGRATION 2 /* - transparent state migr */
|
||||
#define NFS_CS_INFINITE_SLOTS 3 /* - don't limit TCP slots */
|
||||
#define NFS_CS_NO_RETRANS_TIMEOUT 4 /* - Disable retransmit timeouts */
|
||||
#define NFS_CS_TSM_POSSIBLE 5 /* - Maybe state migration */
|
||||
struct sockaddr_storage cl_addr; /* server identifier */
|
||||
size_t cl_addrlen;
|
||||
char * cl_hostname; /* hostname of server */
|
||||
|
|
@ -210,6 +211,7 @@ struct nfs_server {
|
|||
unsigned long mig_status;
|
||||
#define NFS_MIG_IN_TRANSITION (1)
|
||||
#define NFS_MIG_FAILED (2)
|
||||
#define NFS_MIG_TSM_POSSIBLE (3)
|
||||
|
||||
void (*destroy)(struct nfs_server *);
|
||||
|
||||
|
|
|
|||
|
|
@ -33,6 +33,8 @@ enum {
|
|||
PG_UPTODATE, /* page group sync bit in read path */
|
||||
PG_WB_END, /* page group sync bit in write path */
|
||||
PG_REMOVE, /* page group sync bit in write path */
|
||||
PG_CONTENDED1, /* Is someone waiting for a lock? */
|
||||
PG_CONTENDED2, /* Is someone waiting for a lock? */
|
||||
};
|
||||
|
||||
struct nfs_inode;
|
||||
|
|
@ -93,8 +95,8 @@ struct nfs_pageio_descriptor {
|
|||
const struct rpc_call_ops *pg_rpc_callops;
|
||||
const struct nfs_pgio_completion_ops *pg_completion_ops;
|
||||
struct pnfs_layout_segment *pg_lseg;
|
||||
struct nfs_io_completion *pg_io_completion;
|
||||
struct nfs_direct_req *pg_dreq;
|
||||
void *pg_layout_private;
|
||||
unsigned int pg_bsize; /* default bsize for mirrors */
|
||||
|
||||
u32 pg_mirror_count;
|
||||
|
|
|
|||
|
|
@ -878,7 +878,7 @@ struct nfs3_readdirargs {
|
|||
struct nfs_fh * fh;
|
||||
__u64 cookie;
|
||||
__be32 verf[2];
|
||||
int plus;
|
||||
bool plus;
|
||||
unsigned int count;
|
||||
struct page ** pages;
|
||||
};
|
||||
|
|
@ -909,7 +909,7 @@ struct nfs3_linkres {
|
|||
struct nfs3_readdirres {
|
||||
struct nfs_fattr * dir_attr;
|
||||
__be32 * verf;
|
||||
int plus;
|
||||
bool plus;
|
||||
};
|
||||
|
||||
struct nfs3_getaclres {
|
||||
|
|
@ -1012,7 +1012,6 @@ struct nfs4_link_res {
|
|||
struct nfs_fattr * dir_attr;
|
||||
};
|
||||
|
||||
|
||||
struct nfs4_lookup_arg {
|
||||
struct nfs4_sequence_args seq_args;
|
||||
const struct nfs_fh * dir_fh;
|
||||
|
|
@ -1028,6 +1027,20 @@ struct nfs4_lookup_res {
|
|||
struct nfs4_label *label;
|
||||
};
|
||||
|
||||
struct nfs4_lookupp_arg {
|
||||
struct nfs4_sequence_args seq_args;
|
||||
const struct nfs_fh *fh;
|
||||
const u32 *bitmask;
|
||||
};
|
||||
|
||||
struct nfs4_lookupp_res {
|
||||
struct nfs4_sequence_res seq_res;
|
||||
const struct nfs_server *server;
|
||||
struct nfs_fattr *fattr;
|
||||
struct nfs_fh *fh;
|
||||
struct nfs4_label *label;
|
||||
};
|
||||
|
||||
struct nfs4_lookup_root_arg {
|
||||
struct nfs4_sequence_args seq_args;
|
||||
const u32 * bitmask;
|
||||
|
|
@ -1053,7 +1066,7 @@ struct nfs4_readdir_arg {
|
|||
struct page ** pages; /* zero-copy data */
|
||||
unsigned int pgbase; /* zero-copy data */
|
||||
const u32 * bitmask;
|
||||
int plus;
|
||||
bool plus;
|
||||
};
|
||||
|
||||
struct nfs4_readdir_res {
|
||||
|
|
@ -1422,6 +1435,7 @@ enum {
|
|||
NFS_IOHDR_STAT,
|
||||
};
|
||||
|
||||
struct nfs_io_completion;
|
||||
struct nfs_pgio_header {
|
||||
struct inode *inode;
|
||||
struct rpc_cred *cred;
|
||||
|
|
@ -1435,8 +1449,8 @@ struct nfs_pgio_header {
|
|||
void (*release) (struct nfs_pgio_header *hdr);
|
||||
const struct nfs_pgio_completion_ops *completion_ops;
|
||||
const struct nfs_rw_ops *rw_ops;
|
||||
struct nfs_io_completion *io_completion;
|
||||
struct nfs_direct_req *dreq;
|
||||
void *layout_private;
|
||||
spinlock_t lock;
|
||||
/* fields protected by lock */
|
||||
int pnfs_error;
|
||||
|
|
@ -1533,6 +1547,7 @@ struct nfs_renamedata {
|
|||
struct nfs_fattr new_fattr;
|
||||
void (*complete)(struct rpc_task *, struct nfs_renamedata *);
|
||||
long timeout;
|
||||
bool cancelled;
|
||||
};
|
||||
|
||||
struct nfs_access_entry;
|
||||
|
|
@ -1567,6 +1582,8 @@ struct nfs_rpc_ops {
|
|||
int (*lookup) (struct inode *, const struct qstr *,
|
||||
struct nfs_fh *, struct nfs_fattr *,
|
||||
struct nfs4_label *);
|
||||
int (*lookupp) (struct inode *, struct nfs_fh *,
|
||||
struct nfs_fattr *, struct nfs4_label *);
|
||||
int (*access) (struct inode *, struct nfs_access_entry *);
|
||||
int (*readlink)(struct inode *, struct page *, unsigned int,
|
||||
unsigned int);
|
||||
|
|
@ -1585,7 +1602,7 @@ struct nfs_rpc_ops {
|
|||
int (*mkdir) (struct inode *, struct dentry *, struct iattr *);
|
||||
int (*rmdir) (struct inode *, const struct qstr *);
|
||||
int (*readdir) (struct dentry *, struct rpc_cred *,
|
||||
u64, struct page **, unsigned int, int);
|
||||
u64, struct page **, unsigned int, bool);
|
||||
int (*mknod) (struct inode *, struct dentry *, struct iattr *,
|
||||
dev_t);
|
||||
int (*statfs) (struct nfs_server *, struct nfs_fh *,
|
||||
|
|
@ -1595,7 +1612,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 *);
|
||||
int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, int);
|
||||
int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, bool);
|
||||
int (*pgio_rpc_prepare)(struct rpc_task *,
|
||||
struct nfs_pgio_header *);
|
||||
void (*read_setup)(struct nfs_pgio_header *, struct rpc_message *);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue