NFS client updates for Linux 4.5
Highlights include:
Stable fixes:
- Fix a regression in the SunRPC socket polling code
- Fix the attribute cache revalidation code
- Fix race in __update_open_stateid()
- Fix an lo->plh_block_lgets imbalance in layoutreturn
- Fix an Oopsable typo in ff_mirror_match_fh()
Features:
- pNFS layout recall performance improvements.
- pNFS/flexfiles: Support server-supplied layoutstats sampling period
Bugfixes + cleanups:
- NFSv4: Don't perform cached access checks before we've OPENed the file
- Fix starvation issues with background flushes
- Reclaim writes should be flushed as unstable writes if there are already
entries in the commit lists
- Various bugfixes from Chuck to fix NFS/RDMA send queue ordering problems
- Ensure that we propagate fatal layoutget errors back to the application
- Fixes for sundry flexfiles layoutstats bugs
- Fix files/flexfiles to not cache invalidated layouts in the DS commit buckets
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iQIcBAABAgAGBQJWmAvPAAoJEGcL54qWCgDysScP/jnaRdQO+VTXTMtKcPiR7ujd
LBcx3lrI1jsLYjlrBguTh9ROGt0maX1TAu/rsLuo4j/0wQC6dsQw+vFjfkI4CzSn
4htK0f4hNjA29iOAjMaziAzsQW9eJ97Nn0HU4XD43OeK7PGh5e93Xk26Va4cO18P
PqSam+FJoXpUSEWOzNzDwjTZTt4Voo3yJDqDTa8dU0x8c1qBktslo2n0WCntBxMn
IbEDdBEIaUZmYCNhu2Sq1SLwYPatLg1Orfq3quMFJjzEeUbd0lVQno4C1fjjuACt
DNXUgZDH0uR3U3naMXrdkqQ02GHEY9G0CO4a6q0Evsbm15wQuY6GMioxR0+ll7rX
TeZGBUMq3cRFDR+/m1gTBZFjo7BUPE9LKXUazINVaoaJMYqpFunhI8V31ghx8/z8
0kiracIEPXaIGmQ5S151+IDETpw9nntipCzdnduVefB2EAfXPeDzF7uFQPm+mvgx
R4YuAFrlbcIZ/lZRYy5z6Fj3KLnytSOjzgXC5daxPQVt92QumQTQ6HC5jL25zVKb
KOeSWHrFel7M+miL96ERvcS2vi+IDzPH9YbE9YTWbLW9LMBOYQKsukf1aaV9CwC4
9OiNMYGQIGtmjbzIOlRcpVTAsXj+P6UVuwCfGTpQOm1Qa1fDbU+xSLkc62gg3WRa
3E/3RMr1iXD8u1Kiz8hb
=RBmi
-----END PGP SIGNATURE-----
Merge tag 'nfs-for-4.5-1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs
Pull NFS client updates from Trond Myklebust:
"Highlights include:
Stable fixes:
- Fix a regression in the SunRPC socket polling code
- Fix the attribute cache revalidation code
- Fix race in __update_open_stateid()
- Fix an lo->plh_block_lgets imbalance in layoutreturn
- Fix an Oopsable typo in ff_mirror_match_fh()
Features:
- pNFS layout recall performance improvements.
- pNFS/flexfiles: Support server-supplied layoutstats sampling period
Bugfixes + cleanups:
- NFSv4: Don't perform cached access checks before we've OPENed the
file
- Fix starvation issues with background flushes
- Reclaim writes should be flushed as unstable writes if there are
already entries in the commit lists
- Various bugfixes from Chuck to fix NFS/RDMA send queue ordering
problems
- Ensure that we propagate fatal layoutget errors back to the
application
- Fixes for sundry flexfiles layoutstats bugs
- Fix files/flexfiles to not cache invalidated layouts in the DS
commit buckets"
* tag 'nfs-for-4.5-1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs: (68 commits)
NFS: Fix a compile warning about unused variable in nfs_generic_pg_pgios()
NFSv4: Fix a compile warning about no prototype for nfs4_ioctl()
NFS: Use wait_on_atomic_t() for unlock after readahead
SUNRPC: Fixup socket wait for memory
NFSv4.1/pNFS: Cleanup constify struct pnfs_layout_range arguments
NFSv4.1/pnfs: Cleanup copying of pnfs_layout_range structures
NFSv4.1/pNFS: Cleanup pnfs_mark_matching_lsegs_invalid()
NFSv4.1/pNFS: Fix a race in initiate_file_draining()
NFSv4.1/pNFS: pnfs_error_mark_layout_for_return() must always return layout
NFSv4.1/pNFS: pnfs_mark_matching_lsegs_return() should set the iomode
NFSv4.1/pNFS: Use nfs4_stateid_copy for copying stateids
NFSv4.1/pNFS: Don't pass stateids by value to pnfs_send_layoutreturn()
NFS: Relax requirements in nfs_flush_incompatible
NFSv4.1/pNFS: Don't queue up a new commit if the layout segment is invalid
NFS: Allow multiple commit requests in flight per file
NFS/pNFS: Fix up pNFS write reschedule layering violations and bugs
SUNRPC: Fix a missing break in rpc_anyaddr()
pNFS/flexfiles: Fix an Oopsable typo in ff_mirror_match_fh()
NFS: Fix attribute cache revalidation
NFS: Ensure we revalidate attributes before using execute_ok()
...
This commit is contained in:
commit
75f26df6ae
36 changed files with 1483 additions and 522 deletions
|
|
@ -592,4 +592,18 @@ enum data_content4 {
|
|||
NFS4_CONTENT_HOLE = 1,
|
||||
};
|
||||
|
||||
enum pnfs_update_layout_reason {
|
||||
PNFS_UPDATE_LAYOUT_UNKNOWN = 0,
|
||||
PNFS_UPDATE_LAYOUT_NO_PNFS,
|
||||
PNFS_UPDATE_LAYOUT_RD_ZEROLEN,
|
||||
PNFS_UPDATE_LAYOUT_MDSTHRESH,
|
||||
PNFS_UPDATE_LAYOUT_NOMEM,
|
||||
PNFS_UPDATE_LAYOUT_BULK_RECALL,
|
||||
PNFS_UPDATE_LAYOUT_IO_TEST_FAIL,
|
||||
PNFS_UPDATE_LAYOUT_FOUND_CACHED,
|
||||
PNFS_UPDATE_LAYOUT_RETURN,
|
||||
PNFS_UPDATE_LAYOUT_BLOCKED,
|
||||
PNFS_UPDATE_LAYOUT_SEND_LAYOUTGET,
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -60,18 +60,12 @@ struct nfs_lockowner {
|
|||
pid_t l_pid;
|
||||
};
|
||||
|
||||
#define NFS_IO_INPROGRESS 0
|
||||
struct nfs_io_counter {
|
||||
unsigned long flags;
|
||||
atomic_t io_count;
|
||||
};
|
||||
|
||||
struct nfs_lock_context {
|
||||
atomic_t count;
|
||||
struct list_head list;
|
||||
struct nfs_open_context *open_context;
|
||||
struct nfs_lockowner lockowner;
|
||||
struct nfs_io_counter io_count;
|
||||
atomic_t io_count;
|
||||
};
|
||||
|
||||
struct nfs4_state;
|
||||
|
|
@ -216,7 +210,6 @@ struct nfs_inode {
|
|||
#define NFS_INO_FLUSHING (4) /* inode is flushing out data */
|
||||
#define NFS_INO_FSCACHE (5) /* inode can be cached by FS-Cache */
|
||||
#define NFS_INO_FSCACHE_LOCK (6) /* FS-Cache cookie management lock */
|
||||
#define NFS_INO_COMMIT (7) /* inode is committing unstable writes */
|
||||
#define NFS_INO_LAYOUTCOMMIT (9) /* layoutcommit required */
|
||||
#define NFS_INO_LAYOUTCOMMITTING (10) /* layoutcommit inflight */
|
||||
#define NFS_INO_LAYOUTSTATS (11) /* layoutstats inflight */
|
||||
|
|
@ -518,12 +511,24 @@ extern int nfs_updatepage(struct file *, struct page *, unsigned int, unsigned
|
|||
*/
|
||||
extern int nfs_sync_inode(struct inode *inode);
|
||||
extern int nfs_wb_all(struct inode *inode);
|
||||
extern int nfs_wb_page(struct inode *inode, struct page* page);
|
||||
extern int nfs_wb_single_page(struct inode *inode, struct page *page, bool launder);
|
||||
extern int nfs_wb_page_cancel(struct inode *inode, struct page* page);
|
||||
extern int nfs_commit_inode(struct inode *, int);
|
||||
extern struct nfs_commit_data *nfs_commitdata_alloc(void);
|
||||
extern void nfs_commit_free(struct nfs_commit_data *data);
|
||||
|
||||
static inline int
|
||||
nfs_wb_launder_page(struct inode *inode, struct page *page)
|
||||
{
|
||||
return nfs_wb_single_page(inode, page, true);
|
||||
}
|
||||
|
||||
static inline int
|
||||
nfs_wb_page(struct inode *inode, struct page *page)
|
||||
{
|
||||
return nfs_wb_single_page(inode, page, false);
|
||||
}
|
||||
|
||||
static inline int
|
||||
nfs_have_writebacks(struct inode *inode)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -102,6 +102,7 @@ struct nfs_client {
|
|||
#define NFS_SP4_MACH_CRED_STATEID 4 /* TEST_STATEID and FREE_STATEID */
|
||||
#define NFS_SP4_MACH_CRED_WRITE 5 /* WRITE */
|
||||
#define NFS_SP4_MACH_CRED_COMMIT 6 /* COMMIT */
|
||||
#define NFS_SP4_MACH_CRED_PNFS_CLEANUP 7 /* LAYOUTRETURN */
|
||||
#endif /* CONFIG_NFS_V4 */
|
||||
|
||||
/* Our own IP address, as a null-terminated string.
|
||||
|
|
|
|||
|
|
@ -1375,6 +1375,7 @@ enum {
|
|||
NFS_IOHDR_ERROR = 0,
|
||||
NFS_IOHDR_EOF,
|
||||
NFS_IOHDR_REDO,
|
||||
NFS_IOHDR_STAT,
|
||||
};
|
||||
|
||||
struct nfs_pgio_header {
|
||||
|
|
@ -1420,11 +1421,12 @@ struct nfs_mds_commit_info {
|
|||
struct list_head list;
|
||||
};
|
||||
|
||||
struct nfs_commit_info;
|
||||
struct nfs_commit_data;
|
||||
struct nfs_inode;
|
||||
struct nfs_commit_completion_ops {
|
||||
void (*error_cleanup) (struct nfs_inode *nfsi);
|
||||
void (*completion) (struct nfs_commit_data *data);
|
||||
void (*resched_write) (struct nfs_commit_info *, struct nfs_page *);
|
||||
};
|
||||
|
||||
struct nfs_commit_info {
|
||||
|
|
@ -1454,12 +1456,14 @@ struct nfs_commit_data {
|
|||
const struct rpc_call_ops *mds_ops;
|
||||
const struct nfs_commit_completion_ops *completion_ops;
|
||||
int (*commit_done_cb) (struct rpc_task *task, struct nfs_commit_data *data);
|
||||
unsigned long flags;
|
||||
};
|
||||
|
||||
struct nfs_pgio_completion_ops {
|
||||
void (*error_cleanup)(struct list_head *head);
|
||||
void (*init_hdr)(struct nfs_pgio_header *hdr);
|
||||
void (*completion)(struct nfs_pgio_header *hdr);
|
||||
void (*reschedule_io)(struct nfs_pgio_header *hdr);
|
||||
};
|
||||
|
||||
struct nfs_unlinkdata {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue