diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/nfs4.h | 13 | ||||
-rw-r--r-- | include/linux/nfs_fs.h | 31 | ||||
-rw-r--r-- | include/linux/nfs_fs_sb.h | 17 | ||||
-rw-r--r-- | include/linux/nfs_page.h | 20 | ||||
-rw-r--r-- | include/linux/nfs_xdr.h | 210 |
5 files changed, 205 insertions, 86 deletions
diff --git a/include/linux/nfs4.h b/include/linux/nfs4.h index 0987146b0637..af2d2fa30eee 100644 --- a/include/linux/nfs4.h +++ b/include/linux/nfs4.h | |||
@@ -69,6 +69,10 @@ | |||
69 | #define NFS4_CDFC4_FORE_OR_BOTH 0x3 | 69 | #define NFS4_CDFC4_FORE_OR_BOTH 0x3 |
70 | #define NFS4_CDFC4_BACK_OR_BOTH 0x7 | 70 | #define NFS4_CDFC4_BACK_OR_BOTH 0x7 |
71 | 71 | ||
72 | #define NFS4_CDFS4_FORE 0x1 | ||
73 | #define NFS4_CDFS4_BACK 0x2 | ||
74 | #define NFS4_CDFS4_BOTH 0x3 | ||
75 | |||
72 | #define NFS4_SET_TO_SERVER_TIME 0 | 76 | #define NFS4_SET_TO_SERVER_TIME 0 |
73 | #define NFS4_SET_TO_CLIENT_TIME 1 | 77 | #define NFS4_SET_TO_CLIENT_TIME 1 |
74 | 78 | ||
@@ -526,6 +530,13 @@ enum lock_type4 { | |||
526 | #define FATTR4_WORD1_MOUNTED_ON_FILEID (1UL << 23) | 530 | #define FATTR4_WORD1_MOUNTED_ON_FILEID (1UL << 23) |
527 | #define FATTR4_WORD1_FS_LAYOUT_TYPES (1UL << 30) | 531 | #define FATTR4_WORD1_FS_LAYOUT_TYPES (1UL << 30) |
528 | #define FATTR4_WORD2_LAYOUT_BLKSIZE (1UL << 1) | 532 | #define FATTR4_WORD2_LAYOUT_BLKSIZE (1UL << 1) |
533 | #define FATTR4_WORD2_MDSTHRESHOLD (1UL << 4) | ||
534 | |||
535 | /* MDS threshold bitmap bits */ | ||
536 | #define THRESHOLD_RD (1UL << 0) | ||
537 | #define THRESHOLD_WR (1UL << 1) | ||
538 | #define THRESHOLD_RD_IO (1UL << 2) | ||
539 | #define THRESHOLD_WR_IO (1UL << 3) | ||
529 | 540 | ||
530 | #define NFSPROC4_NULL 0 | 541 | #define NFSPROC4_NULL 0 |
531 | #define NFSPROC4_COMPOUND 1 | 542 | #define NFSPROC4_COMPOUND 1 |
@@ -596,6 +607,8 @@ enum { | |||
596 | NFSPROC4_CLNT_TEST_STATEID, | 607 | NFSPROC4_CLNT_TEST_STATEID, |
597 | NFSPROC4_CLNT_FREE_STATEID, | 608 | NFSPROC4_CLNT_FREE_STATEID, |
598 | NFSPROC4_CLNT_GETDEVICELIST, | 609 | NFSPROC4_CLNT_GETDEVICELIST, |
610 | NFSPROC4_CLNT_BIND_CONN_TO_SESSION, | ||
611 | NFSPROC4_CLNT_DESTROY_CLIENTID, | ||
599 | }; | 612 | }; |
600 | 613 | ||
601 | /* nfs41 types */ | 614 | /* nfs41 types */ |
diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h index 52a1bdb4ee2b..b23cfc120edb 100644 --- a/include/linux/nfs_fs.h +++ b/include/linux/nfs_fs.h | |||
@@ -102,6 +102,7 @@ struct nfs_open_context { | |||
102 | int error; | 102 | int error; |
103 | 103 | ||
104 | struct list_head list; | 104 | struct list_head list; |
105 | struct nfs4_threshold *mdsthreshold; | ||
105 | }; | 106 | }; |
106 | 107 | ||
107 | struct nfs_open_dir_context { | 108 | struct nfs_open_dir_context { |
@@ -179,8 +180,7 @@ struct nfs_inode { | |||
179 | __be32 cookieverf[2]; | 180 | __be32 cookieverf[2]; |
180 | 181 | ||
181 | unsigned long npages; | 182 | unsigned long npages; |
182 | unsigned long ncommit; | 183 | struct nfs_mds_commit_info commit_info; |
183 | struct list_head commit_list; | ||
184 | 184 | ||
185 | /* Open contexts for shared mmap writes */ | 185 | /* Open contexts for shared mmap writes */ |
186 | struct list_head open_files; | 186 | struct list_head open_files; |
@@ -201,8 +201,10 @@ struct nfs_inode { | |||
201 | 201 | ||
202 | /* pNFS layout information */ | 202 | /* pNFS layout information */ |
203 | struct pnfs_layout_hdr *layout; | 203 | struct pnfs_layout_hdr *layout; |
204 | atomic_t commits_outstanding; | ||
205 | #endif /* CONFIG_NFS_V4*/ | 204 | #endif /* CONFIG_NFS_V4*/ |
205 | /* how many bytes have been written/read and how many bytes queued up */ | ||
206 | __u64 write_io; | ||
207 | __u64 read_io; | ||
206 | #ifdef CONFIG_NFS_FSCACHE | 208 | #ifdef CONFIG_NFS_FSCACHE |
207 | struct fscache_cookie *fscache; | 209 | struct fscache_cookie *fscache; |
208 | #endif | 210 | #endif |
@@ -230,7 +232,6 @@ struct nfs_inode { | |||
230 | #define NFS_INO_FSCACHE (5) /* inode can be cached by FS-Cache */ | 232 | #define NFS_INO_FSCACHE (5) /* inode can be cached by FS-Cache */ |
231 | #define NFS_INO_FSCACHE_LOCK (6) /* FS-Cache cookie management lock */ | 233 | #define NFS_INO_FSCACHE_LOCK (6) /* FS-Cache cookie management lock */ |
232 | #define NFS_INO_COMMIT (7) /* inode is committing unstable writes */ | 234 | #define NFS_INO_COMMIT (7) /* inode is committing unstable writes */ |
233 | #define NFS_INO_PNFS_COMMIT (8) /* use pnfs code for commit */ | ||
234 | #define NFS_INO_LAYOUTCOMMIT (9) /* layoutcommit required */ | 235 | #define NFS_INO_LAYOUTCOMMIT (9) /* layoutcommit required */ |
235 | #define NFS_INO_LAYOUTCOMMITTING (10) /* layoutcommit inflight */ | 236 | #define NFS_INO_LAYOUTCOMMITTING (10) /* layoutcommit inflight */ |
236 | 237 | ||
@@ -317,11 +318,6 @@ static inline int nfs_server_capable(struct inode *inode, int cap) | |||
317 | return NFS_SERVER(inode)->caps & cap; | 318 | return NFS_SERVER(inode)->caps & cap; |
318 | } | 319 | } |
319 | 320 | ||
320 | static inline int NFS_USE_READDIRPLUS(struct inode *inode) | ||
321 | { | ||
322 | return test_bit(NFS_INO_ADVISE_RDPLUS, &NFS_I(inode)->flags); | ||
323 | } | ||
324 | |||
325 | static inline void nfs_set_verifier(struct dentry * dentry, unsigned long verf) | 321 | static inline void nfs_set_verifier(struct dentry * dentry, unsigned long verf) |
326 | { | 322 | { |
327 | dentry->d_time = verf; | 323 | dentry->d_time = verf; |
@@ -552,8 +548,8 @@ extern int nfs_wb_page(struct inode *inode, struct page* page); | |||
552 | extern int nfs_wb_page_cancel(struct inode *inode, struct page* page); | 548 | extern int nfs_wb_page_cancel(struct inode *inode, struct page* page); |
553 | #if defined(CONFIG_NFS_V3) || defined(CONFIG_NFS_V4) | 549 | #if defined(CONFIG_NFS_V3) || defined(CONFIG_NFS_V4) |
554 | extern int nfs_commit_inode(struct inode *, int); | 550 | extern int nfs_commit_inode(struct inode *, int); |
555 | extern struct nfs_write_data *nfs_commitdata_alloc(void); | 551 | extern struct nfs_commit_data *nfs_commitdata_alloc(void); |
556 | extern void nfs_commit_free(struct nfs_write_data *wdata); | 552 | extern void nfs_commit_free(struct nfs_commit_data *data); |
557 | #else | 553 | #else |
558 | static inline int | 554 | static inline int |
559 | nfs_commit_inode(struct inode *inode, int how) | 555 | nfs_commit_inode(struct inode *inode, int how) |
@@ -569,12 +565,6 @@ nfs_have_writebacks(struct inode *inode) | |||
569 | } | 565 | } |
570 | 566 | ||
571 | /* | 567 | /* |
572 | * Allocate nfs_write_data structures | ||
573 | */ | ||
574 | extern struct nfs_write_data *nfs_writedata_alloc(unsigned int npages); | ||
575 | extern void nfs_writedata_free(struct nfs_write_data *); | ||
576 | |||
577 | /* | ||
578 | * linux/fs/nfs/read.c | 568 | * linux/fs/nfs/read.c |
579 | */ | 569 | */ |
580 | extern int nfs_readpage(struct file *, struct page *); | 570 | extern int nfs_readpage(struct file *, struct page *); |
@@ -585,12 +575,6 @@ extern int nfs_readpage_async(struct nfs_open_context *, struct inode *, | |||
585 | struct page *); | 575 | struct page *); |
586 | 576 | ||
587 | /* | 577 | /* |
588 | * Allocate nfs_read_data structures | ||
589 | */ | ||
590 | extern struct nfs_read_data *nfs_readdata_alloc(unsigned int npages); | ||
591 | extern void nfs_readdata_free(struct nfs_read_data *); | ||
592 | |||
593 | /* | ||
594 | * linux/fs/nfs3proc.c | 578 | * linux/fs/nfs3proc.c |
595 | */ | 579 | */ |
596 | #ifdef CONFIG_NFS_V3_ACL | 580 | #ifdef CONFIG_NFS_V3_ACL |
@@ -654,6 +638,7 @@ nfs_fileid_to_ino_t(u64 fileid) | |||
654 | #define NFSDBG_FSCACHE 0x0800 | 638 | #define NFSDBG_FSCACHE 0x0800 |
655 | #define NFSDBG_PNFS 0x1000 | 639 | #define NFSDBG_PNFS 0x1000 |
656 | #define NFSDBG_PNFS_LD 0x2000 | 640 | #define NFSDBG_PNFS_LD 0x2000 |
641 | #define NFSDBG_STATE 0x4000 | ||
657 | #define NFSDBG_ALL 0xFFFF | 642 | #define NFSDBG_ALL 0xFFFF |
658 | 643 | ||
659 | #ifdef __KERNEL__ | 644 | #ifdef __KERNEL__ |
diff --git a/include/linux/nfs_fs_sb.h b/include/linux/nfs_fs_sb.h index 7073fc74481c..fbb78fb09bd2 100644 --- a/include/linux/nfs_fs_sb.h +++ b/include/linux/nfs_fs_sb.h | |||
@@ -17,7 +17,7 @@ struct nfs4_sequence_args; | |||
17 | struct nfs4_sequence_res; | 17 | struct nfs4_sequence_res; |
18 | struct nfs_server; | 18 | struct nfs_server; |
19 | struct nfs4_minor_version_ops; | 19 | struct nfs4_minor_version_ops; |
20 | struct server_scope; | 20 | struct nfs41_server_scope; |
21 | struct nfs41_impl_id; | 21 | struct nfs41_impl_id; |
22 | 22 | ||
23 | /* | 23 | /* |
@@ -35,6 +35,9 @@ struct nfs_client { | |||
35 | #define NFS_CS_RENEWD 3 /* - renewd started */ | 35 | #define NFS_CS_RENEWD 3 /* - renewd started */ |
36 | #define NFS_CS_STOP_RENEW 4 /* no more state to renew */ | 36 | #define NFS_CS_STOP_RENEW 4 /* no more state to renew */ |
37 | #define NFS_CS_CHECK_LEASE_TIME 5 /* need to check lease time */ | 37 | #define NFS_CS_CHECK_LEASE_TIME 5 /* need to check lease time */ |
38 | unsigned long cl_flags; /* behavior switches */ | ||
39 | #define NFS_CS_NORESVPORT 0 /* - use ephemeral src port */ | ||
40 | #define NFS_CS_DISCRTRY 1 /* - disconnect on RPC retry */ | ||
38 | struct sockaddr_storage cl_addr; /* server identifier */ | 41 | struct sockaddr_storage cl_addr; /* server identifier */ |
39 | size_t cl_addrlen; | 42 | size_t cl_addrlen; |
40 | char * cl_hostname; /* hostname of server */ | 43 | char * cl_hostname; /* hostname of server */ |
@@ -61,9 +64,6 @@ struct nfs_client { | |||
61 | 64 | ||
62 | struct rpc_wait_queue cl_rpcwaitq; | 65 | struct rpc_wait_queue cl_rpcwaitq; |
63 | 66 | ||
64 | /* used for the setclientid verifier */ | ||
65 | struct timespec cl_boot_time; | ||
66 | |||
67 | /* idmapper */ | 67 | /* idmapper */ |
68 | struct idmap * cl_idmap; | 68 | struct idmap * cl_idmap; |
69 | 69 | ||
@@ -79,16 +79,17 @@ struct nfs_client { | |||
79 | u32 cl_seqid; | 79 | u32 cl_seqid; |
80 | /* The flags used for obtaining the clientid during EXCHANGE_ID */ | 80 | /* The flags used for obtaining the clientid during EXCHANGE_ID */ |
81 | u32 cl_exchange_flags; | 81 | u32 cl_exchange_flags; |
82 | struct nfs4_session *cl_session; /* sharred session */ | 82 | struct nfs4_session *cl_session; /* shared session */ |
83 | struct nfs41_server_owner *cl_serverowner; | ||
84 | struct nfs41_server_scope *cl_serverscope; | ||
85 | struct nfs41_impl_id *cl_implid; | ||
83 | #endif /* CONFIG_NFS_V4 */ | 86 | #endif /* CONFIG_NFS_V4 */ |
84 | 87 | ||
85 | #ifdef CONFIG_NFS_FSCACHE | 88 | #ifdef CONFIG_NFS_FSCACHE |
86 | struct fscache_cookie *fscache; /* client index cache cookie */ | 89 | struct fscache_cookie *fscache; /* client index cache cookie */ |
87 | #endif | 90 | #endif |
88 | 91 | ||
89 | struct server_scope *server_scope; /* from exchange_id */ | 92 | struct net *cl_net; |
90 | struct nfs41_impl_id *impl_id; /* from exchange_id */ | ||
91 | struct net *net; | ||
92 | }; | 93 | }; |
93 | 94 | ||
94 | /* | 95 | /* |
diff --git a/include/linux/nfs_page.h b/include/linux/nfs_page.h index eac30d6bec17..88d166b555e8 100644 --- a/include/linux/nfs_page.h +++ b/include/linux/nfs_page.h | |||
@@ -27,7 +27,6 @@ enum { | |||
27 | PG_CLEAN, | 27 | PG_CLEAN, |
28 | PG_NEED_COMMIT, | 28 | PG_NEED_COMMIT, |
29 | PG_NEED_RESCHED, | 29 | PG_NEED_RESCHED, |
30 | PG_PARTIAL_READ_FAILED, | ||
31 | PG_COMMIT_TO_DS, | 30 | PG_COMMIT_TO_DS, |
32 | }; | 31 | }; |
33 | 32 | ||
@@ -37,7 +36,6 @@ struct nfs_page { | |||
37 | struct page *wb_page; /* page to read in/write out */ | 36 | struct page *wb_page; /* page to read in/write out */ |
38 | struct nfs_open_context *wb_context; /* File state context info */ | 37 | struct nfs_open_context *wb_context; /* File state context info */ |
39 | struct nfs_lock_context *wb_lock_context; /* lock context info */ | 38 | struct nfs_lock_context *wb_lock_context; /* lock context info */ |
40 | atomic_t wb_complete; /* i/os we're waiting for */ | ||
41 | pgoff_t wb_index; /* Offset >> PAGE_CACHE_SHIFT */ | 39 | pgoff_t wb_index; /* Offset >> PAGE_CACHE_SHIFT */ |
42 | unsigned int wb_offset, /* Offset & ~PAGE_CACHE_MASK */ | 40 | unsigned int wb_offset, /* Offset & ~PAGE_CACHE_MASK */ |
43 | wb_pgbase, /* Start of page data */ | 41 | wb_pgbase, /* Start of page data */ |
@@ -68,7 +66,9 @@ struct nfs_pageio_descriptor { | |||
68 | int pg_ioflags; | 66 | int pg_ioflags; |
69 | int pg_error; | 67 | int pg_error; |
70 | const struct rpc_call_ops *pg_rpc_callops; | 68 | const struct rpc_call_ops *pg_rpc_callops; |
69 | const struct nfs_pgio_completion_ops *pg_completion_ops; | ||
71 | struct pnfs_layout_segment *pg_lseg; | 70 | struct pnfs_layout_segment *pg_lseg; |
71 | struct nfs_direct_req *pg_dreq; | ||
72 | }; | 72 | }; |
73 | 73 | ||
74 | #define NFS_WBACK_BUSY(req) (test_bit(PG_BUSY,&(req)->wb_flags)) | 74 | #define NFS_WBACK_BUSY(req) (test_bit(PG_BUSY,&(req)->wb_flags)) |
@@ -84,6 +84,7 @@ extern void nfs_release_request(struct nfs_page *req); | |||
84 | extern void nfs_pageio_init(struct nfs_pageio_descriptor *desc, | 84 | extern void nfs_pageio_init(struct nfs_pageio_descriptor *desc, |
85 | struct inode *inode, | 85 | struct inode *inode, |
86 | const struct nfs_pageio_ops *pg_ops, | 86 | const struct nfs_pageio_ops *pg_ops, |
87 | const struct nfs_pgio_completion_ops *compl_ops, | ||
87 | size_t bsize, | 88 | size_t bsize, |
88 | int how); | 89 | int how); |
89 | extern int nfs_pageio_add_request(struct nfs_pageio_descriptor *, | 90 | extern int nfs_pageio_add_request(struct nfs_pageio_descriptor *, |
@@ -95,26 +96,17 @@ extern bool nfs_generic_pg_test(struct nfs_pageio_descriptor *desc, | |||
95 | struct nfs_page *req); | 96 | struct nfs_page *req); |
96 | extern int nfs_wait_on_request(struct nfs_page *); | 97 | extern int nfs_wait_on_request(struct nfs_page *); |
97 | extern void nfs_unlock_request(struct nfs_page *req); | 98 | extern void nfs_unlock_request(struct nfs_page *req); |
99 | extern void nfs_unlock_and_release_request(struct nfs_page *req); | ||
98 | 100 | ||
99 | /* | 101 | /* |
100 | * Lock the page of an asynchronous request without getting a new reference | 102 | * Lock the page of an asynchronous request |
101 | */ | 103 | */ |
102 | static inline int | 104 | static inline int |
103 | nfs_lock_request_dontget(struct nfs_page *req) | ||
104 | { | ||
105 | return !test_and_set_bit(PG_BUSY, &req->wb_flags); | ||
106 | } | ||
107 | |||
108 | static inline int | ||
109 | nfs_lock_request(struct nfs_page *req) | 105 | nfs_lock_request(struct nfs_page *req) |
110 | { | 106 | { |
111 | if (test_and_set_bit(PG_BUSY, &req->wb_flags)) | 107 | return !test_and_set_bit(PG_BUSY, &req->wb_flags); |
112 | return 0; | ||
113 | kref_get(&req->wb_kref); | ||
114 | return 1; | ||
115 | } | 108 | } |
116 | 109 | ||
117 | |||
118 | /** | 110 | /** |
119 | * nfs_list_add_request - Insert a request into a list | 111 | * nfs_list_add_request - Insert a request into a list |
120 | * @req: request | 112 | * @req: request |
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h index 7ba3551a0414..d1a7bf51c326 100644 --- a/include/linux/nfs_xdr.h +++ b/include/linux/nfs_xdr.h | |||
@@ -35,6 +35,15 @@ static inline int nfs_fsid_equal(const struct nfs_fsid *a, const struct nfs_fsid | |||
35 | return a->major == b->major && a->minor == b->minor; | 35 | return a->major == b->major && a->minor == b->minor; |
36 | } | 36 | } |
37 | 37 | ||
38 | struct nfs4_threshold { | ||
39 | __u32 bm; | ||
40 | __u32 l_type; | ||
41 | __u64 rd_sz; | ||
42 | __u64 wr_sz; | ||
43 | __u64 rd_io_sz; | ||
44 | __u64 wr_io_sz; | ||
45 | }; | ||
46 | |||
38 | struct nfs_fattr { | 47 | struct nfs_fattr { |
39 | unsigned int valid; /* which fields are valid */ | 48 | unsigned int valid; /* which fields are valid */ |
40 | umode_t mode; | 49 | umode_t mode; |
@@ -67,6 +76,7 @@ struct nfs_fattr { | |||
67 | unsigned long gencount; | 76 | unsigned long gencount; |
68 | struct nfs4_string *owner_name; | 77 | struct nfs4_string *owner_name; |
69 | struct nfs4_string *group_name; | 78 | struct nfs4_string *group_name; |
79 | struct nfs4_threshold *mdsthreshold; /* pNFS threshold hints */ | ||
70 | }; | 80 | }; |
71 | 81 | ||
72 | #define NFS_ATTR_FATTR_TYPE (1U << 0) | 82 | #define NFS_ATTR_FATTR_TYPE (1U << 0) |
@@ -106,14 +116,14 @@ struct nfs_fattr { | |||
106 | | NFS_ATTR_FATTR_FILEID \ | 116 | | NFS_ATTR_FATTR_FILEID \ |
107 | | NFS_ATTR_FATTR_ATIME \ | 117 | | NFS_ATTR_FATTR_ATIME \ |
108 | | NFS_ATTR_FATTR_MTIME \ | 118 | | NFS_ATTR_FATTR_MTIME \ |
109 | | NFS_ATTR_FATTR_CTIME) | 119 | | NFS_ATTR_FATTR_CTIME \ |
120 | | NFS_ATTR_FATTR_CHANGE) | ||
110 | #define NFS_ATTR_FATTR_V2 (NFS_ATTR_FATTR \ | 121 | #define NFS_ATTR_FATTR_V2 (NFS_ATTR_FATTR \ |
111 | | NFS_ATTR_FATTR_BLOCKS_USED) | 122 | | NFS_ATTR_FATTR_BLOCKS_USED) |
112 | #define NFS_ATTR_FATTR_V3 (NFS_ATTR_FATTR \ | 123 | #define NFS_ATTR_FATTR_V3 (NFS_ATTR_FATTR \ |
113 | | NFS_ATTR_FATTR_SPACE_USED) | 124 | | NFS_ATTR_FATTR_SPACE_USED) |
114 | #define NFS_ATTR_FATTR_V4 (NFS_ATTR_FATTR \ | 125 | #define NFS_ATTR_FATTR_V4 (NFS_ATTR_FATTR \ |
115 | | NFS_ATTR_FATTR_SPACE_USED \ | 126 | | NFS_ATTR_FATTR_SPACE_USED) |
116 | | NFS_ATTR_FATTR_CHANGE) | ||
117 | 127 | ||
118 | /* | 128 | /* |
119 | * Info on the file system | 129 | * Info on the file system |
@@ -338,7 +348,6 @@ struct nfs_openargs { | |||
338 | const struct qstr * name; | 348 | const struct qstr * name; |
339 | const struct nfs_server *server; /* Needed for ID mapping */ | 349 | const struct nfs_server *server; /* Needed for ID mapping */ |
340 | const u32 * bitmask; | 350 | const u32 * bitmask; |
341 | const u32 * dir_bitmask; | ||
342 | __u32 claim; | 351 | __u32 claim; |
343 | struct nfs4_sequence_args seq_args; | 352 | struct nfs4_sequence_args seq_args; |
344 | }; | 353 | }; |
@@ -349,7 +358,6 @@ struct nfs_openres { | |||
349 | struct nfs4_change_info cinfo; | 358 | struct nfs4_change_info cinfo; |
350 | __u32 rflags; | 359 | __u32 rflags; |
351 | struct nfs_fattr * f_attr; | 360 | struct nfs_fattr * f_attr; |
352 | struct nfs_fattr * dir_attr; | ||
353 | struct nfs_seqid * seqid; | 361 | struct nfs_seqid * seqid; |
354 | const struct nfs_server *server; | 362 | const struct nfs_server *server; |
355 | fmode_t delegation_type; | 363 | fmode_t delegation_type; |
@@ -519,12 +527,29 @@ struct nfs_writeres { | |||
519 | }; | 527 | }; |
520 | 528 | ||
521 | /* | 529 | /* |
530 | * Arguments to the commit call. | ||
531 | */ | ||
532 | struct nfs_commitargs { | ||
533 | struct nfs_fh *fh; | ||
534 | __u64 offset; | ||
535 | __u32 count; | ||
536 | const u32 *bitmask; | ||
537 | struct nfs4_sequence_args seq_args; | ||
538 | }; | ||
539 | |||
540 | struct nfs_commitres { | ||
541 | struct nfs_fattr *fattr; | ||
542 | struct nfs_writeverf *verf; | ||
543 | const struct nfs_server *server; | ||
544 | struct nfs4_sequence_res seq_res; | ||
545 | }; | ||
546 | |||
547 | /* | ||
522 | * Common arguments to the unlink call | 548 | * Common arguments to the unlink call |
523 | */ | 549 | */ |
524 | struct nfs_removeargs { | 550 | struct nfs_removeargs { |
525 | const struct nfs_fh *fh; | 551 | const struct nfs_fh *fh; |
526 | struct qstr name; | 552 | struct qstr name; |
527 | const u32 * bitmask; | ||
528 | struct nfs4_sequence_args seq_args; | 553 | struct nfs4_sequence_args seq_args; |
529 | }; | 554 | }; |
530 | 555 | ||
@@ -543,7 +568,6 @@ struct nfs_renameargs { | |||
543 | const struct nfs_fh *new_dir; | 568 | const struct nfs_fh *new_dir; |
544 | const struct qstr *old_name; | 569 | const struct qstr *old_name; |
545 | const struct qstr *new_name; | 570 | const struct qstr *new_name; |
546 | const u32 *bitmask; | ||
547 | struct nfs4_sequence_args seq_args; | 571 | struct nfs4_sequence_args seq_args; |
548 | }; | 572 | }; |
549 | 573 | ||
@@ -839,7 +863,6 @@ struct nfs4_create_res { | |||
839 | struct nfs_fh * fh; | 863 | struct nfs_fh * fh; |
840 | struct nfs_fattr * fattr; | 864 | struct nfs_fattr * fattr; |
841 | struct nfs4_change_info dir_cinfo; | 865 | struct nfs4_change_info dir_cinfo; |
842 | struct nfs_fattr * dir_fattr; | ||
843 | struct nfs4_sequence_res seq_res; | 866 | struct nfs4_sequence_res seq_res; |
844 | }; | 867 | }; |
845 | 868 | ||
@@ -1061,6 +1084,21 @@ struct nfstime4 { | |||
1061 | }; | 1084 | }; |
1062 | 1085 | ||
1063 | #ifdef CONFIG_NFS_V4_1 | 1086 | #ifdef CONFIG_NFS_V4_1 |
1087 | |||
1088 | struct pnfs_commit_bucket { | ||
1089 | struct list_head written; | ||
1090 | struct list_head committing; | ||
1091 | struct pnfs_layout_segment *wlseg; | ||
1092 | struct pnfs_layout_segment *clseg; | ||
1093 | }; | ||
1094 | |||
1095 | struct pnfs_ds_commit_info { | ||
1096 | int nwritten; | ||
1097 | int ncommitting; | ||
1098 | int nbuckets; | ||
1099 | struct pnfs_commit_bucket *buckets; | ||
1100 | }; | ||
1101 | |||
1064 | #define NFS4_EXCHANGE_ID_LEN (48) | 1102 | #define NFS4_EXCHANGE_ID_LEN (48) |
1065 | struct nfs41_exchange_id_args { | 1103 | struct nfs41_exchange_id_args { |
1066 | struct nfs_client *client; | 1104 | struct nfs_client *client; |
@@ -1070,13 +1108,13 @@ struct nfs41_exchange_id_args { | |||
1070 | u32 flags; | 1108 | u32 flags; |
1071 | }; | 1109 | }; |
1072 | 1110 | ||
1073 | struct server_owner { | 1111 | struct nfs41_server_owner { |
1074 | uint64_t minor_id; | 1112 | uint64_t minor_id; |
1075 | uint32_t major_id_sz; | 1113 | uint32_t major_id_sz; |
1076 | char major_id[NFS4_OPAQUE_LIMIT]; | 1114 | char major_id[NFS4_OPAQUE_LIMIT]; |
1077 | }; | 1115 | }; |
1078 | 1116 | ||
1079 | struct server_scope { | 1117 | struct nfs41_server_scope { |
1080 | uint32_t server_scope_sz; | 1118 | uint32_t server_scope_sz; |
1081 | char server_scope[NFS4_OPAQUE_LIMIT]; | 1119 | char server_scope[NFS4_OPAQUE_LIMIT]; |
1082 | }; | 1120 | }; |
@@ -1087,10 +1125,18 @@ struct nfs41_impl_id { | |||
1087 | struct nfstime4 date; | 1125 | struct nfstime4 date; |
1088 | }; | 1126 | }; |
1089 | 1127 | ||
1128 | struct nfs41_bind_conn_to_session_res { | ||
1129 | struct nfs4_session *session; | ||
1130 | u32 dir; | ||
1131 | bool use_conn_in_rdma_mode; | ||
1132 | }; | ||
1133 | |||
1090 | struct nfs41_exchange_id_res { | 1134 | struct nfs41_exchange_id_res { |
1091 | struct nfs_client *client; | 1135 | u64 clientid; |
1136 | u32 seqid; | ||
1092 | u32 flags; | 1137 | u32 flags; |
1093 | struct server_scope *server_scope; | 1138 | struct nfs41_server_owner *server_owner; |
1139 | struct nfs41_server_scope *server_scope; | ||
1094 | struct nfs41_impl_id *impl_id; | 1140 | struct nfs41_impl_id *impl_id; |
1095 | }; | 1141 | }; |
1096 | 1142 | ||
@@ -1143,35 +1189,114 @@ struct nfs41_free_stateid_res { | |||
1143 | struct nfs4_sequence_res seq_res; | 1189 | struct nfs4_sequence_res seq_res; |
1144 | }; | 1190 | }; |
1145 | 1191 | ||
1192 | #else | ||
1193 | |||
1194 | struct pnfs_ds_commit_info { | ||
1195 | }; | ||
1196 | |||
1146 | #endif /* CONFIG_NFS_V4_1 */ | 1197 | #endif /* CONFIG_NFS_V4_1 */ |
1147 | 1198 | ||
1148 | struct nfs_page; | 1199 | struct nfs_page; |
1149 | 1200 | ||
1150 | #define NFS_PAGEVEC_SIZE (8U) | 1201 | #define NFS_PAGEVEC_SIZE (8U) |
1151 | 1202 | ||
1203 | struct nfs_page_array { | ||
1204 | struct page **pagevec; | ||
1205 | unsigned int npages; /* Max length of pagevec */ | ||
1206 | struct page *page_array[NFS_PAGEVEC_SIZE]; | ||
1207 | }; | ||
1208 | |||
1152 | struct nfs_read_data { | 1209 | struct nfs_read_data { |
1210 | struct nfs_pgio_header *header; | ||
1211 | struct list_head list; | ||
1153 | struct rpc_task task; | 1212 | struct rpc_task task; |
1154 | struct inode *inode; | ||
1155 | struct rpc_cred *cred; | ||
1156 | struct nfs_fattr fattr; /* fattr storage */ | 1213 | struct nfs_fattr fattr; /* fattr storage */ |
1157 | struct list_head pages; /* Coalesced read requests */ | ||
1158 | struct list_head list; /* lists of struct nfs_read_data */ | ||
1159 | struct nfs_page *req; /* multi ops per nfs_page */ | ||
1160 | struct page **pagevec; | ||
1161 | unsigned int npages; /* Max length of pagevec */ | ||
1162 | struct nfs_readargs args; | 1214 | struct nfs_readargs args; |
1163 | struct nfs_readres res; | 1215 | struct nfs_readres res; |
1164 | unsigned long timestamp; /* For lease renewal */ | 1216 | unsigned long timestamp; /* For lease renewal */ |
1165 | struct pnfs_layout_segment *lseg; | ||
1166 | struct nfs_client *ds_clp; /* pNFS data server */ | ||
1167 | const struct rpc_call_ops *mds_ops; | ||
1168 | int (*read_done_cb) (struct rpc_task *task, struct nfs_read_data *data); | 1217 | int (*read_done_cb) (struct rpc_task *task, struct nfs_read_data *data); |
1169 | __u64 mds_offset; | 1218 | __u64 mds_offset; |
1219 | struct nfs_page_array pages; | ||
1220 | struct nfs_client *ds_clp; /* pNFS data server */ | ||
1221 | }; | ||
1222 | |||
1223 | /* used as flag bits in nfs_pgio_header */ | ||
1224 | enum { | ||
1225 | NFS_IOHDR_ERROR = 0, | ||
1226 | NFS_IOHDR_EOF, | ||
1227 | NFS_IOHDR_REDO, | ||
1228 | NFS_IOHDR_NEED_COMMIT, | ||
1229 | NFS_IOHDR_NEED_RESCHED, | ||
1230 | }; | ||
1231 | |||
1232 | struct nfs_pgio_header { | ||
1233 | struct inode *inode; | ||
1234 | struct rpc_cred *cred; | ||
1235 | struct list_head pages; | ||
1236 | struct list_head rpc_list; | ||
1237 | atomic_t refcnt; | ||
1238 | struct nfs_page *req; | ||
1239 | struct pnfs_layout_segment *lseg; | ||
1240 | loff_t io_start; | ||
1241 | const struct rpc_call_ops *mds_ops; | ||
1242 | void (*release) (struct nfs_pgio_header *hdr); | ||
1243 | const struct nfs_pgio_completion_ops *completion_ops; | ||
1244 | struct nfs_direct_req *dreq; | ||
1245 | spinlock_t lock; | ||
1246 | /* fields protected by lock */ | ||
1170 | int pnfs_error; | 1247 | int pnfs_error; |
1171 | struct page *page_array[NFS_PAGEVEC_SIZE]; | 1248 | int error; /* merge with pnfs_error */ |
1249 | unsigned long good_bytes; /* boundary of good data */ | ||
1250 | unsigned long flags; | ||
1251 | }; | ||
1252 | |||
1253 | struct nfs_read_header { | ||
1254 | struct nfs_pgio_header header; | ||
1255 | struct nfs_read_data rpc_data; | ||
1172 | }; | 1256 | }; |
1173 | 1257 | ||
1174 | struct nfs_write_data { | 1258 | struct nfs_write_data { |
1259 | struct nfs_pgio_header *header; | ||
1260 | struct list_head list; | ||
1261 | struct rpc_task task; | ||
1262 | struct nfs_fattr fattr; | ||
1263 | struct nfs_writeverf verf; | ||
1264 | struct nfs_writeargs args; /* argument struct */ | ||
1265 | struct nfs_writeres res; /* result struct */ | ||
1266 | unsigned long timestamp; /* For lease renewal */ | ||
1267 | int (*write_done_cb) (struct rpc_task *task, struct nfs_write_data *data); | ||
1268 | __u64 mds_offset; /* Filelayout dense stripe */ | ||
1269 | struct nfs_page_array pages; | ||
1270 | struct nfs_client *ds_clp; /* pNFS data server */ | ||
1271 | }; | ||
1272 | |||
1273 | struct nfs_write_header { | ||
1274 | struct nfs_pgio_header header; | ||
1275 | struct nfs_write_data rpc_data; | ||
1276 | }; | ||
1277 | |||
1278 | struct nfs_mds_commit_info { | ||
1279 | atomic_t rpcs_out; | ||
1280 | unsigned long ncommit; | ||
1281 | struct list_head list; | ||
1282 | }; | ||
1283 | |||
1284 | struct nfs_commit_data; | ||
1285 | struct nfs_inode; | ||
1286 | struct nfs_commit_completion_ops { | ||
1287 | void (*error_cleanup) (struct nfs_inode *nfsi); | ||
1288 | void (*completion) (struct nfs_commit_data *data); | ||
1289 | }; | ||
1290 | |||
1291 | struct nfs_commit_info { | ||
1292 | spinlock_t *lock; | ||
1293 | struct nfs_mds_commit_info *mds; | ||
1294 | struct pnfs_ds_commit_info *ds; | ||
1295 | struct nfs_direct_req *dreq; /* O_DIRECT request */ | ||
1296 | const struct nfs_commit_completion_ops *completion_ops; | ||
1297 | }; | ||
1298 | |||
1299 | struct nfs_commit_data { | ||
1175 | struct rpc_task task; | 1300 | struct rpc_task task; |
1176 | struct inode *inode; | 1301 | struct inode *inode; |
1177 | struct rpc_cred *cred; | 1302 | struct rpc_cred *cred; |
@@ -1179,22 +1304,22 @@ struct nfs_write_data { | |||
1179 | struct nfs_writeverf verf; | 1304 | struct nfs_writeverf verf; |
1180 | struct list_head pages; /* Coalesced requests we wish to flush */ | 1305 | struct list_head pages; /* Coalesced requests we wish to flush */ |
1181 | struct list_head list; /* lists of struct nfs_write_data */ | 1306 | struct list_head list; /* lists of struct nfs_write_data */ |
1182 | struct nfs_page *req; /* multi ops per nfs_page */ | 1307 | struct nfs_direct_req *dreq; /* O_DIRECT request */ |
1183 | struct page **pagevec; | 1308 | struct nfs_commitargs args; /* argument struct */ |
1184 | unsigned int npages; /* Max length of pagevec */ | 1309 | struct nfs_commitres res; /* result struct */ |
1185 | struct nfs_writeargs args; /* argument struct */ | 1310 | struct nfs_open_context *context; |
1186 | struct nfs_writeres res; /* result struct */ | ||
1187 | struct pnfs_layout_segment *lseg; | 1311 | struct pnfs_layout_segment *lseg; |
1188 | struct nfs_client *ds_clp; /* pNFS data server */ | 1312 | struct nfs_client *ds_clp; /* pNFS data server */ |
1189 | int ds_commit_index; | 1313 | int ds_commit_index; |
1190 | const struct rpc_call_ops *mds_ops; | 1314 | const struct rpc_call_ops *mds_ops; |
1191 | int (*write_done_cb) (struct rpc_task *task, struct nfs_write_data *data); | 1315 | const struct nfs_commit_completion_ops *completion_ops; |
1192 | #ifdef CONFIG_NFS_V4 | 1316 | int (*commit_done_cb) (struct rpc_task *task, struct nfs_commit_data *data); |
1193 | unsigned long timestamp; /* For lease renewal */ | 1317 | }; |
1194 | #endif | 1318 | |
1195 | __u64 mds_offset; /* Filelayout dense stripe */ | 1319 | struct nfs_pgio_completion_ops { |
1196 | int pnfs_error; | 1320 | void (*error_cleanup)(struct list_head *head); |
1197 | struct page *page_array[NFS_PAGEVEC_SIZE]; | 1321 | void (*init_hdr)(struct nfs_pgio_header *hdr); |
1322 | void (*completion)(struct nfs_pgio_header *hdr); | ||
1198 | }; | 1323 | }; |
1199 | 1324 | ||
1200 | struct nfs_unlinkdata { | 1325 | struct nfs_unlinkdata { |
@@ -1234,11 +1359,13 @@ struct nfs_rpc_ops { | |||
1234 | 1359 | ||
1235 | int (*getroot) (struct nfs_server *, struct nfs_fh *, | 1360 | int (*getroot) (struct nfs_server *, struct nfs_fh *, |
1236 | struct nfs_fsinfo *); | 1361 | struct nfs_fsinfo *); |
1362 | struct vfsmount *(*submount) (struct nfs_server *, struct dentry *, | ||
1363 | struct nfs_fh *, struct nfs_fattr *); | ||
1237 | int (*getattr) (struct nfs_server *, struct nfs_fh *, | 1364 | int (*getattr) (struct nfs_server *, struct nfs_fh *, |
1238 | struct nfs_fattr *); | 1365 | struct nfs_fattr *); |
1239 | int (*setattr) (struct dentry *, struct nfs_fattr *, | 1366 | int (*setattr) (struct dentry *, struct nfs_fattr *, |
1240 | struct iattr *); | 1367 | struct iattr *); |
1241 | int (*lookup) (struct rpc_clnt *clnt, struct inode *, struct qstr *, | 1368 | int (*lookup) (struct inode *, struct qstr *, |
1242 | struct nfs_fh *, struct nfs_fattr *); | 1369 | struct nfs_fh *, struct nfs_fattr *); |
1243 | int (*access) (struct inode *, struct nfs_access_entry *); | 1370 | int (*access) (struct inode *, struct nfs_access_entry *); |
1244 | int (*readlink)(struct inode *, struct page *, unsigned int, | 1371 | int (*readlink)(struct inode *, struct page *, unsigned int, |
@@ -1277,8 +1404,9 @@ struct nfs_rpc_ops { | |||
1277 | void (*write_setup) (struct nfs_write_data *, struct rpc_message *); | 1404 | void (*write_setup) (struct nfs_write_data *, struct rpc_message *); |
1278 | void (*write_rpc_prepare)(struct rpc_task *, struct nfs_write_data *); | 1405 | void (*write_rpc_prepare)(struct rpc_task *, struct nfs_write_data *); |
1279 | int (*write_done) (struct rpc_task *, struct nfs_write_data *); | 1406 | int (*write_done) (struct rpc_task *, struct nfs_write_data *); |
1280 | void (*commit_setup) (struct nfs_write_data *, struct rpc_message *); | 1407 | void (*commit_setup) (struct nfs_commit_data *, struct rpc_message *); |
1281 | int (*commit_done) (struct rpc_task *, struct nfs_write_data *); | 1408 | void (*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *); |
1409 | int (*commit_done) (struct rpc_task *, struct nfs_commit_data *); | ||
1282 | int (*lock)(struct file *, int, struct file_lock *); | 1410 | int (*lock)(struct file *, int, struct file_lock *); |
1283 | int (*lock_check_bounds)(const struct file_lock *); | 1411 | int (*lock_check_bounds)(const struct file_lock *); |
1284 | void (*clear_acl_cache)(struct inode *); | 1412 | void (*clear_acl_cache)(struct inode *); |
@@ -1287,9 +1415,9 @@ struct nfs_rpc_ops { | |||
1287 | struct nfs_open_context *ctx, | 1415 | struct nfs_open_context *ctx, |
1288 | int open_flags, | 1416 | int open_flags, |
1289 | struct iattr *iattr); | 1417 | struct iattr *iattr); |
1290 | int (*init_client) (struct nfs_client *, const struct rpc_timeout *, | 1418 | struct nfs_client * |
1291 | const char *, rpc_authflavor_t, int); | 1419 | (*init_client) (struct nfs_client *, const struct rpc_timeout *, |
1292 | int (*secinfo)(struct inode *, const struct qstr *, struct nfs4_secinfo_flavors *); | 1420 | const char *, rpc_authflavor_t); |
1293 | }; | 1421 | }; |
1294 | 1422 | ||
1295 | /* | 1423 | /* |