Pull NFS client updates from Anna Schumaker: "Stable bugfixes: - Fix -EACCESS on commit to DS handling - Fix initialization of nfs_page_array->npages - Only invalidate dentries that are actually invalid Features: - Enable NFSoRDMA transparent state migration - Add support for lookup-by-filehandle - Add support for nfs re-exporting Other bugfixes and cleanups: - Christoph cleaned up the way we declare NFS operations - Clean up various internal structures - Various cleanups to commits - Various improvements to error handling - Set the dt_type of . and .. entries in NFS v4 - Make slot allocation more reliable - Fix fscache stat printing - Fix uninitialized variable warnings - Fix potential list overrun in nfs_atomic_open() - Fix a race in NFSoRDMA RPC reply handler - Fix return size for nfs42_proc_copy() - Fix against MAC forgery timing attacks" * tag 'nfs-for-4.13-1' of git://git.linux-nfs.org/projects/anna/linux-nfs: (68 commits) NFS: Don't run wake_up_bit() when nobody is waiting... nfs: add export operations nfs4: add NFSv4 LOOKUPP handlers nfs: add a nfs_ilookup helper nfs: replace d_add with d_splice_alias in atomic_open sunrpc: use constant time memory comparison for mac NFSv4.2 fix size storage for nfs42_proc_copy xprtrdma: Fix documenting comments in frwr_ops.c xprtrdma: Replace PAGE_MASK with offset_in_page() xprtrdma: FMR does not need list_del_init() xprtrdma: Demote "connect" log messages NFSv4.1: Use seqid returned by EXCHANGE_ID after state migration NFSv4.1: Handle EXCHGID4_FLAG_CONFIRMED_R during NFSv4.1 migration xprtrdma: Don't defer MR recovery if ro_map fails xprtrdma: Fix FRWR invalidation error recovery xprtrdma: Fix client lock-up after application signal fires xprtrdma: Rename rpcrdma_req::rl_free xprtrdma: Pass only the list of registered MRs to ro_unmap_sync xprtrdma: Pre-mark remotely invalidated MRs xprtrdma: On invalidation failure, remove MWs from rl_registered ...
Showing the changes to include/linux (5 of 35 files). Show all
Unified · Split
| @@ -479,6 +479,7 @@ enum { · 478 unmodified lines | |||
| 479 | NFSPROC4_CLNT_ACCESS, | 479 | NFSPROC4_CLNT_ACCESS, |
| 480 | NFSPROC4_CLNT_GETATTR, | 480 | NFSPROC4_CLNT_GETATTR, |
| 481 | NFSPROC4_CLNT_LOOKUP, | 481 | NFSPROC4_CLNT_LOOKUP, |
| 482 | NFSPROC4_CLNT_LOOKUPP, | ||
| 482 | NFSPROC4_CLNT_LOOKUP_ROOT, | 483 | NFSPROC4_CLNT_LOOKUP_ROOT, |
| 483 | NFSPROC4_CLNT_REMOVE, | 484 | NFSPROC4_CLNT_REMOVE, |
| 484 | NFSPROC4_CLNT_RENAME, | 485 | NFSPROC4_CLNT_RENAME, |
| @@ -332,6 +332,7 @@ extern void nfs_zap_caches(struct inode *); · 331 unmodified lines | |||
| 332 | extern void nfs_invalidate_atime(struct inode *); | 332 | extern void nfs_invalidate_atime(struct inode *); |
| 333 | extern struct inode *nfs_fhget(struct super_block *, struct nfs_fh *, | 333 | extern struct inode *nfs_fhget(struct super_block *, struct nfs_fh *, |
| 334 | struct nfs_fattr *, struct nfs4_label *); | 334 | struct nfs_fattr *, struct nfs4_label *); |
| 335 | struct inode *nfs_ilookup(struct super_block *sb, struct nfs_fattr *, struct nfs_fh *); | ||
| 335 | extern int nfs_refresh_inode(struct inode *, struct nfs_fattr *); | 336 | extern int nfs_refresh_inode(struct inode *, struct nfs_fattr *); |
| 336 | extern int nfs_post_op_update_inode(struct inode *inode, struct nfs_fattr *fattr); | 337 | extern int nfs_post_op_update_inode(struct inode *inode, struct nfs_fattr *fattr); |
| 337 | extern int nfs_post_op_update_inode_force_wcc(struct inode *inode, struct nfs_fattr *fattr); | 338 | extern int nfs_post_op_update_inode_force_wcc(struct inode *inode, struct nfs_fattr *fattr); |
| @@ -42,6 +42,7 @@ struct nfs_client { · 41 unmodified lines | |||
| 42 | #define NFS_CS_MIGRATION 2 /* - transparent state migr */ | 42 | #define NFS_CS_MIGRATION 2 /* - transparent state migr */ |
| 43 | #define NFS_CS_INFINITE_SLOTS 3 /* - don't limit TCP slots */ | 43 | #define NFS_CS_INFINITE_SLOTS 3 /* - don't limit TCP slots */ |
| 44 | #define NFS_CS_NO_RETRANS_TIMEOUT 4 /* - Disable retransmit timeouts */ | 44 | #define NFS_CS_NO_RETRANS_TIMEOUT 4 /* - Disable retransmit timeouts */ |
| 45 | #define NFS_CS_TSM_POSSIBLE 5 /* - Maybe state migration */ | ||
| 45 | struct sockaddr_storage cl_addr; /* server identifier */ | 46 | struct sockaddr_storage cl_addr; /* server identifier */ |
| 46 | size_t cl_addrlen; | 47 | size_t cl_addrlen; |
| 47 | char * cl_hostname; /* hostname of server */ | 48 | char * cl_hostname; /* hostname of server */ |
| @@ -210,6 +211,7 @@ struct nfs_server { · 162 unmodified lines | |||
| 210 | unsigned long mig_status; | 211 | unsigned long mig_status; |
| 211 | #define NFS_MIG_IN_TRANSITION (1) | 212 | #define NFS_MIG_IN_TRANSITION (1) |
| 212 | #define NFS_MIG_FAILED (2) | 213 | #define NFS_MIG_FAILED (2) |
| 214 | #define NFS_MIG_TSM_POSSIBLE (3) | ||
| 213 | 215 | ||
| 214 | void (*destroy)(struct nfs_server *); | 216 | void (*destroy)(struct nfs_server *); |
| 215 | 217 | ||
| @@ -33,6 +33,8 @@ enum { · 32 unmodified lines | |||
| 33 | PG_UPTODATE, /* page group sync bit in read path */ | 33 | PG_UPTODATE, /* page group sync bit in read path */ |
| 34 | PG_WB_END, /* page group sync bit in write path */ | 34 | PG_WB_END, /* page group sync bit in write path */ |
| 35 | PG_REMOVE, /* page group sync bit in write path */ | 35 | PG_REMOVE, /* page group sync bit in write path */ |
| 36 | PG_CONTENDED1, /* Is someone waiting for a lock? */ | ||
| 37 | PG_CONTENDED2, /* Is someone waiting for a lock? */ | ||
| 36 | }; | 38 | }; |
| 37 | 39 | ||
| 38 | struct nfs_inode; | 40 | struct nfs_inode; |
| @@ -93,8 +95,8 @@ struct nfs_pageio_descriptor { · 54 unmodified lines | |||
| 93 | const struct rpc_call_ops *pg_rpc_callops; | 95 | const struct rpc_call_ops *pg_rpc_callops; |
| 94 | const struct nfs_pgio_completion_ops *pg_completion_ops; | 96 | const struct nfs_pgio_completion_ops *pg_completion_ops; |
| 95 | struct pnfs_layout_segment *pg_lseg; | 97 | struct pnfs_layout_segment *pg_lseg; |
| 98 | struct nfs_io_completion *pg_io_completion; | ||
| 96 | struct nfs_direct_req *pg_dreq; | 99 | struct nfs_direct_req *pg_dreq; |
| 97 | void *pg_layout_private; | ||
| 98 | unsigned int pg_bsize; /* default bsize for mirrors */ | 100 | unsigned int pg_bsize; /* default bsize for mirrors */ |
| 99 | 101 | ||
| 100 | u32 pg_mirror_count; | 102 | u32 pg_mirror_count; |
| @@ -878,7 +878,7 @@ struct nfs3_readdirargs { · 877 unmodified lines | |||
| 878 | struct nfs_fh * fh; | 878 | struct nfs_fh * fh; |
| 879 | __u64 cookie; | 879 | __u64 cookie; |
| 880 | __be32 verf[2]; | 880 | __be32 verf[2]; |
| 881 | int plus; | 881 | bool plus; |
| 882 | unsigned int count; | 882 | unsigned int count; |
| 883 | struct page ** pages; | 883 | struct page ** pages; |
| 884 | }; | 884 | }; |
| @@ -909,7 +909,7 @@ struct nfs3_linkres { · 24 unmodified lines | |||
| 909 | struct nfs3_readdirres { | 909 | struct nfs3_readdirres { |
| 910 | struct nfs_fattr * dir_attr; | 910 | struct nfs_fattr * dir_attr; |
| 911 | __be32 * verf; | 911 | __be32 * verf; |
| 912 | int plus; | 912 | bool plus; |
| 913 | }; | 913 | }; |
| 914 | 914 | ||
| 915 | struct nfs3_getaclres { | 915 | struct nfs3_getaclres { |
| @@ -1012,7 +1012,6 @@ struct nfs4_link_res { · 96 unmodified lines | |||
| 1012 | struct nfs_fattr * dir_attr; | 1012 | struct nfs_fattr * dir_attr; |
| 1013 | }; | 1013 | }; |
| 1014 | 1014 | ||
| 1015 | |||
| 1016 | struct nfs4_lookup_arg { | 1015 | struct nfs4_lookup_arg { |
| 1017 | struct nfs4_sequence_args seq_args; | 1016 | struct nfs4_sequence_args seq_args; |
| 1018 | const struct nfs_fh * dir_fh; | 1017 | const struct nfs_fh * dir_fh; |
| @@ -1028,6 +1027,20 @@ struct nfs4_lookup_res { · 9 unmodified lines | |||
| 1028 | struct nfs4_label *label; | 1027 | struct nfs4_label *label; |
| 1029 | }; | 1028 | }; |
| 1030 | 1029 | ||
| 1030 | struct nfs4_lookupp_arg { | ||
| 1031 | struct nfs4_sequence_args seq_args; | ||
| 1032 | const struct nfs_fh *fh; | ||
| 1033 | const u32 *bitmask; | ||
| 1034 | }; | ||
| 1035 | |||
| 1036 | struct nfs4_lookupp_res { | ||
| 1037 | struct nfs4_sequence_res seq_res; | ||
| 1038 | const struct nfs_server *server; | ||
| 1039 | struct nfs_fattr *fattr; | ||
| 1040 | struct nfs_fh *fh; | ||
| 1041 | struct nfs4_label *label; | ||
| 1042 | }; | ||
| 1043 | |||
| 1031 | struct nfs4_lookup_root_arg { | 1044 | struct nfs4_lookup_root_arg { |
| 1032 | struct nfs4_sequence_args seq_args; | 1045 | struct nfs4_sequence_args seq_args; |
| 1033 | const u32 * bitmask; | 1046 | const u32 * bitmask; |
| @@ -1053,7 +1066,7 @@ struct nfs4_readdir_arg { · 19 unmodified lines | |||
| 1053 | struct page ** pages; /* zero-copy data */ | 1066 | struct page ** pages; /* zero-copy data */ |
| 1054 | unsigned int pgbase; /* zero-copy data */ | 1067 | unsigned int pgbase; /* zero-copy data */ |
| 1055 | const u32 * bitmask; | 1068 | const u32 * bitmask; |
| 1056 | int plus; | 1069 | bool plus; |
| 1057 | }; | 1070 | }; |
| 1058 | 1071 | ||
| 1059 | struct nfs4_readdir_res { | 1072 | struct nfs4_readdir_res { |
| @@ -1422,6 +1435,7 @@ enum { · 362 unmodified lines | |||
| 1422 | NFS_IOHDR_STAT, | 1435 | NFS_IOHDR_STAT, |
| 1423 | }; | 1436 | }; |
| 1424 | 1437 | ||
| 1438 | struct nfs_io_completion; | ||
| 1425 | struct nfs_pgio_header { | 1439 | struct nfs_pgio_header { |
| 1426 | struct inode *inode; | 1440 | struct inode *inode; |
| 1427 | struct rpc_cred *cred; | 1441 | struct rpc_cred *cred; |
| @@ -1435,8 +1449,8 @@ struct nfs_pgio_header { · 7 unmodified lines | |||
| 1435 | void (*release) (struct nfs_pgio_header *hdr); | 1449 | void (*release) (struct nfs_pgio_header *hdr); |
| 1436 | const struct nfs_pgio_completion_ops *completion_ops; | 1450 | const struct nfs_pgio_completion_ops *completion_ops; |
| 1437 | const struct nfs_rw_ops *rw_ops; | 1451 | const struct nfs_rw_ops *rw_ops; |
| 1452 | struct nfs_io_completion *io_completion; | ||
| 1438 | struct nfs_direct_req *dreq; | 1453 | struct nfs_direct_req *dreq; |
| 1439 | void *layout_private; | ||
| 1440 | spinlock_t lock; | 1454 | spinlock_t lock; |
| 1441 | /* fields protected by lock */ | 1455 | /* fields protected by lock */ |
| 1442 | int pnfs_error; | 1456 | int pnfs_error; |
| @@ -1533,6 +1547,7 @@ struct nfs_renamedata { · 90 unmodified lines | |||
| 1533 | struct nfs_fattr new_fattr; | 1547 | struct nfs_fattr new_fattr; |
| 1534 | void (*complete)(struct rpc_task *, struct nfs_renamedata *); | 1548 | void (*complete)(struct rpc_task *, struct nfs_renamedata *); |
| 1535 | long timeout; | 1549 | long timeout; |
| 1550 | bool cancelled; | ||
| 1536 | }; | 1551 | }; |
| 1537 | 1552 | ||
| 1538 | struct nfs_access_entry; | 1553 | struct nfs_access_entry; |
| @@ -1567,6 +1582,8 @@ struct nfs_rpc_ops { · 28 unmodified lines | |||
| 1567 | int (*lookup) (struct inode *, const struct qstr *, | 1582 | int (*lookup) (struct inode *, const struct qstr *, |
| 1568 | struct nfs_fh *, struct nfs_fattr *, | 1583 | struct nfs_fh *, struct nfs_fattr *, |
| 1569 | struct nfs4_label *); | 1584 | struct nfs4_label *); |
| 1585 | int (*lookupp) (struct inode *, struct nfs_fh *, | ||
| 1586 | struct nfs_fattr *, struct nfs4_label *); | ||
| 1570 | int (*access) (struct inode *, struct nfs_access_entry *); | 1587 | int (*access) (struct inode *, struct nfs_access_entry *); |
| 1571 | int (*readlink)(struct inode *, struct page *, unsigned int, | 1588 | int (*readlink)(struct inode *, struct page *, unsigned int, |
| 1572 | unsigned int); | 1589 | unsigned int); |
| @@ -1585,7 +1602,7 @@ struct nfs_rpc_ops { · 12 unmodified lines | |||
| 1585 | int (*mkdir) (struct inode *, struct dentry *, struct iattr *); | 1602 | int (*mkdir) (struct inode *, struct dentry *, struct iattr *); |
| 1586 | int (*rmdir) (struct inode *, const struct qstr *); | 1603 | int (*rmdir) (struct inode *, const struct qstr *); |
| 1587 | int (*readdir) (struct dentry *, struct rpc_cred *, | 1604 | int (*readdir) (struct dentry *, struct rpc_cred *, |
| 1588 | u64, struct page **, unsigned int, int); | 1605 | u64, struct page **, unsigned int, bool); |
| 1589 | int (*mknod) (struct inode *, struct dentry *, struct iattr *, | 1606 | int (*mknod) (struct inode *, struct dentry *, struct iattr *, |
| 1590 | dev_t); | 1607 | dev_t); |
| 1591 | int (*statfs) (struct nfs_server *, struct nfs_fh *, | 1608 | int (*statfs) (struct nfs_server *, struct nfs_fh *, |
| @@ -1595,7 +1612,7 @@ struct nfs_rpc_ops { · 3 unmodified lines | |||
| 1595 | int (*pathconf) (struct nfs_server *, struct nfs_fh *, | 1612 | int (*pathconf) (struct nfs_server *, struct nfs_fh *, |
| 1596 | struct nfs_pathconf *); | 1613 | struct nfs_pathconf *); |
| 1597 | int (*set_capabilities)(struct nfs_server *, struct nfs_fh *); | 1614 | int (*set_capabilities)(struct nfs_server *, struct nfs_fh *); |
| 1598 | int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, int); | 1615 | int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, bool); |
| 1599 | int (*pgio_rpc_prepare)(struct rpc_task *, | 1616 | int (*pgio_rpc_prepare)(struct rpc_task *, |
| 1600 | struct nfs_pgio_header *); | 1617 | struct nfs_pgio_header *); |
| 1601 | void (*read_setup)(struct nfs_pgio_header *, struct rpc_message *); | 1618 | void (*read_setup)(struct nfs_pgio_header *, struct rpc_message *); |