Merge tag 'nfs-for-4.1-1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs
Pull NFS client updates from Trond Myklebust: "Another set of mainly bugfixes and a couple of cleanups. No new functionality in this round. Highlights include: Stable patches: - Fix a regression in /proc/self/mountstats - Fix the pNFS flexfiles O_DIRECT support - Fix high load average due to callback thread sleeping Bugfixes: - Various patches to fix the pNFS layoutcommit support - Do not cache pNFS deviceids unless server notifications are enabled - Fix a SUNRPC transport reconnection regression - make debugfs file creation failure non-fatal in SUNRPC - Another fix for circular directory warnings on NFSv4 "junctioned" mountpoints - Fix locking around NFSv4.2 fallocate() support - Truncating NFSv4 file opens should also sync O_DIRECT writes - Prevent infinite loop in rpcrdma_ep_create() Features: - Various improvements to the RDMA transport code's handling of memory registration - Various code cleanups" * tag 'nfs-for-4.1-1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs: (55 commits) fs/nfs: fix new compiler warning about boolean in switch nfs: Remove unneeded casts in nfs NFS: Don't attempt to decode missing directory entries Revert "nfs: replace nfs_add_stats with nfs_inc_stats when add one" NFS: Rename idmap.c to nfs4idmap.c NFS: Move nfs_idmap.h into fs/nfs/ NFS: Remove CONFIG_NFS_V4 checks from nfs_idmap.h NFS: Add a stub for GETDEVICELIST nfs: remove WARN_ON_ONCE from nfs_direct_good_bytes nfs: fix DIO good bytes calculation nfs: Fetch MOUNTED_ON_FILEID when updating an inode sunrpc: make debugfs file creation failure non-fatal nfs: fix high load average due to callback thread sleeping NFS: Reduce time spent holding the i_mutex during fallocate() NFS: Don't zap caches on fallocate() xprtrdma: Make rpcrdma_{un}map_one() into inline functions xprtrdma: Handle non-SEND completions via a callout xprtrdma: Add "open" memreg op xprtrdma: Add "destroy MRs" memreg op xprtrdma: Add "reset MRs" memreg op ...
This commit is contained in:
@@ -155,6 +155,8 @@ struct pnfs_layoutdriver_type {
|
||||
int how,
|
||||
struct nfs_commit_info *cinfo);
|
||||
|
||||
int (*sync)(struct inode *inode, bool datasync);
|
||||
|
||||
/*
|
||||
* Return PNFS_ATTEMPTED to indicate the layout code has attempted
|
||||
* I/O, else return PNFS_NOT_ATTEMPTED to fall back to normal NFS
|
||||
@@ -203,6 +205,7 @@ struct pnfs_device {
|
||||
struct page **pages;
|
||||
unsigned int pgbase;
|
||||
unsigned int pglen; /* reply buffer length */
|
||||
unsigned char nocache : 1;/* May not be cached */
|
||||
};
|
||||
|
||||
#define NFS4_PNFS_GETDEVLIST_MAXNUM 16
|
||||
@@ -263,10 +266,11 @@ bool pnfs_roc(struct inode *ino);
|
||||
void pnfs_roc_release(struct inode *ino);
|
||||
void pnfs_roc_set_barrier(struct inode *ino, u32 barrier);
|
||||
bool pnfs_roc_drain(struct inode *ino, u32 *barrier, struct rpc_task *task);
|
||||
void pnfs_set_layoutcommit(struct nfs_pgio_header *);
|
||||
void pnfs_commit_set_layoutcommit(struct nfs_commit_data *data);
|
||||
void pnfs_set_layoutcommit(struct inode *, struct pnfs_layout_segment *, loff_t);
|
||||
void pnfs_cleanup_layoutcommit(struct nfs4_layoutcommit_data *data);
|
||||
int pnfs_layoutcommit_inode(struct inode *inode, bool sync);
|
||||
int pnfs_generic_sync(struct inode *inode, bool datasync);
|
||||
int pnfs_nfs_generic_sync(struct inode *inode, bool datasync);
|
||||
int _pnfs_return_layout(struct inode *);
|
||||
int pnfs_commit_and_return_layout(struct inode *);
|
||||
void pnfs_ld_write_done(struct nfs_pgio_header *);
|
||||
@@ -291,6 +295,7 @@ void pnfs_error_mark_layout_for_return(struct inode *inode,
|
||||
enum {
|
||||
NFS_DEVICEID_INVALID = 0, /* set when MDS clientid recalled */
|
||||
NFS_DEVICEID_UNAVAILABLE, /* device temporarily unavailable */
|
||||
NFS_DEVICEID_NOCACHE, /* device may not be cached */
|
||||
};
|
||||
|
||||
/* pnfs_dev.c */
|
||||
@@ -302,6 +307,7 @@ struct nfs4_deviceid_node {
|
||||
unsigned long flags;
|
||||
unsigned long timestamp_unavailable;
|
||||
struct nfs4_deviceid deviceid;
|
||||
struct rcu_head rcu;
|
||||
atomic_t ref;
|
||||
};
|
||||
|
||||
@@ -486,6 +492,14 @@ pnfs_ld_read_whole_page(struct inode *inode)
|
||||
return NFS_SERVER(inode)->pnfs_curr_ld->flags & PNFS_READ_WHOLE_PAGE;
|
||||
}
|
||||
|
||||
static inline int
|
||||
pnfs_sync_inode(struct inode *inode, bool datasync)
|
||||
{
|
||||
if (!pnfs_enabled_sb(NFS_SERVER(inode)))
|
||||
return 0;
|
||||
return NFS_SERVER(inode)->pnfs_curr_ld->sync(inode, datasync);
|
||||
}
|
||||
|
||||
static inline bool
|
||||
pnfs_layoutcommit_outstanding(struct inode *inode)
|
||||
{
|
||||
@@ -568,6 +582,12 @@ pnfs_ld_read_whole_page(struct inode *inode)
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline int
|
||||
pnfs_sync_inode(struct inode *inode, bool datasync)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline bool
|
||||
pnfs_roc(struct inode *ino)
|
||||
{
|
||||
|
Reference in New Issue
Block a user