Merge tag 'nfs-for-4.10-1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs
Pull NFS client updates from Trond Myklebust: "Highlights include: Stable bugfixes: - Fix a pnfs deadlock between read resends and layoutreturn - Don't invalidate the layout stateid while a layout return is outstanding - Don't schedule a layoutreturn if the layout stateid is marked as invalid - On a pNFS error, do not send LAYOUTGET until the LAYOUTRETURN is complete - SUNRPC: fix refcounting problems with auth_gss messages. Features: - Add client support for the NFSv4 umask attribute. - NFSv4: Correct support for flock() stateids. - Add a LAYOUTRETURN operation to CLOSE and DELEGRETURN when return-on-close is specified - Allow the pNFS/flexfiles layoutstat information to piggyback on LAYOUTRETURN - Optimise away redundant GETATTR calls when doing state recovery and/or when not required by cache revalidation rules or close-to-open cache consistency. - Attribute cache improvements - RPC/RDMA support for SG_GAP devices Bugfixes: - NFS: Fix performance regressions in readdir - pNFS/flexfiles: Fix a deadlock on LAYOUTGET - NFSv4: Add missing nfs_put_lock_context() - NFSv4.1: Fix regression in callback retry handling - Fix false positive NFSv4.0 trunking detection. - pNFS/flexfiles: Only send layoutstats updates for mirrors that were updated - Various layout stateid related bugfixes - RPC/RDMA bugfixes" * tag 'nfs-for-4.10-1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs: (82 commits) SUNRPC: fix refcounting problems with auth_gss messages. nfs: add support for the umask attribute pNFS/flexfiles: Ensure we have enough buffer for layoutreturn pNFS/flexfiles: Remove a redundant parameter in ff_layout_encode_ioerr() pNFS/flexfiles: Fix a deadlock on LAYOUTGET pNFS: Layoutreturn must free the layout after the layout-private data pNFS/flexfiles: Fix ff_layout_add_ds_error_locked() NFSv4: Add missing nfs_put_lock_context() pNFS: Release NFS_LAYOUT_RETURN when invalidating the layout stateid NFSv4.1: Don't schedule lease recovery in nfs4_schedule_session_recovery() NFSv4.1: Handle NFS4ERR_BADSESSION/NFS4ERR_DEADSESSION replies to OP_SEQUENCE NFS: Only look at the change attribute cache state in nfs_check_verifier NFS: Fix incorrect size revalidation when holding a delegation NFS: Fix incorrect mapping revalidation when holding a delegation pNFS/flexfiles: Support sending layoutstats in layoutreturn pNFS/flexfiles: Minor refactoring before adding iostats to layoutreturn NFS: Fix up read of mirror stats pNFS/flexfiles: Clean up layoutstats pNFS/flexfiles: Refactor encoding of the layoutreturn payload pNFS: Add a layoutreturn callback to performa layout-private setup ...
This commit is contained in:
@@ -440,6 +440,7 @@ enum lock_type4 {
|
||||
#define FATTR4_WORD2_MDSTHRESHOLD (1UL << 4)
|
||||
#define FATTR4_WORD2_CLONE_BLKSIZE (1UL << 13)
|
||||
#define FATTR4_WORD2_SECURITY_LABEL (1UL << 16)
|
||||
#define FATTR4_WORD2_MODE_UMASK (1UL << 17)
|
||||
|
||||
/* MDS threshold bitmap bits */
|
||||
#define THRESHOLD_RD (1UL << 0)
|
||||
|
@@ -55,22 +55,18 @@ struct nfs_access_entry {
|
||||
struct rcu_head rcu_head;
|
||||
};
|
||||
|
||||
struct nfs_lockowner {
|
||||
fl_owner_t l_owner;
|
||||
pid_t l_pid;
|
||||
};
|
||||
|
||||
struct nfs_lock_context {
|
||||
atomic_t count;
|
||||
struct list_head list;
|
||||
struct nfs_open_context *open_context;
|
||||
struct nfs_lockowner lockowner;
|
||||
fl_owner_t lockowner;
|
||||
atomic_t io_count;
|
||||
};
|
||||
|
||||
struct nfs4_state;
|
||||
struct nfs_open_context {
|
||||
struct nfs_lock_context lock_context;
|
||||
fl_owner_t flock_owner;
|
||||
struct dentry *dentry;
|
||||
struct rpc_cred *cred;
|
||||
struct nfs4_state *state;
|
||||
@@ -349,6 +345,7 @@ extern int nfs_attribute_cache_expired(struct inode *inode);
|
||||
extern int nfs_revalidate_inode(struct nfs_server *server, struct inode *inode);
|
||||
extern int nfs_revalidate_inode_rcu(struct nfs_server *server, struct inode *inode);
|
||||
extern int __nfs_revalidate_inode(struct nfs_server *, struct inode *);
|
||||
extern bool nfs_mapping_need_revalidate_inode(struct inode *inode);
|
||||
extern int nfs_revalidate_mapping(struct inode *inode, struct address_space *mapping);
|
||||
extern int nfs_revalidate_mapping_rcu(struct inode *inode);
|
||||
extern int nfs_setattr(struct dentry *, struct iattr *);
|
||||
@@ -358,7 +355,7 @@ extern void nfs_setsecurity(struct inode *inode, struct nfs_fattr *fattr,
|
||||
extern struct nfs_open_context *get_nfs_open_context(struct nfs_open_context *ctx);
|
||||
extern void put_nfs_open_context(struct nfs_open_context *ctx);
|
||||
extern struct nfs_open_context *nfs_find_open_context(struct inode *inode, struct rpc_cred *cred, fmode_t mode);
|
||||
extern struct nfs_open_context *alloc_nfs_open_context(struct dentry *dentry, fmode_t f_mode);
|
||||
extern struct nfs_open_context *alloc_nfs_open_context(struct dentry *dentry, fmode_t f_mode, struct file *filp);
|
||||
extern void nfs_inode_attach_open_context(struct nfs_open_context *ctx);
|
||||
extern void nfs_file_set_open_context(struct file *filp, struct nfs_open_context *ctx);
|
||||
extern void nfs_file_clear_open_context(struct file *flip);
|
||||
|
@@ -216,6 +216,20 @@ struct nfs4_get_lease_time_res {
|
||||
struct nfs_fsinfo *lr_fsinfo;
|
||||
};
|
||||
|
||||
struct xdr_stream;
|
||||
struct nfs4_xdr_opaque_data;
|
||||
|
||||
struct nfs4_xdr_opaque_ops {
|
||||
void (*encode)(struct xdr_stream *, const void *args,
|
||||
const struct nfs4_xdr_opaque_data *);
|
||||
void (*free)(struct nfs4_xdr_opaque_data *);
|
||||
};
|
||||
|
||||
struct nfs4_xdr_opaque_data {
|
||||
const struct nfs4_xdr_opaque_ops *ops;
|
||||
void *data;
|
||||
};
|
||||
|
||||
#define PNFS_LAYOUT_MAXSIZE 4096
|
||||
|
||||
struct nfs4_layoutdriver_data {
|
||||
@@ -306,6 +320,7 @@ struct nfs4_layoutreturn_args {
|
||||
struct pnfs_layout_range range;
|
||||
nfs4_stateid stateid;
|
||||
__u32 layout_type;
|
||||
struct nfs4_xdr_opaque_data *ld_private;
|
||||
};
|
||||
|
||||
struct nfs4_layoutreturn_res {
|
||||
@@ -321,6 +336,7 @@ struct nfs4_layoutreturn {
|
||||
struct nfs_client *clp;
|
||||
struct inode *inode;
|
||||
int rpc_status;
|
||||
struct nfs4_xdr_opaque_data ld_private;
|
||||
};
|
||||
|
||||
#define PNFS_LAYOUTSTATS_MAXSIZE 256
|
||||
@@ -341,8 +357,7 @@ struct nfs42_layoutstat_devinfo {
|
||||
__u64 write_count;
|
||||
__u64 write_bytes;
|
||||
__u32 layout_type;
|
||||
layoutstats_encode_t layoutstats_encode;
|
||||
void *layout_private;
|
||||
struct nfs4_xdr_opaque_data ld_private;
|
||||
};
|
||||
|
||||
struct nfs42_layoutstat_args {
|
||||
@@ -418,6 +433,7 @@ struct nfs_openargs {
|
||||
enum open_claim_type4 claim;
|
||||
enum createmode4 createmode;
|
||||
const struct nfs4_label *label;
|
||||
umode_t umask;
|
||||
};
|
||||
|
||||
struct nfs_openres {
|
||||
@@ -469,6 +485,7 @@ struct nfs_closeargs {
|
||||
fmode_t fmode;
|
||||
u32 share_access;
|
||||
const u32 * bitmask;
|
||||
struct nfs4_layoutreturn_args *lr_args;
|
||||
};
|
||||
|
||||
struct nfs_closeres {
|
||||
@@ -477,6 +494,8 @@ struct nfs_closeres {
|
||||
struct nfs_fattr * fattr;
|
||||
struct nfs_seqid * seqid;
|
||||
const struct nfs_server *server;
|
||||
struct nfs4_layoutreturn_res *lr_res;
|
||||
int lr_ret;
|
||||
};
|
||||
/*
|
||||
* * Arguments to the lock,lockt, and locku call.
|
||||
@@ -549,12 +568,15 @@ struct nfs4_delegreturnargs {
|
||||
const struct nfs_fh *fhandle;
|
||||
const nfs4_stateid *stateid;
|
||||
const u32 * bitmask;
|
||||
struct nfs4_layoutreturn_args *lr_args;
|
||||
};
|
||||
|
||||
struct nfs4_delegreturnres {
|
||||
struct nfs4_sequence_res seq_res;
|
||||
struct nfs_fattr * fattr;
|
||||
struct nfs_server *server;
|
||||
struct nfs4_layoutreturn_res *lr_res;
|
||||
int lr_ret;
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -937,6 +959,7 @@ struct nfs4_create_arg {
|
||||
const struct nfs_fh * dir_fh;
|
||||
const u32 * bitmask;
|
||||
const struct nfs4_label *label;
|
||||
umode_t umask;
|
||||
};
|
||||
|
||||
struct nfs4_create_res {
|
||||
|
Reference in New Issue
Block a user