1/**************************************************************************** 2 **************************************************************************** 3 *** 4 *** This header was automatically generated from a Linux kernel header 5 *** of the same name, to make information necessary for userspace to 6 *** call into the kernel available to libc. It contains only constants, 7 *** structures, and macros generated from the original header, and thus, 8 *** contains no copyrightable information. 9 *** 10 **************************************************************************** 11 ****************************************************************************/ 12#ifndef _LINUX_NFS_XDR_H 13#define _LINUX_NFS_XDR_H 14 15#include <linux/sunrpc/xprt.h> 16#include <linux/nfsacl.h> 17 18#define NFS_MAX_FILE_IO_SIZE (1048576U) 19#define NFS_DEF_FILE_IO_SIZE (4096U) 20#define NFS_MIN_FILE_IO_SIZE (1024U) 21 22struct nfs_fsid { 23 uint64_t major; 24 uint64_t minor; 25}; 26 27#define NFS_ATTR_WCC 0x0001 28#define NFS_ATTR_FATTR 0x0002 29#define NFS_ATTR_FATTR_V3 0x0004 30#define NFS_ATTR_FATTR_V4 0x0008 31#define NFS_ATTR_FATTR_V4_REFERRAL 0x0010 32 33struct nfs_fsinfo { 34 struct nfs_fattr *fattr; 35 __u32 rtmax; 36 __u32 rtpref; 37 __u32 rtmult; 38 __u32 wtmax; 39 __u32 wtpref; 40 __u32 wtmult; 41 __u32 dtpref; 42 __u64 maxfilesize; 43 __u32 lease_time; 44}; 45 46struct nfs_fsstat { 47 struct nfs_fattr *fattr; 48 __u64 tbytes; 49 __u64 fbytes; 50 __u64 abytes; 51 __u64 tfiles; 52 __u64 ffiles; 53 __u64 afiles; 54}; 55 56struct nfs2_fsstat { 57 __u32 tsize; 58 __u32 bsize; 59 __u32 blocks; 60 __u32 bfree; 61 __u32 bavail; 62}; 63 64struct nfs_pathconf { 65 struct nfs_fattr *fattr; 66 __u32 max_link; 67 __u32 max_namelen; 68}; 69 70struct nfs4_change_info { 71 u32 atomic; 72 u64 before; 73 u64 after; 74}; 75 76struct nfs_seqid; 77 78struct nfs_openargs { 79 const struct nfs_fh * fh; 80 struct nfs_seqid * seqid; 81 int open_flags; 82 __u64 clientid; 83 __u32 id; 84 union { 85 struct iattr * attrs; 86 nfs4_verifier verifier; 87 nfs4_stateid delegation; 88 int delegation_type; 89 } u; 90 const struct qstr * name; 91 const struct nfs_server *server; 92 const u32 * bitmask; 93 __u32 claim; 94}; 95 96struct nfs_openres { 97 nfs4_stateid stateid; 98 struct nfs_fh fh; 99 struct nfs4_change_info cinfo; 100 __u32 rflags; 101 struct nfs_fattr * f_attr; 102 struct nfs_fattr * dir_attr; 103 const struct nfs_server *server; 104 int delegation_type; 105 nfs4_stateid delegation; 106 __u32 do_recall; 107 __u64 maxsize; 108}; 109 110struct nfs_open_confirmargs { 111 const struct nfs_fh * fh; 112 nfs4_stateid * stateid; 113 struct nfs_seqid * seqid; 114}; 115 116struct nfs_open_confirmres { 117 nfs4_stateid stateid; 118}; 119 120struct nfs_closeargs { 121 struct nfs_fh * fh; 122 nfs4_stateid * stateid; 123 struct nfs_seqid * seqid; 124 int open_flags; 125 const u32 * bitmask; 126}; 127 128struct nfs_closeres { 129 nfs4_stateid stateid; 130 struct nfs_fattr * fattr; 131 const struct nfs_server *server; 132}; 133 134struct nfs_lowner { 135 __u64 clientid; 136 u32 id; 137}; 138 139struct nfs_lock_args { 140 struct nfs_fh * fh; 141 struct file_lock * fl; 142 struct nfs_seqid * lock_seqid; 143 nfs4_stateid * lock_stateid; 144 struct nfs_seqid * open_seqid; 145 nfs4_stateid * open_stateid; 146 struct nfs_lowner lock_owner; 147 unsigned char block : 1; 148 unsigned char reclaim : 1; 149 unsigned char new_lock_owner : 1; 150}; 151 152struct nfs_lock_res { 153 nfs4_stateid stateid; 154}; 155 156struct nfs_locku_args { 157 struct nfs_fh * fh; 158 struct file_lock * fl; 159 struct nfs_seqid * seqid; 160 nfs4_stateid * stateid; 161}; 162 163struct nfs_locku_res { 164 nfs4_stateid stateid; 165}; 166 167struct nfs_lockt_args { 168 struct nfs_fh * fh; 169 struct file_lock * fl; 170 struct nfs_lowner lock_owner; 171}; 172 173struct nfs_lockt_res { 174 struct file_lock * denied; 175}; 176 177struct nfs4_delegreturnargs { 178 const struct nfs_fh *fhandle; 179 const nfs4_stateid *stateid; 180 const u32 * bitmask; 181}; 182 183struct nfs4_delegreturnres { 184 struct nfs_fattr * fattr; 185 const struct nfs_server *server; 186}; 187 188struct nfs_readargs { 189 struct nfs_fh * fh; 190 struct nfs_open_context *context; 191 __u64 offset; 192 __u32 count; 193 unsigned int pgbase; 194 struct page ** pages; 195}; 196 197struct nfs_readres { 198 struct nfs_fattr * fattr; 199 __u32 count; 200 int eof; 201}; 202 203struct nfs_writeargs { 204 struct nfs_fh * fh; 205 struct nfs_open_context *context; 206 __u64 offset; 207 __u32 count; 208 enum nfs3_stable_how stable; 209 unsigned int pgbase; 210 struct page ** pages; 211 const u32 * bitmask; 212}; 213 214struct nfs_writeverf { 215 enum nfs3_stable_how committed; 216 __u32 verifier[2]; 217}; 218 219struct nfs_writeres { 220 struct nfs_fattr * fattr; 221 struct nfs_writeverf * verf; 222 __u32 count; 223 const struct nfs_server *server; 224}; 225 226struct nfs_entry { 227 __u64 ino; 228 __u64 cookie, 229 prev_cookie; 230 const char * name; 231 unsigned int len; 232 int eof; 233 struct nfs_fh * fh; 234 struct nfs_fattr * fattr; 235}; 236 237struct nfs_sattrargs { 238 struct nfs_fh * fh; 239 struct iattr * sattr; 240}; 241 242struct nfs_diropargs { 243 struct nfs_fh * fh; 244 const char * name; 245 unsigned int len; 246}; 247 248struct nfs_createargs { 249 struct nfs_fh * fh; 250 const char * name; 251 unsigned int len; 252 struct iattr * sattr; 253}; 254 255struct nfs_renameargs { 256 struct nfs_fh * fromfh; 257 const char * fromname; 258 unsigned int fromlen; 259 struct nfs_fh * tofh; 260 const char * toname; 261 unsigned int tolen; 262}; 263 264struct nfs_setattrargs { 265 struct nfs_fh * fh; 266 nfs4_stateid stateid; 267 struct iattr * iap; 268 const struct nfs_server * server; 269 const u32 * bitmask; 270}; 271 272struct nfs_setaclargs { 273 struct nfs_fh * fh; 274 size_t acl_len; 275 unsigned int acl_pgbase; 276 struct page ** acl_pages; 277}; 278 279struct nfs_getaclargs { 280 struct nfs_fh * fh; 281 size_t acl_len; 282 unsigned int acl_pgbase; 283 struct page ** acl_pages; 284}; 285 286struct nfs_setattrres { 287 struct nfs_fattr * fattr; 288 const struct nfs_server * server; 289}; 290 291struct nfs_linkargs { 292 struct nfs_fh * fromfh; 293 struct nfs_fh * tofh; 294 const char * toname; 295 unsigned int tolen; 296}; 297 298struct nfs_symlinkargs { 299 struct nfs_fh * fromfh; 300 const char * fromname; 301 unsigned int fromlen; 302 const char * topath; 303 unsigned int tolen; 304 struct iattr * sattr; 305}; 306 307struct nfs_readdirargs { 308 struct nfs_fh * fh; 309 __u32 cookie; 310 unsigned int count; 311 struct page ** pages; 312}; 313 314struct nfs3_getaclargs { 315 struct nfs_fh * fh; 316 int mask; 317 struct page ** pages; 318}; 319 320struct nfs3_setaclargs { 321 struct inode * inode; 322 int mask; 323 struct posix_acl * acl_access; 324 struct posix_acl * acl_default; 325 struct page ** pages; 326}; 327 328struct nfs_diropok { 329 struct nfs_fh * fh; 330 struct nfs_fattr * fattr; 331}; 332 333struct nfs_readlinkargs { 334 struct nfs_fh * fh; 335 unsigned int pgbase; 336 unsigned int pglen; 337 struct page ** pages; 338}; 339 340struct nfs3_sattrargs { 341 struct nfs_fh * fh; 342 struct iattr * sattr; 343 unsigned int guard; 344 struct timespec guardtime; 345}; 346 347struct nfs3_diropargs { 348 struct nfs_fh * fh; 349 const char * name; 350 unsigned int len; 351}; 352 353struct nfs3_accessargs { 354 struct nfs_fh * fh; 355 __u32 access; 356}; 357 358struct nfs3_createargs { 359 struct nfs_fh * fh; 360 const char * name; 361 unsigned int len; 362 struct iattr * sattr; 363 enum nfs3_createmode createmode; 364 __u32 verifier[2]; 365}; 366 367struct nfs3_mkdirargs { 368 struct nfs_fh * fh; 369 const char * name; 370 unsigned int len; 371 struct iattr * sattr; 372}; 373 374struct nfs3_symlinkargs { 375 struct nfs_fh * fromfh; 376 const char * fromname; 377 unsigned int fromlen; 378 const char * topath; 379 unsigned int tolen; 380 struct iattr * sattr; 381}; 382 383struct nfs3_mknodargs { 384 struct nfs_fh * fh; 385 const char * name; 386 unsigned int len; 387 enum nfs3_ftype type; 388 struct iattr * sattr; 389 dev_t rdev; 390}; 391 392struct nfs3_renameargs { 393 struct nfs_fh * fromfh; 394 const char * fromname; 395 unsigned int fromlen; 396 struct nfs_fh * tofh; 397 const char * toname; 398 unsigned int tolen; 399}; 400 401struct nfs3_linkargs { 402 struct nfs_fh * fromfh; 403 struct nfs_fh * tofh; 404 const char * toname; 405 unsigned int tolen; 406}; 407 408struct nfs3_readdirargs { 409 struct nfs_fh * fh; 410 __u64 cookie; 411 __u32 verf[2]; 412 int plus; 413 unsigned int count; 414 struct page ** pages; 415}; 416 417struct nfs3_diropres { 418 struct nfs_fattr * dir_attr; 419 struct nfs_fh * fh; 420 struct nfs_fattr * fattr; 421}; 422 423struct nfs3_accessres { 424 struct nfs_fattr * fattr; 425 __u32 access; 426}; 427 428struct nfs3_readlinkargs { 429 struct nfs_fh * fh; 430 unsigned int pgbase; 431 unsigned int pglen; 432 struct page ** pages; 433}; 434 435struct nfs3_renameres { 436 struct nfs_fattr * fromattr; 437 struct nfs_fattr * toattr; 438}; 439 440struct nfs3_linkres { 441 struct nfs_fattr * dir_attr; 442 struct nfs_fattr * fattr; 443}; 444 445struct nfs3_readdirres { 446 struct nfs_fattr * dir_attr; 447 __u32 * verf; 448 int plus; 449}; 450 451struct nfs3_getaclres { 452 struct nfs_fattr * fattr; 453 int mask; 454 unsigned int acl_access_count; 455 unsigned int acl_default_count; 456 struct posix_acl * acl_access; 457 struct posix_acl * acl_default; 458}; 459 460struct nfs_page; 461 462#define NFS_PAGEVEC_SIZE (8U) 463 464struct nfs_read_data { 465 int flags; 466 struct rpc_task task; 467 struct inode *inode; 468 struct rpc_cred *cred; 469 struct nfs_fattr fattr; 470 struct list_head pages; 471 struct nfs_page *req; 472 struct page **pagevec; 473 unsigned int npages; 474 struct nfs_readargs args; 475 struct nfs_readres res; 476 struct page *page_array[NFS_PAGEVEC_SIZE]; 477}; 478 479struct nfs_write_data { 480 int flags; 481 struct rpc_task task; 482 struct inode *inode; 483 struct rpc_cred *cred; 484 struct nfs_fattr fattr; 485 struct nfs_writeverf verf; 486 struct list_head pages; 487 struct nfs_page *req; 488 struct page **pagevec; 489 unsigned int npages; 490 struct nfs_writeargs args; 491 struct nfs_writeres res; 492 struct page *page_array[NFS_PAGEVEC_SIZE]; 493}; 494 495struct nfs_access_entry; 496 497struct nfs_rpc_ops { 498 int version; 499 struct dentry_operations *dentry_ops; 500 struct inode_operations *dir_inode_ops; 501 struct inode_operations *file_inode_ops; 502 503 int (*getroot) (struct nfs_server *, struct nfs_fh *, 504 struct nfs_fsinfo *); 505 int (*getattr) (struct nfs_server *, struct nfs_fh *, 506 struct nfs_fattr *); 507 int (*setattr) (struct dentry *, struct nfs_fattr *, 508 struct iattr *); 509 int (*lookup) (struct inode *, struct qstr *, 510 struct nfs_fh *, struct nfs_fattr *); 511 int (*access) (struct inode *, struct nfs_access_entry *); 512 int (*readlink)(struct inode *, struct page *, unsigned int, 513 unsigned int); 514 int (*read) (struct nfs_read_data *); 515 int (*write) (struct nfs_write_data *); 516 int (*commit) (struct nfs_write_data *); 517 int (*create) (struct inode *, struct dentry *, 518 struct iattr *, int, struct nameidata *); 519 int (*remove) (struct inode *, struct qstr *); 520 int (*unlink_setup) (struct rpc_message *, 521 struct dentry *, struct qstr *); 522 int (*unlink_done) (struct dentry *, struct rpc_task *); 523 int (*rename) (struct inode *, struct qstr *, 524 struct inode *, struct qstr *); 525 int (*link) (struct inode *, struct inode *, struct qstr *); 526 int (*symlink) (struct inode *, struct qstr *, struct qstr *, 527 struct iattr *, struct nfs_fh *, 528 struct nfs_fattr *); 529 int (*mkdir) (struct inode *, struct dentry *, struct iattr *); 530 int (*rmdir) (struct inode *, struct qstr *); 531 int (*readdir) (struct dentry *, struct rpc_cred *, 532 u64, struct page *, unsigned int, int); 533 int (*mknod) (struct inode *, struct dentry *, struct iattr *, 534 dev_t); 535 int (*statfs) (struct nfs_server *, struct nfs_fh *, 536 struct nfs_fsstat *); 537 int (*fsinfo) (struct nfs_server *, struct nfs_fh *, 538 struct nfs_fsinfo *); 539 int (*pathconf) (struct nfs_server *, struct nfs_fh *, 540 struct nfs_pathconf *); 541 u32 * (*decode_dirent)(u32 *, struct nfs_entry *, int plus); 542 void (*read_setup) (struct nfs_read_data *); 543 int (*read_done) (struct rpc_task *, struct nfs_read_data *); 544 void (*write_setup) (struct nfs_write_data *, int how); 545 int (*write_done) (struct rpc_task *, struct nfs_write_data *); 546 void (*commit_setup) (struct nfs_write_data *, int how); 547 int (*commit_done) (struct rpc_task *, struct nfs_write_data *); 548 int (*file_open) (struct inode *, struct file *); 549 int (*file_release) (struct inode *, struct file *); 550 int (*lock)(struct file *, int, struct file_lock *); 551 void (*clear_acl_cache)(struct inode *); 552}; 553 554#define NFS_CALL(op, inode, args) NFS_PROTO(inode)->op args 555 556#endif 557