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 ...
Showing the changes to include/linux (6 of 49 files). Show all
Unified · Split
| @@ -16,6 +16,7 @@ · 15 unmodified lines | |||
| 16 | #include <linux/list.h> | 16 | #include <linux/list.h> |
| 17 | #include <linux/uidgid.h> | 17 | #include <linux/uidgid.h> |
| 18 | #include <uapi/linux/nfs4.h> | 18 | #include <uapi/linux/nfs4.h> |
| 19 | #include <linux/sunrpc/msg_prot.h> | ||
| 19 | 20 | ||
| 20 | enum nfs4_acl_whotype { | 21 | enum nfs4_acl_whotype { |
| 21 | NFS4_ACL_WHO_NAMED = 0, | 22 | NFS4_ACL_WHO_NAMED = 0, |
| @@ -539,6 +540,8 @@ enum { · 517 unmodified lines | |||
| 539 | 540 | ||
| 540 | NFSPROC4_CLNT_LOOKUPP, | 541 | NFSPROC4_CLNT_LOOKUPP, |
| 541 | NFSPROC4_CLNT_LAYOUTERROR, | 542 | NFSPROC4_CLNT_LAYOUTERROR, |
| 543 | |||
| 544 | NFSPROC4_CLNT_COPY_NOTIFY, | ||
| 542 | }; | 545 | }; |
| 543 | 546 | ||
| 544 | /* nfs41 types */ | 547 | /* nfs41 types */ |
| @@ -674,4 +677,27 @@ struct nfs4_op_map { · 129 unmodified lines | |||
| 674 | } u; | 677 | } u; |
| 675 | }; | 678 | }; |
| 676 | 679 | ||
| 680 | struct nfs42_netaddr { | ||
| 681 | char netid[RPCBIND_MAXNETIDLEN]; | ||
| 682 | char addr[RPCBIND_MAXUADDRLEN + 1]; | ||
| 683 | u32 netid_len; | ||
| 684 | u32 addr_len; | ||
| 685 | }; | ||
| 686 | |||
| 687 | enum netloc_type4 { | ||
| 688 | NL4_NAME = 1, | ||
| 689 | NL4_URL = 2, | ||
| 690 | NL4_NETADDR = 3, | ||
| 691 | }; | ||
| 692 | |||
| 693 | struct nl4_server { | ||
| 694 | enum netloc_type4 nl4_type; | ||
| 695 | union { | ||
| 696 | struct { /* NL4_NAME, NL4_URL */ | ||
| 697 | int nl4_str_sz; | ||
| 698 | char nl4_str[NFS4_OPAQUE_LIMIT + 1]; | ||
| 699 | }; | ||
| 700 | struct nfs42_netaddr nl4_addr; /* NL4_NETADDR */ | ||
| 701 | } u; | ||
| 702 | }; | ||
| 677 | #endif | 703 | #endif |
| @@ -189,13 +189,15 @@ struct nfs_inode { · 188 unmodified lines | |||
| 189 | 189 | ||
| 190 | struct nfs4_copy_state { | 190 | struct nfs4_copy_state { |
| 191 | struct list_head copies; | 191 | struct list_head copies; |
| 192 | struct list_head src_copies; | ||
| 192 | nfs4_stateid stateid; | 193 | nfs4_stateid stateid; |
| 193 | struct completion completion; | 194 | struct completion completion; |
| 194 | uint64_t count; | 195 | uint64_t count; |
| 195 | struct nfs_writeverf verf; | 196 | struct nfs_writeverf verf; |
| 196 | int error; | 197 | int error; |
| 197 | int flags; | 198 | int flags; |
| 198 | struct nfs4_state *parent_state; | 199 | struct nfs4_state *parent_src_state; |
| 200 | struct nfs4_state *parent_dst_state; | ||
| 199 | }; | 201 | }; |
| 200 | 202 | ||
| 201 | /* | 203 | /* |
| @@ -45,6 +45,9 @@ struct nfs_client { · 44 unmodified lines | |||
| 45 | #define NFS_CS_INFINITE_SLOTS 3 /* - don't limit TCP slots */ | 45 | #define NFS_CS_INFINITE_SLOTS 3 /* - don't limit TCP slots */ |
| 46 | #define NFS_CS_NO_RETRANS_TIMEOUT 4 /* - Disable retransmit timeouts */ | 46 | #define NFS_CS_NO_RETRANS_TIMEOUT 4 /* - Disable retransmit timeouts */ |
| 47 | #define NFS_CS_TSM_POSSIBLE 5 /* - Maybe state migration */ | 47 | #define NFS_CS_TSM_POSSIBLE 5 /* - Maybe state migration */ |
| 48 | #define NFS_CS_NOPING 6 /* - don't ping on connect */ | ||
| 49 | #define NFS_CS_DS 7 /* - Server is a DS */ | ||
| 50 | #define NFS_CS_REUSEPORT 8 /* - reuse src port on reconnect */ | ||
| 48 | struct sockaddr_storage cl_addr; /* server identifier */ | 51 | struct sockaddr_storage cl_addr; /* server identifier */ |
| 49 | size_t cl_addrlen; | 52 | size_t cl_addrlen; |
| 50 | char * cl_hostname; /* hostname of server */ | 53 | char * cl_hostname; /* hostname of server */ |
| @@ -171,7 +174,7 @@ struct nfs_server { · 120 unmodified lines | |||
| 171 | 174 | ||
| 172 | struct nfs_fsid fsid; | 175 | struct nfs_fsid fsid; |
| 173 | __u64 maxfilesize; /* maximum file size */ | 176 | __u64 maxfilesize; /* maximum file size */ |
| 174 | struct timespec time_delta; /* smallest time granularity */ | 177 | struct timespec64 time_delta; /* smallest time granularity */ |
| 175 | unsigned long mount_time; /* when this fs was mounted */ | 178 | unsigned long mount_time; /* when this fs was mounted */ |
| 176 | struct super_block *super; /* VFS super block */ | 179 | struct super_block *super; /* VFS super block */ |
| 177 | dev_t s_dev; /* superblock dev numbers */ | 180 | dev_t s_dev; /* superblock dev numbers */ |
| @@ -276,5 +279,6 @@ struct nfs_server { · 98 unmodified lines | |||
| 276 | #define NFS_CAP_COPY (1U << 24) | 279 | #define NFS_CAP_COPY (1U << 24) |
| 277 | #define NFS_CAP_OFFLOAD_CANCEL (1U << 25) | 280 | #define NFS_CAP_OFFLOAD_CANCEL (1U << 25) |
| 278 | #define NFS_CAP_LAYOUTERROR (1U << 26) | 281 | #define NFS_CAP_LAYOUTERROR (1U << 26) |
| 282 | #define NFS_CAP_COPY_NOTIFY (1U << 27) | ||
| 279 | 283 | ||
| 280 | #endif | 284 | #endif |
| @@ -62,14 +62,14 @@ struct nfs_fattr { · 61 unmodified lines | |||
| 62 | struct nfs_fsid fsid; | 62 | struct nfs_fsid fsid; |
| 63 | __u64 fileid; | 63 | __u64 fileid; |
| 64 | __u64 mounted_on_fileid; | 64 | __u64 mounted_on_fileid; |
| 65 | struct timespec atime; | 65 | struct timespec64 atime; |
| 66 | struct timespec mtime; | 66 | struct timespec64 mtime; |
| 67 | struct timespec ctime; | 67 | struct timespec64 ctime; |
| 68 | __u64 change_attr; /* NFSv4 change attribute */ | 68 | __u64 change_attr; /* NFSv4 change attribute */ |
| 69 | __u64 pre_change_attr;/* pre-op NFSv4 change attribute */ | 69 | __u64 pre_change_attr;/* pre-op NFSv4 change attribute */ |
| 70 | __u64 pre_size; /* pre_op_attr.size */ | 70 | __u64 pre_size; /* pre_op_attr.size */ |
| 71 | struct timespec pre_mtime; /* pre_op_attr.mtime */ | 71 | struct timespec64 pre_mtime; /* pre_op_attr.mtime */ |
| 72 | struct timespec pre_ctime; /* pre_op_attr.ctime */ | 72 | struct timespec64 pre_ctime; /* pre_op_attr.ctime */ |
| 73 | unsigned long time_start; | 73 | unsigned long time_start; |
| 74 | unsigned long gencount; | 74 | unsigned long gencount; |
| 75 | struct nfs4_string *owner_name; | 75 | struct nfs4_string *owner_name; |
| @@ -143,7 +143,7 @@ struct nfs_fsinfo { · 67 unmodified lines | |||
| 143 | __u32 wtmult; /* writes should be multiple of this */ | 143 | __u32 wtmult; /* writes should be multiple of this */ |
| 144 | __u32 dtpref; /* pref. readdir transfer size */ | 144 | __u32 dtpref; /* pref. readdir transfer size */ |
| 145 | __u64 maxfilesize; | 145 | __u64 maxfilesize; |
| 146 | struct timespec time_delta; /* server time granularity */ | 146 | struct timespec64 time_delta; /* server time granularity */ |
| 147 | __u32 lease_time; /* in seconds */ | 147 | __u32 lease_time; /* in seconds */ |
| 148 | __u32 nlayouttypes; /* number of layouttypes */ | 148 | __u32 nlayouttypes; /* number of layouttypes */ |
| 149 | __u32 layouttype[NFS_MAX_LAYOUT_TYPES]; /* supported pnfs layout driver */ | 149 | __u32 layouttype[NFS_MAX_LAYOUT_TYPES]; /* supported pnfs layout driver */ |
| @@ -869,7 +869,7 @@ struct nfs3_sattrargs { · 719 unmodified lines | |||
| 869 | struct nfs_fh * fh; | 869 | struct nfs_fh * fh; |
| 870 | struct iattr * sattr; | 870 | struct iattr * sattr; |
| 871 | unsigned int guard; | 871 | unsigned int guard; |
| 872 | struct timespec guardtime; | 872 | struct timespec64 guardtime; |
| 873 | }; | 873 | }; |
| 874 | 874 | ||
| 875 | struct nfs3_diropargs { | 875 | struct nfs3_diropargs { |
| @@ -1435,6 +1435,7 @@ struct nfs42_copy_args { · 559 unmodified lines | |||
| 1435 | 1435 | ||
| 1436 | u64 count; | 1436 | u64 count; |
| 1437 | bool sync; | 1437 | bool sync; |
| 1438 | struct nl4_server *cp_src; | ||
| 1438 | }; | 1439 | }; |
| 1439 | 1440 | ||
| 1440 | struct nfs42_write_res { | 1441 | struct nfs42_write_res { |
| @@ -1463,6 +1464,22 @@ struct nfs42_offload_status_res { · 22 unmodified lines | |||
| 1463 | int osr_status; | 1464 | int osr_status; |
| 1464 | }; | 1465 | }; |
| 1465 | 1466 | ||
| 1467 | struct nfs42_copy_notify_args { | ||
| 1468 | struct nfs4_sequence_args cna_seq_args; | ||
| 1469 | |||
| 1470 | struct nfs_fh *cna_src_fh; | ||
| 1471 | nfs4_stateid cna_src_stateid; | ||
| 1472 | struct nl4_server cna_dst; | ||
| 1473 | }; | ||
| 1474 | |||
| 1475 | struct nfs42_copy_notify_res { | ||
| 1476 | struct nfs4_sequence_res cnr_seq_res; | ||
| 1477 | |||
| 1478 | struct nfstime4 cnr_lease_time; | ||
| 1479 | nfs4_stateid cnr_stateid; | ||
| 1480 | struct nl4_server cnr_src; | ||
| 1481 | }; | ||
| 1482 | |||
| 1466 | struct nfs42_seek_args { | 1483 | struct nfs42_seek_args { |
| 1467 | struct nfs4_sequence_args seq_args; | 1484 | struct nfs4_sequence_args seq_args; |
| 1468 | 1485 | ||
| @@ -149,6 +149,7 @@ struct rpc_add_xprt_test { · 148 unmodified lines | |||
| 149 | #define RPC_CLNT_CREATE_NO_IDLE_TIMEOUT (1UL << 8) | 149 | #define RPC_CLNT_CREATE_NO_IDLE_TIMEOUT (1UL << 8) |
| 150 | #define RPC_CLNT_CREATE_NO_RETRANS_TIMEOUT (1UL << 9) | 150 | #define RPC_CLNT_CREATE_NO_RETRANS_TIMEOUT (1UL << 9) |
| 151 | #define RPC_CLNT_CREATE_SOFTERR (1UL << 10) | 151 | #define RPC_CLNT_CREATE_SOFTERR (1UL << 10) |
| 152 | #define RPC_CLNT_CREATE_REUSEPORT (1UL << 11) | ||
| 152 | 153 | ||
| 153 | struct rpc_clnt *rpc_create(struct rpc_create_args *args); | 154 | struct rpc_clnt *rpc_create(struct rpc_create_args *args); |
| 154 | struct rpc_clnt *rpc_bind_new_program(struct rpc_clnt *, | 155 | struct rpc_clnt *rpc_bind_new_program(struct rpc_clnt *, |
| @@ -207,7 +207,8 @@ struct rpc_xprt { · 206 unmodified lines | |||
| 207 | unsigned int min_reqs; /* min number of slots */ | 207 | unsigned int min_reqs; /* min number of slots */ |
| 208 | unsigned int num_reqs; /* total slots */ | 208 | unsigned int num_reqs; /* total slots */ |
| 209 | unsigned long state; /* transport state */ | 209 | unsigned long state; /* transport state */ |
| 210 | unsigned char resvport : 1; /* use a reserved port */ | 210 | unsigned char resvport : 1, /* use a reserved port */ |
| 211 | reuseport : 1; /* reuse port on reconnect */ | ||
| 211 | atomic_t swapper; /* we're swapping over this | 212 | atomic_t swapper; /* we're swapping over this |
| 212 | transport */ | 213 | transport */ |
| 213 | unsigned int bind_index; /* bind function index */ | 214 | unsigned int bind_index; /* bind function index */ |