NFS client updates for Linux 5.5
Highlights include:
Features:
- NFSv4.2 now supports cross device offloaded copy (i.e. offloaded copy
of a file from one source server to a different target server).
- New RDMA tracepoints for debugging congestion control and Local Invalidate
WRs.
Bugfixes and cleanups
- Drop the NFSv4.1 session slot if nfs4_delegreturn_prepare waits for
layoutreturn
- Handle bad/dead sessions correctly in nfs41_sequence_process()
- Various bugfixes to the delegation return operation.
- Various bugfixes pertaining to delegations that have been revoked.
- Cleanups to the NFS timespec code to avoid unnecessary conversions
between timespec and timespec64.
- Fix unstable RDMA connections after a reconnect
- Close race between waking an RDMA sender and posting a receive
- Wake pending RDMA tasks if connection fails
- Fix MR list corruption, and clean up MR usage
- Fix another RPCSEC_GSS issue with MIC buffer space
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEESQctxSBg8JpV8KqEZwvnipYKAPIFAl3qp8QACgkQZwvnipYK
APIZfBAAuFhLUA2Ua9OQOPDJDkQ1IFDBfYGG48aqVu3GIXS9LkEvTavLm/P9ocm+
ijGsUv2iw4x9H4S7OGuzLQm5zmTNsQAlPXD+3+xQS7cjPjh5HCyIAEgpov+JEGae
CeZoSvhtdBd0xB71t2zAKEdHkqc47Jxz3Db0FX22zTTnDvdhArfggisZUt4Xq5Qb
cPcs8R1E5yBZqJFHKObOUP4itVYsXte/VFhtWpjRFqzaZ/t7xNpPVOBH8cli7aI9
E6DqdbIjUreyn62FVWYIeGhwvsKdxv+Slc5ZOEbD45jUryovyCAZxhqDmcAg/0q0
uykplL0cv8MeiZ68wmlxdir/n36hWduiGqa0UKMg2+BAbdudGKJ7xPhkGYP2uZqo
zoZGjd+Hl8AunMBUaT7YAxWOzuIXeMP338szTL6sSBPxT75WmmNJAh3J4b22G7Bl
eGrcJcckDBnvfRCia40l8g9NLHmVKqS9qNKxSWMlMlBmwd1HE0oEE1ddCx9bGHKe
srf0S14RPQBRF6r+Nv0cx5S+CiptDtGiILR+cn5ZDra5YYCPX5kkJ6VEqw/m4yNE
AKjjj5gim+jWYdBOTMU3u5KNNqFx37xnOCdC+5DvhMNWRHf2O/I5JSKtuKaZht+5
PEuwcYfQvaZGp3fCEh38zzOX2qWUhRMbXUqSv5F0DbuWK7OAABQ=
=VZFk
-----END PGP SIGNATURE-----
Merge tag 'nfs-for-5.5-1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs
Pull NFS client updates from Trond Myklebust:
"Highlights include:
Features:
- NFSv4.2 now supports cross device offloaded copy (i.e. offloaded
copy of a file from one source server to a different target
server).
- New RDMA tracepoints for debugging congestion control and Local
Invalidate WRs.
Bugfixes and cleanups
- Drop the NFSv4.1 session slot if nfs4_delegreturn_prepare waits for
layoutreturn
- Handle bad/dead sessions correctly in nfs41_sequence_process()
- Various bugfixes to the delegation return operation.
- Various bugfixes pertaining to delegations that have been revoked.
- Cleanups to the NFS timespec code to avoid unnecessary conversions
between timespec and timespec64.
- Fix unstable RDMA connections after a reconnect
- Close race between waking an RDMA sender and posting a receive
- Wake pending RDMA tasks if connection fails
- Fix MR list corruption, and clean up MR usage
- Fix another RPCSEC_GSS issue with MIC buffer space"
* tag 'nfs-for-5.5-1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs: (79 commits)
SUNRPC: Capture completion of all RPC tasks
SUNRPC: Fix another issue with MIC buffer space
NFS4: Trace lock reclaims
NFS4: Trace state recovery operation
NFSv4.2 fix memory leak in nfs42_ssc_open
NFSv4.2 fix kfree in __nfs42_copy_file_range
NFS: remove duplicated include from nfs4file.c
NFSv4: Make _nfs42_proc_copy_notify() static
NFS: Fallocate should use the nfs4_fattr_bitmap
NFS: Return -ETXTBSY when attempting to write to a swapfile
fs: nfs: sysfs: Remove NULL check before kfree
NFS: remove unneeded semicolon
NFSv4: add declaration of current_stateid
NFSv4.x: Drop the slot if nfs4_delegreturn_prepare waits for layoutreturn
NFSv4.x: Handle bad/dead sessions correctly in nfs41_sequence_process()
nfsv4: Move NFSPROC4_CLNT_COPY_NOTIFY to end of list
SUNRPC: Avoid RPC delays when exiting suspend
NFS: Add a tracepoint in nfs_fh_to_dentry()
NFSv4: Don't retry the GETATTR on old stateid in nfs4_delegreturn_done()
NFSv4: Handle NFS4ERR_OLD_STATEID in delegreturn
...
This commit is contained in:
commit
fb9bf40cf0
49 changed files with 1773 additions and 639 deletions
|
|
@ -16,6 +16,7 @@
|
|||
#include <linux/list.h>
|
||||
#include <linux/uidgid.h>
|
||||
#include <uapi/linux/nfs4.h>
|
||||
#include <linux/sunrpc/msg_prot.h>
|
||||
|
||||
enum nfs4_acl_whotype {
|
||||
NFS4_ACL_WHO_NAMED = 0,
|
||||
|
|
@ -539,6 +540,8 @@ enum {
|
|||
|
||||
NFSPROC4_CLNT_LOOKUPP,
|
||||
NFSPROC4_CLNT_LAYOUTERROR,
|
||||
|
||||
NFSPROC4_CLNT_COPY_NOTIFY,
|
||||
};
|
||||
|
||||
/* nfs41 types */
|
||||
|
|
@ -674,4 +677,27 @@ struct nfs4_op_map {
|
|||
} u;
|
||||
};
|
||||
|
||||
struct nfs42_netaddr {
|
||||
char netid[RPCBIND_MAXNETIDLEN];
|
||||
char addr[RPCBIND_MAXUADDRLEN + 1];
|
||||
u32 netid_len;
|
||||
u32 addr_len;
|
||||
};
|
||||
|
||||
enum netloc_type4 {
|
||||
NL4_NAME = 1,
|
||||
NL4_URL = 2,
|
||||
NL4_NETADDR = 3,
|
||||
};
|
||||
|
||||
struct nl4_server {
|
||||
enum netloc_type4 nl4_type;
|
||||
union {
|
||||
struct { /* NL4_NAME, NL4_URL */
|
||||
int nl4_str_sz;
|
||||
char nl4_str[NFS4_OPAQUE_LIMIT + 1];
|
||||
};
|
||||
struct nfs42_netaddr nl4_addr; /* NL4_NETADDR */
|
||||
} u;
|
||||
};
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -189,13 +189,15 @@ struct nfs_inode {
|
|||
|
||||
struct nfs4_copy_state {
|
||||
struct list_head copies;
|
||||
struct list_head src_copies;
|
||||
nfs4_stateid stateid;
|
||||
struct completion completion;
|
||||
uint64_t count;
|
||||
struct nfs_writeverf verf;
|
||||
int error;
|
||||
int flags;
|
||||
struct nfs4_state *parent_state;
|
||||
struct nfs4_state *parent_src_state;
|
||||
struct nfs4_state *parent_dst_state;
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -45,6 +45,9 @@ struct nfs_client {
|
|||
#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 */
|
||||
#define NFS_CS_NOPING 6 /* - don't ping on connect */
|
||||
#define NFS_CS_DS 7 /* - Server is a DS */
|
||||
#define NFS_CS_REUSEPORT 8 /* - reuse src port on reconnect */
|
||||
struct sockaddr_storage cl_addr; /* server identifier */
|
||||
size_t cl_addrlen;
|
||||
char * cl_hostname; /* hostname of server */
|
||||
|
|
@ -171,7 +174,7 @@ struct nfs_server {
|
|||
|
||||
struct nfs_fsid fsid;
|
||||
__u64 maxfilesize; /* maximum file size */
|
||||
struct timespec time_delta; /* smallest time granularity */
|
||||
struct timespec64 time_delta; /* smallest time granularity */
|
||||
unsigned long mount_time; /* when this fs was mounted */
|
||||
struct super_block *super; /* VFS super block */
|
||||
dev_t s_dev; /* superblock dev numbers */
|
||||
|
|
@ -276,5 +279,6 @@ struct nfs_server {
|
|||
#define NFS_CAP_COPY (1U << 24)
|
||||
#define NFS_CAP_OFFLOAD_CANCEL (1U << 25)
|
||||
#define NFS_CAP_LAYOUTERROR (1U << 26)
|
||||
#define NFS_CAP_COPY_NOTIFY (1U << 27)
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -62,14 +62,14 @@ struct nfs_fattr {
|
|||
struct nfs_fsid fsid;
|
||||
__u64 fileid;
|
||||
__u64 mounted_on_fileid;
|
||||
struct timespec atime;
|
||||
struct timespec mtime;
|
||||
struct timespec ctime;
|
||||
struct timespec64 atime;
|
||||
struct timespec64 mtime;
|
||||
struct timespec64 ctime;
|
||||
__u64 change_attr; /* NFSv4 change attribute */
|
||||
__u64 pre_change_attr;/* pre-op NFSv4 change attribute */
|
||||
__u64 pre_size; /* pre_op_attr.size */
|
||||
struct timespec pre_mtime; /* pre_op_attr.mtime */
|
||||
struct timespec pre_ctime; /* pre_op_attr.ctime */
|
||||
struct timespec64 pre_mtime; /* pre_op_attr.mtime */
|
||||
struct timespec64 pre_ctime; /* pre_op_attr.ctime */
|
||||
unsigned long time_start;
|
||||
unsigned long gencount;
|
||||
struct nfs4_string *owner_name;
|
||||
|
|
@ -143,7 +143,7 @@ struct nfs_fsinfo {
|
|||
__u32 wtmult; /* writes should be multiple of this */
|
||||
__u32 dtpref; /* pref. readdir transfer size */
|
||||
__u64 maxfilesize;
|
||||
struct timespec time_delta; /* server time granularity */
|
||||
struct timespec64 time_delta; /* server time granularity */
|
||||
__u32 lease_time; /* in seconds */
|
||||
__u32 nlayouttypes; /* number of layouttypes */
|
||||
__u32 layouttype[NFS_MAX_LAYOUT_TYPES]; /* supported pnfs layout driver */
|
||||
|
|
@ -869,7 +869,7 @@ struct nfs3_sattrargs {
|
|||
struct nfs_fh * fh;
|
||||
struct iattr * sattr;
|
||||
unsigned int guard;
|
||||
struct timespec guardtime;
|
||||
struct timespec64 guardtime;
|
||||
};
|
||||
|
||||
struct nfs3_diropargs {
|
||||
|
|
@ -1435,6 +1435,7 @@ struct nfs42_copy_args {
|
|||
|
||||
u64 count;
|
||||
bool sync;
|
||||
struct nl4_server *cp_src;
|
||||
};
|
||||
|
||||
struct nfs42_write_res {
|
||||
|
|
@ -1463,6 +1464,22 @@ struct nfs42_offload_status_res {
|
|||
int osr_status;
|
||||
};
|
||||
|
||||
struct nfs42_copy_notify_args {
|
||||
struct nfs4_sequence_args cna_seq_args;
|
||||
|
||||
struct nfs_fh *cna_src_fh;
|
||||
nfs4_stateid cna_src_stateid;
|
||||
struct nl4_server cna_dst;
|
||||
};
|
||||
|
||||
struct nfs42_copy_notify_res {
|
||||
struct nfs4_sequence_res cnr_seq_res;
|
||||
|
||||
struct nfstime4 cnr_lease_time;
|
||||
nfs4_stateid cnr_stateid;
|
||||
struct nl4_server cnr_src;
|
||||
};
|
||||
|
||||
struct nfs42_seek_args {
|
||||
struct nfs4_sequence_args seq_args;
|
||||
|
||||
|
|
|
|||
|
|
@ -149,6 +149,7 @@ struct rpc_add_xprt_test {
|
|||
#define RPC_CLNT_CREATE_NO_IDLE_TIMEOUT (1UL << 8)
|
||||
#define RPC_CLNT_CREATE_NO_RETRANS_TIMEOUT (1UL << 9)
|
||||
#define RPC_CLNT_CREATE_SOFTERR (1UL << 10)
|
||||
#define RPC_CLNT_CREATE_REUSEPORT (1UL << 11)
|
||||
|
||||
struct rpc_clnt *rpc_create(struct rpc_create_args *args);
|
||||
struct rpc_clnt *rpc_bind_new_program(struct rpc_clnt *,
|
||||
|
|
|
|||
|
|
@ -207,7 +207,8 @@ struct rpc_xprt {
|
|||
unsigned int min_reqs; /* min number of slots */
|
||||
unsigned int num_reqs; /* total slots */
|
||||
unsigned long state; /* transport state */
|
||||
unsigned char resvport : 1; /* use a reserved port */
|
||||
unsigned char resvport : 1, /* use a reserved port */
|
||||
reuseport : 1; /* reuse port on reconnect */
|
||||
atomic_t swapper; /* we're swapping over this
|
||||
transport */
|
||||
unsigned int bind_index; /* bind function index */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue