diff options
Diffstat (limited to 'include/linux/nfs_xdr.h')
-rw-r--r-- | include/linux/nfs_xdr.h | 210 |
1 files changed, 169 insertions, 41 deletions
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 | /* |