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 | 479 | NFSPROC4_CLNT_ACCESS, |
| 480 | 480 | NFSPROC4_CLNT_GETATTR, |
| 481 | 481 | NFSPROC4_CLNT_LOOKUP, |
| 482 | + NFSPROC4_CLNT_LOOKUPP, | |
| 482 | 483 | NFSPROC4_CLNT_LOOKUP_ROOT, |
| 483 | 484 | NFSPROC4_CLNT_REMOVE, |
| 484 | 485 | NFSPROC4_CLNT_RENAME, |
| @@ -332,6 +332,7 @@ extern void nfs_zap_caches(struct inode *); · 331 unmodified lines | ||
| 332 | 332 | extern void nfs_invalidate_atime(struct inode *); |
| 333 | 333 | extern struct inode *nfs_fhget(struct super_block *, struct nfs_fh *, |
| 334 | 334 | struct nfs_fattr *, struct nfs4_label *); |
| 335 | +struct inode *nfs_ilookup(struct super_block *sb, struct nfs_fattr *, struct nfs_fh *); | |
| 335 | 336 | extern int nfs_refresh_inode(struct inode *, struct nfs_fattr *); |
| 336 | 337 | extern int nfs_post_op_update_inode(struct inode *inode, struct nfs_fattr *fattr); |
| 337 | 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 | 42 | #define NFS_CS_MIGRATION 2 /* - transparent state migr */ |
| 43 | 43 | #define NFS_CS_INFINITE_SLOTS 3 /* - don't limit TCP slots */ |
| 44 | 44 | #define NFS_CS_NO_RETRANS_TIMEOUT 4 /* - Disable retransmit timeouts */ |
| 45 | +#define NFS_CS_TSM_POSSIBLE 5 /* - Maybe state migration */ | |
| 45 | 46 | struct sockaddr_storage cl_addr; /* server identifier */ |
| 46 | 47 | size_t cl_addrlen; |
| 47 | 48 | char * cl_hostname; /* hostname of server */ |
| @@ -210,6 +211,7 @@ struct nfs_server { · 162 unmodified lines | ||
| 210 | 211 | unsigned long mig_status; |
| 211 | 212 | #define NFS_MIG_IN_TRANSITION (1) |
| 212 | 213 | #define NFS_MIG_FAILED (2) |
| 214 | +#define NFS_MIG_TSM_POSSIBLE (3) | |
| 213 | 215 | |
| 214 | 216 | void (*destroy)(struct nfs_server *); |
| 215 | 217 | |
| @@ -33,6 +33,8 @@ enum { · 32 unmodified lines | ||
| 33 | 33 | PG_UPTODATE, /* page group sync bit in read path */ |
| 34 | 34 | PG_WB_END, /* page group sync bit in write path */ |
| 35 | 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 | 40 | struct nfs_inode; |
| @@ -93,8 +95,8 @@ struct nfs_pageio_descriptor { · 54 unmodified lines | ||
| 93 | 95 | const struct rpc_call_ops *pg_rpc_callops; |
| 94 | 96 | const struct nfs_pgio_completion_ops *pg_completion_ops; |
| 95 | 97 | struct pnfs_layout_segment *pg_lseg; |
| 98 | + struct nfs_io_completion *pg_io_completion; | |
| 96 | 99 | struct nfs_direct_req *pg_dreq; |
| 97 | − void *pg_layout_private; | |
| 98 | 100 | unsigned int pg_bsize; /* default bsize for mirrors */ |
| 99 | 101 | |
| 100 | 102 | u32 pg_mirror_count; |
| @@ -878,7 +878,7 @@ struct nfs3_readdirargs { · 877 unmodified lines | ||
| 878 | 878 | struct nfs_fh * fh; |
| 879 | 879 | __u64 cookie; |
| 880 | 880 | __be32 verf[2]; |
| 881 | − int plus; | |
| 881 | + bool plus; | |
| 882 | 882 | unsigned int count; |
| 883 | 883 | struct page ** pages; |
| 884 | 884 | }; |
| @@ -909,7 +909,7 @@ struct nfs3_linkres { · 24 unmodified lines | ||
| 909 | 909 | struct nfs3_readdirres { |
| 910 | 910 | struct nfs_fattr * dir_attr; |
| 911 | 911 | __be32 * verf; |
| 912 | − int plus; | |
| 912 | + bool plus; | |
| 913 | 913 | }; |
| 914 | 914 | |
| 915 | 915 | struct nfs3_getaclres { |
| @@ -1012,7 +1012,6 @@ struct nfs4_link_res { · 96 unmodified lines | ||
| 1012 | 1012 | struct nfs_fattr * dir_attr; |
| 1013 | 1013 | }; |
| 1014 | 1014 | |
| 1015 | − | |
| 1016 | 1015 | struct nfs4_lookup_arg { |
| 1017 | 1016 | struct nfs4_sequence_args seq_args; |
| 1018 | 1017 | const struct nfs_fh * dir_fh; |
| @@ -1028,6 +1027,20 @@ struct nfs4_lookup_res { · 9 unmodified lines | ||
| 1028 | 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 | 1044 | struct nfs4_lookup_root_arg { |
| 1032 | 1045 | struct nfs4_sequence_args seq_args; |
| 1033 | 1046 | const u32 * bitmask; |
| @@ -1053,7 +1066,7 @@ struct nfs4_readdir_arg { · 19 unmodified lines | ||
| 1053 | 1066 | struct page ** pages; /* zero-copy data */ |
| 1054 | 1067 | unsigned int pgbase; /* zero-copy data */ |
| 1055 | 1068 | const u32 * bitmask; |
| 1056 | − int plus; | |
| 1069 | + bool plus; | |
| 1057 | 1070 | }; |
| 1058 | 1071 | |
| 1059 | 1072 | struct nfs4_readdir_res { |
| @@ -1422,6 +1435,7 @@ enum { · 362 unmodified lines | ||
| 1422 | 1435 | NFS_IOHDR_STAT, |
| 1423 | 1436 | }; |
| 1424 | 1437 | |
| 1438 | +struct nfs_io_completion; | |
| 1425 | 1439 | struct nfs_pgio_header { |
| 1426 | 1440 | struct inode *inode; |
| 1427 | 1441 | struct rpc_cred *cred; |
| @@ -1435,8 +1449,8 @@ struct nfs_pgio_header { · 7 unmodified lines | ||
| 1435 | 1449 | void (*release) (struct nfs_pgio_header *hdr); |
| 1436 | 1450 | const struct nfs_pgio_completion_ops *completion_ops; |
| 1437 | 1451 | const struct nfs_rw_ops *rw_ops; |
| 1452 | + struct nfs_io_completion *io_completion; | |
| 1438 | 1453 | struct nfs_direct_req *dreq; |
| 1439 | − void *layout_private; | |
| 1440 | 1454 | spinlock_t lock; |
| 1441 | 1455 | /* fields protected by lock */ |
| 1442 | 1456 | int pnfs_error; |
| @@ -1533,6 +1547,7 @@ struct nfs_renamedata { · 90 unmodified lines | ||
| 1533 | 1547 | struct nfs_fattr new_fattr; |
| 1534 | 1548 | void (*complete)(struct rpc_task *, struct nfs_renamedata *); |
| 1535 | 1549 | long timeout; |
| 1550 | + bool cancelled; | |
| 1536 | 1551 | }; |
| 1537 | 1552 | |
| 1538 | 1553 | struct nfs_access_entry; |
| @@ -1567,6 +1582,8 @@ struct nfs_rpc_ops { · 28 unmodified lines | ||
| 1567 | 1582 | int (*lookup) (struct inode *, const struct qstr *, |
| 1568 | 1583 | struct nfs_fh *, struct nfs_fattr *, |
| 1569 | 1584 | struct nfs4_label *); |
| 1585 | + int (*lookupp) (struct inode *, struct nfs_fh *, | |
| 1586 | + struct nfs_fattr *, struct nfs4_label *); | |
| 1570 | 1587 | int (*access) (struct inode *, struct nfs_access_entry *); |
| 1571 | 1588 | int (*readlink)(struct inode *, struct page *, unsigned int, |
| 1572 | 1589 | unsigned int); |
| @@ -1585,7 +1602,7 @@ struct nfs_rpc_ops { · 12 unmodified lines | ||
| 1585 | 1602 | int (*mkdir) (struct inode *, struct dentry *, struct iattr *); |
| 1586 | 1603 | int (*rmdir) (struct inode *, const struct qstr *); |
| 1587 | 1604 | int (*readdir) (struct dentry *, struct rpc_cred *, |
| 1588 | − u64, struct page **, unsigned int, int); | |
| 1605 | + u64, struct page **, unsigned int, bool); | |
| 1589 | 1606 | int (*mknod) (struct inode *, struct dentry *, struct iattr *, |
| 1590 | 1607 | dev_t); |
| 1591 | 1608 | int (*statfs) (struct nfs_server *, struct nfs_fh *, |
| @@ -1595,7 +1612,7 @@ struct nfs_rpc_ops { · 3 unmodified lines | ||
| 1595 | 1612 | int (*pathconf) (struct nfs_server *, struct nfs_fh *, |
| 1596 | 1613 | struct nfs_pathconf *); |
| 1597 | 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 | 1616 | int (*pgio_rpc_prepare)(struct rpc_task *, |
| 1600 | 1617 | struct nfs_pgio_header *); |
| 1601 | 1618 | void (*read_setup)(struct nfs_pgio_header *, struct rpc_message *); |