1 #ifndef _LINUX_NFS_XDR_H 2 #define _LINUX_NFS_XDR_H 3 4 #include <linux/nfsacl.h> 5 #include <linux/nfs3.h> 6 7 /* 8 * To change the maximum rsize and wsize supported by the NFS client, adjust 9 * NFS_MAX_FILE_IO_SIZE. 64KB is a typical maximum, but some servers can 10 * support a megabyte or more. The default is left at 4096 bytes, which is 11 * reasonable for NFS over UDP. 12 */ 13 #define NFS_MAX_FILE_IO_SIZE (1048576U) 14 #define NFS_DEF_FILE_IO_SIZE (4096U) 15 #define NFS_MIN_FILE_IO_SIZE (1024U) 16 17 struct nfs_fsid { 18 uint64_t major; 19 uint64_t minor; 20 }; 21 22 /* 23 * Helper for checking equality between 2 fsids. 24 */ 25 static inline int nfs_fsid_equal(const struct nfs_fsid *a, const struct nfs_fsid *b) 26 { 27 return a->major == b->major && a->minor == b->minor; 28 } 29 30 struct nfs_fattr { 31 unsigned int valid; /* which fields are valid */ 32 umode_t mode; 33 __u32 nlink; 34 __u32 uid; 35 __u32 gid; 36 dev_t rdev; 37 __u64 size; 38 union { 39 struct { 40 __u32 blocksize; 41 __u32 blocks; 42 } nfs2; 43 struct { 44 __u64 used; 45 } nfs3; 46 } du; 47 struct nfs_fsid fsid; 48 __u64 fileid; 49 struct timespec atime; 50 struct timespec mtime; 51 struct timespec ctime; 52 __u64 change_attr; /* NFSv4 change attribute */ 53 __u64 pre_change_attr;/* pre-op NFSv4 change attribute */ 54 __u64 pre_size; /* pre_op_attr.size */ 55 struct timespec pre_mtime; /* pre_op_attr.mtime */ 56 struct timespec pre_ctime; /* pre_op_attr.ctime */ 57 unsigned long time_start; 58 unsigned long gencount; 59 }; 60 61 #define NFS_ATTR_FATTR_TYPE (1U << 0) 62 #define NFS_ATTR_FATTR_MODE (1U << 1) 63 #define NFS_ATTR_FATTR_NLINK (1U << 2) 64 #define NFS_ATTR_FATTR_OWNER (1U << 3) 65 #define NFS_ATTR_FATTR_GROUP (1U << 4) 66 #define NFS_ATTR_FATTR_RDEV (1U << 5) 67 #define NFS_ATTR_FATTR_SIZE (1U << 6) 68 #define NFS_ATTR_FATTR_PRESIZE (1U << 7) 69 #define NFS_ATTR_FATTR_BLOCKS_USED (1U << 8) 70 #define NFS_ATTR_FATTR_SPACE_USED (1U << 9) 71 #define NFS_ATTR_FATTR_FSID (1U << 10) 72 #define NFS_ATTR_FATTR_FILEID (1U << 11) 73 #define NFS_ATTR_FATTR_ATIME (1U << 12) 74 #define NFS_ATTR_FATTR_MTIME (1U << 13) 75 #define NFS_ATTR_FATTR_CTIME (1U << 14) 76 #define NFS_ATTR_FATTR_PREMTIME (1U << 15) 77 #define NFS_ATTR_FATTR_PRECTIME (1U << 16) 78 #define NFS_ATTR_FATTR_CHANGE (1U << 17) 79 #define NFS_ATTR_FATTR_PRECHANGE (1U << 18) 80 #define NFS_ATTR_FATTR_V4_REFERRAL (1U << 19) /* NFSv4 referral */ 81 82 #define NFS_ATTR_FATTR (NFS_ATTR_FATTR_TYPE \ 83 | NFS_ATTR_FATTR_MODE \ 84 | NFS_ATTR_FATTR_NLINK \ 85 | NFS_ATTR_FATTR_OWNER \ 86 | NFS_ATTR_FATTR_GROUP \ 87 | NFS_ATTR_FATTR_RDEV \ 88 | NFS_ATTR_FATTR_SIZE \ 89 | NFS_ATTR_FATTR_FSID \ 90 | NFS_ATTR_FATTR_FILEID \ 91 | NFS_ATTR_FATTR_ATIME \ 92 | NFS_ATTR_FATTR_MTIME \ 93 | NFS_ATTR_FATTR_CTIME) 94 #define NFS_ATTR_FATTR_V2 (NFS_ATTR_FATTR \ 95 | NFS_ATTR_FATTR_BLOCKS_USED) 96 #define NFS_ATTR_FATTR_V3 (NFS_ATTR_FATTR \ 97 | NFS_ATTR_FATTR_SPACE_USED) 98 #define NFS_ATTR_FATTR_V4 (NFS_ATTR_FATTR \ 99 | NFS_ATTR_FATTR_SPACE_USED \ 100 | NFS_ATTR_FATTR_CHANGE) 101 102 /* 103 * Info on the file system 104 */ 105 struct nfs_fsinfo { 106 struct nfs_fattr *fattr; /* Post-op attributes */ 107 __u32 rtmax; /* max. read transfer size */ 108 __u32 rtpref; /* pref. read transfer size */ 109 __u32 rtmult; /* reads should be multiple of this */ 110 __u32 wtmax; /* max. write transfer size */ 111 __u32 wtpref; /* pref. write transfer size */ 112 __u32 wtmult; /* writes should be multiple of this */ 113 __u32 dtpref; /* pref. readdir transfer size */ 114 __u64 maxfilesize; 115 struct timespec time_delta; /* server time granularity */ 116 __u32 lease_time; /* in seconds */ 117 __u32 layouttype; /* supported pnfs layout driver */ 118 }; 119 120 struct nfs_fsstat { 121 struct nfs_fattr *fattr; /* Post-op attributes */ 122 __u64 tbytes; /* total size in bytes */ 123 __u64 fbytes; /* # of free bytes */ 124 __u64 abytes; /* # of bytes available to user */ 125 __u64 tfiles; /* # of files */ 126 __u64 ffiles; /* # of free files */ 127 __u64 afiles; /* # of files available to user */ 128 }; 129 130 struct nfs2_fsstat { 131 __u32 tsize; /* Server transfer size */ 132 __u32 bsize; /* Filesystem block size */ 133 __u32 blocks; /* No. of "bsize" blocks on filesystem */ 134 __u32 bfree; /* No. of free "bsize" blocks */ 135 __u32 bavail; /* No. of available "bsize" blocks */ 136 }; 137 138 struct nfs_pathconf { 139 struct nfs_fattr *fattr; /* Post-op attributes */ 140 __u32 max_link; /* max # of hard links */ 141 __u32 max_namelen; /* max name length */ 142 }; 143 144 struct nfs4_change_info { 145 u32 atomic; 146 u64 before; 147 u64 after; 148 }; 149 150 struct nfs_seqid; 151 152 /* nfs41 sessions channel attributes */ 153 struct nfs4_channel_attrs { 154 u32 headerpadsz; 155 u32 max_rqst_sz; 156 u32 max_resp_sz; 157 u32 max_resp_sz_cached; 158 u32 max_ops; 159 u32 max_reqs; 160 }; 161 162 /* nfs41 sessions slot seqid */ 163 struct nfs4_slot { 164 u32 seq_nr; 165 }; 166 167 struct nfs4_sequence_args { 168 struct nfs4_session *sa_session; 169 u8 sa_slotid; 170 u8 sa_cache_this; 171 }; 172 173 struct nfs4_sequence_res { 174 struct nfs4_session *sr_session; 175 struct nfs4_slot *sr_slot; /* slot used to send request */ 176 int sr_status; /* sequence operation status */ 177 unsigned long sr_renewal_time; 178 u32 sr_status_flags; 179 }; 180 181 struct nfs4_get_lease_time_args { 182 struct nfs4_sequence_args la_seq_args; 183 }; 184 185 struct nfs4_get_lease_time_res { 186 struct nfs_fsinfo *lr_fsinfo; 187 struct nfs4_sequence_res lr_seq_res; 188 }; 189 190 #define PNFS_LAYOUT_MAXSIZE 4096 191 192 struct nfs4_layoutdriver_data { 193 __u32 len; 194 void *buf; 195 }; 196 197 struct pnfs_layout_range { 198 u32 iomode; 199 u64 offset; 200 u64 length; 201 }; 202 203 struct nfs4_layoutget_args { 204 __u32 type; 205 struct pnfs_layout_range range; 206 __u64 minlength; 207 __u32 maxcount; 208 struct inode *inode; 209 struct nfs_open_context *ctx; 210 struct nfs4_sequence_args seq_args; 211 nfs4_stateid stateid; 212 }; 213 214 struct nfs4_layoutget_res { 215 __u32 return_on_close; 216 struct pnfs_layout_range range; 217 __u32 type; 218 nfs4_stateid stateid; 219 struct nfs4_layoutdriver_data layout; 220 struct nfs4_sequence_res seq_res; 221 }; 222 223 struct nfs4_layoutget { 224 struct nfs4_layoutget_args args; 225 struct nfs4_layoutget_res res; 226 struct pnfs_layout_segment **lsegpp; 227 }; 228 229 struct nfs4_getdeviceinfo_args { 230 struct pnfs_device *pdev; 231 struct nfs4_sequence_args seq_args; 232 }; 233 234 struct nfs4_getdeviceinfo_res { 235 struct pnfs_device *pdev; 236 struct nfs4_sequence_res seq_res; 237 }; 238 239 /* 240 * Arguments to the open call. 241 */ 242 struct nfs_openargs { 243 const struct nfs_fh * fh; 244 struct nfs_seqid * seqid; 245 int open_flags; 246 fmode_t fmode; 247 __u64 clientid; 248 __u64 id; 249 union { 250 struct { 251 struct iattr * attrs; /* UNCHECKED, GUARDED */ 252 nfs4_verifier verifier; /* EXCLUSIVE */ 253 }; 254 nfs4_stateid delegation; /* CLAIM_DELEGATE_CUR */ 255 fmode_t delegation_type; /* CLAIM_PREVIOUS */ 256 } u; 257 const struct qstr * name; 258 const struct nfs_server *server; /* Needed for ID mapping */ 259 const u32 * bitmask; 260 __u32 claim; 261 struct nfs4_sequence_args seq_args; 262 }; 263 264 struct nfs_openres { 265 nfs4_stateid stateid; 266 struct nfs_fh fh; 267 struct nfs4_change_info cinfo; 268 __u32 rflags; 269 struct nfs_fattr * f_attr; 270 struct nfs_fattr * dir_attr; 271 struct nfs_seqid * seqid; 272 const struct nfs_server *server; 273 fmode_t delegation_type; 274 nfs4_stateid delegation; 275 __u32 do_recall; 276 __u64 maxsize; 277 __u32 attrset[NFS4_BITMAP_SIZE]; 278 struct nfs4_sequence_res seq_res; 279 }; 280 281 /* 282 * Arguments to the open_confirm call. 283 */ 284 struct nfs_open_confirmargs { 285 const struct nfs_fh * fh; 286 nfs4_stateid * stateid; 287 struct nfs_seqid * seqid; 288 }; 289 290 struct nfs_open_confirmres { 291 nfs4_stateid stateid; 292 struct nfs_seqid * seqid; 293 }; 294 295 /* 296 * Arguments to the close call. 297 */ 298 struct nfs_closeargs { 299 struct nfs_fh * fh; 300 nfs4_stateid * stateid; 301 struct nfs_seqid * seqid; 302 fmode_t fmode; 303 const u32 * bitmask; 304 struct nfs4_sequence_args seq_args; 305 }; 306 307 struct nfs_closeres { 308 nfs4_stateid stateid; 309 struct nfs_fattr * fattr; 310 struct nfs_seqid * seqid; 311 const struct nfs_server *server; 312 struct nfs4_sequence_res seq_res; 313 }; 314 /* 315 * * Arguments to the lock,lockt, and locku call. 316 * */ 317 struct nfs_lowner { 318 __u64 clientid; 319 __u64 id; 320 dev_t s_dev; 321 }; 322 323 struct nfs_lock_args { 324 struct nfs_fh * fh; 325 struct file_lock * fl; 326 struct nfs_seqid * lock_seqid; 327 nfs4_stateid * lock_stateid; 328 struct nfs_seqid * open_seqid; 329 nfs4_stateid * open_stateid; 330 struct nfs_lowner lock_owner; 331 unsigned char block : 1; 332 unsigned char reclaim : 1; 333 unsigned char new_lock_owner : 1; 334 struct nfs4_sequence_args seq_args; 335 }; 336 337 struct nfs_lock_res { 338 nfs4_stateid stateid; 339 struct nfs_seqid * lock_seqid; 340 struct nfs_seqid * open_seqid; 341 struct nfs4_sequence_res seq_res; 342 }; 343 344 struct nfs_locku_args { 345 struct nfs_fh * fh; 346 struct file_lock * fl; 347 struct nfs_seqid * seqid; 348 nfs4_stateid * stateid; 349 struct nfs4_sequence_args seq_args; 350 }; 351 352 struct nfs_locku_res { 353 nfs4_stateid stateid; 354 struct nfs_seqid * seqid; 355 struct nfs4_sequence_res seq_res; 356 }; 357 358 struct nfs_lockt_args { 359 struct nfs_fh * fh; 360 struct file_lock * fl; 361 struct nfs_lowner lock_owner; 362 struct nfs4_sequence_args seq_args; 363 }; 364 365 struct nfs_lockt_res { 366 struct file_lock * denied; /* LOCK, LOCKT failed */ 367 struct nfs4_sequence_res seq_res; 368 }; 369 370 struct nfs_release_lockowner_args { 371 struct nfs_lowner lock_owner; 372 }; 373 374 struct nfs4_delegreturnargs { 375 const struct nfs_fh *fhandle; 376 const nfs4_stateid *stateid; 377 const u32 * bitmask; 378 struct nfs4_sequence_args seq_args; 379 }; 380 381 struct nfs4_delegreturnres { 382 struct nfs_fattr * fattr; 383 const struct nfs_server *server; 384 struct nfs4_sequence_res seq_res; 385 }; 386 387 /* 388 * Arguments to the read call. 389 */ 390 struct nfs_readargs { 391 struct nfs_fh * fh; 392 struct nfs_open_context *context; 393 struct nfs_lock_context *lock_context; 394 __u64 offset; 395 __u32 count; 396 unsigned int pgbase; 397 struct page ** pages; 398 struct nfs4_sequence_args seq_args; 399 }; 400 401 struct nfs_readres { 402 struct nfs_fattr * fattr; 403 __u32 count; 404 int eof; 405 struct nfs4_sequence_res seq_res; 406 }; 407 408 /* 409 * Arguments to the write call. 410 */ 411 struct nfs_writeargs { 412 struct nfs_fh * fh; 413 struct nfs_open_context *context; 414 struct nfs_lock_context *lock_context; 415 __u64 offset; 416 __u32 count; 417 enum nfs3_stable_how stable; 418 unsigned int pgbase; 419 struct page ** pages; 420 const u32 * bitmask; 421 struct nfs4_sequence_args seq_args; 422 }; 423 424 struct nfs_writeverf { 425 enum nfs3_stable_how committed; 426 __be32 verifier[2]; 427 }; 428 429 struct nfs_writeres { 430 struct nfs_fattr * fattr; 431 struct nfs_writeverf * verf; 432 __u32 count; 433 const struct nfs_server *server; 434 struct nfs4_sequence_res seq_res; 435 }; 436 437 /* 438 * Common arguments to the unlink call 439 */ 440 struct nfs_removeargs { 441 const struct nfs_fh *fh; 442 struct qstr name; 443 const u32 * bitmask; 444 struct nfs4_sequence_args seq_args; 445 }; 446 447 struct nfs_removeres { 448 const struct nfs_server *server; 449 struct nfs_fattr *dir_attr; 450 struct nfs4_change_info cinfo; 451 struct nfs4_sequence_res seq_res; 452 }; 453 454 /* 455 * Common arguments to the rename call 456 */ 457 struct nfs_renameargs { 458 const struct nfs_fh *old_dir; 459 const struct nfs_fh *new_dir; 460 const struct qstr *old_name; 461 const struct qstr *new_name; 462 const u32 *bitmask; 463 struct nfs4_sequence_args seq_args; 464 }; 465 466 struct nfs_renameres { 467 const struct nfs_server *server; 468 struct nfs4_change_info old_cinfo; 469 struct nfs_fattr *old_fattr; 470 struct nfs4_change_info new_cinfo; 471 struct nfs_fattr *new_fattr; 472 struct nfs4_sequence_res seq_res; 473 }; 474 475 /* 476 * Argument struct for decode_entry function 477 */ 478 struct nfs_entry { 479 __u64 ino; 480 __u64 cookie, 481 prev_cookie; 482 const char * name; 483 unsigned int len; 484 int eof; 485 struct nfs_fh * fh; 486 struct nfs_fattr * fattr; 487 unsigned char d_type; 488 struct nfs_server * server; 489 }; 490 491 /* 492 * The following types are for NFSv2 only. 493 */ 494 struct nfs_sattrargs { 495 struct nfs_fh * fh; 496 struct iattr * sattr; 497 }; 498 499 struct nfs_diropargs { 500 struct nfs_fh * fh; 501 const char * name; 502 unsigned int len; 503 }; 504 505 struct nfs_createargs { 506 struct nfs_fh * fh; 507 const char * name; 508 unsigned int len; 509 struct iattr * sattr; 510 }; 511 512 struct nfs_setattrargs { 513 struct nfs_fh * fh; 514 nfs4_stateid stateid; 515 struct iattr * iap; 516 const struct nfs_server * server; /* Needed for name mapping */ 517 const u32 * bitmask; 518 struct nfs4_sequence_args seq_args; 519 }; 520 521 struct nfs_setaclargs { 522 struct nfs_fh * fh; 523 size_t acl_len; 524 unsigned int acl_pgbase; 525 struct page ** acl_pages; 526 struct nfs4_sequence_args seq_args; 527 }; 528 529 struct nfs_setaclres { 530 struct nfs4_sequence_res seq_res; 531 }; 532 533 struct nfs_getaclargs { 534 struct nfs_fh * fh; 535 size_t acl_len; 536 unsigned int acl_pgbase; 537 struct page ** acl_pages; 538 struct nfs4_sequence_args seq_args; 539 }; 540 541 struct nfs_getaclres { 542 size_t acl_len; 543 struct nfs4_sequence_res seq_res; 544 }; 545 546 struct nfs_setattrres { 547 struct nfs_fattr * fattr; 548 const struct nfs_server * server; 549 struct nfs4_sequence_res seq_res; 550 }; 551 552 struct nfs_linkargs { 553 struct nfs_fh * fromfh; 554 struct nfs_fh * tofh; 555 const char * toname; 556 unsigned int tolen; 557 }; 558 559 struct nfs_symlinkargs { 560 struct nfs_fh * fromfh; 561 const char * fromname; 562 unsigned int fromlen; 563 struct page ** pages; 564 unsigned int pathlen; 565 struct iattr * sattr; 566 }; 567 568 struct nfs_readdirargs { 569 struct nfs_fh * fh; 570 __u32 cookie; 571 unsigned int count; 572 struct page ** pages; 573 }; 574 575 struct nfs3_getaclargs { 576 struct nfs_fh * fh; 577 int mask; 578 struct page ** pages; 579 }; 580 581 struct nfs3_setaclargs { 582 struct inode * inode; 583 int mask; 584 struct posix_acl * acl_access; 585 struct posix_acl * acl_default; 586 size_t len; 587 unsigned int npages; 588 struct page ** pages; 589 }; 590 591 struct nfs_diropok { 592 struct nfs_fh * fh; 593 struct nfs_fattr * fattr; 594 }; 595 596 struct nfs_readlinkargs { 597 struct nfs_fh * fh; 598 unsigned int pgbase; 599 unsigned int pglen; 600 struct page ** pages; 601 }; 602 603 struct nfs3_sattrargs { 604 struct nfs_fh * fh; 605 struct iattr * sattr; 606 unsigned int guard; 607 struct timespec guardtime; 608 }; 609 610 struct nfs3_diropargs { 611 struct nfs_fh * fh; 612 const char * name; 613 unsigned int len; 614 }; 615 616 struct nfs3_accessargs { 617 struct nfs_fh * fh; 618 __u32 access; 619 }; 620 621 struct nfs3_createargs { 622 struct nfs_fh * fh; 623 const char * name; 624 unsigned int len; 625 struct iattr * sattr; 626 enum nfs3_createmode createmode; 627 __be32 verifier[2]; 628 }; 629 630 struct nfs3_mkdirargs { 631 struct nfs_fh * fh; 632 const char * name; 633 unsigned int len; 634 struct iattr * sattr; 635 }; 636 637 struct nfs3_symlinkargs { 638 struct nfs_fh * fromfh; 639 const char * fromname; 640 unsigned int fromlen; 641 struct page ** pages; 642 unsigned int pathlen; 643 struct iattr * sattr; 644 }; 645 646 struct nfs3_mknodargs { 647 struct nfs_fh * fh; 648 const char * name; 649 unsigned int len; 650 enum nfs3_ftype type; 651 struct iattr * sattr; 652 dev_t rdev; 653 }; 654 655 struct nfs3_linkargs { 656 struct nfs_fh * fromfh; 657 struct nfs_fh * tofh; 658 const char * toname; 659 unsigned int tolen; 660 }; 661 662 struct nfs3_readdirargs { 663 struct nfs_fh * fh; 664 __u64 cookie; 665 __be32 verf[2]; 666 int plus; 667 unsigned int count; 668 struct page ** pages; 669 }; 670 671 struct nfs3_diropres { 672 struct nfs_fattr * dir_attr; 673 struct nfs_fh * fh; 674 struct nfs_fattr * fattr; 675 }; 676 677 struct nfs3_accessres { 678 struct nfs_fattr * fattr; 679 __u32 access; 680 }; 681 682 struct nfs3_readlinkargs { 683 struct nfs_fh * fh; 684 unsigned int pgbase; 685 unsigned int pglen; 686 struct page ** pages; 687 }; 688 689 struct nfs3_linkres { 690 struct nfs_fattr * dir_attr; 691 struct nfs_fattr * fattr; 692 }; 693 694 struct nfs3_readdirres { 695 struct nfs_fattr * dir_attr; 696 __be32 * verf; 697 int plus; 698 }; 699 700 struct nfs3_getaclres { 701 struct nfs_fattr * fattr; 702 int mask; 703 unsigned int acl_access_count; 704 unsigned int acl_default_count; 705 struct posix_acl * acl_access; 706 struct posix_acl * acl_default; 707 }; 708 709 #ifdef CONFIG_NFS_V4 710 711 typedef u64 clientid4; 712 713 struct nfs4_accessargs { 714 const struct nfs_fh * fh; 715 const u32 * bitmask; 716 u32 access; 717 struct nfs4_sequence_args seq_args; 718 }; 719 720 struct nfs4_accessres { 721 const struct nfs_server * server; 722 struct nfs_fattr * fattr; 723 u32 supported; 724 u32 access; 725 struct nfs4_sequence_res seq_res; 726 }; 727 728 struct nfs4_create_arg { 729 u32 ftype; 730 union { 731 struct { 732 struct page ** pages; 733 unsigned int len; 734 } symlink; /* NF4LNK */ 735 struct { 736 u32 specdata1; 737 u32 specdata2; 738 } device; /* NF4BLK, NF4CHR */ 739 } u; 740 const struct qstr * name; 741 const struct nfs_server * server; 742 const struct iattr * attrs; 743 const struct nfs_fh * dir_fh; 744 const u32 * bitmask; 745 struct nfs4_sequence_args seq_args; 746 }; 747 748 struct nfs4_create_res { 749 const struct nfs_server * server; 750 struct nfs_fh * fh; 751 struct nfs_fattr * fattr; 752 struct nfs4_change_info dir_cinfo; 753 struct nfs_fattr * dir_fattr; 754 struct nfs4_sequence_res seq_res; 755 }; 756 757 struct nfs4_fsinfo_arg { 758 const struct nfs_fh * fh; 759 const u32 * bitmask; 760 struct nfs4_sequence_args seq_args; 761 }; 762 763 struct nfs4_fsinfo_res { 764 struct nfs_fsinfo *fsinfo; 765 struct nfs4_sequence_res seq_res; 766 }; 767 768 struct nfs4_getattr_arg { 769 const struct nfs_fh * fh; 770 const u32 * bitmask; 771 struct nfs4_sequence_args seq_args; 772 }; 773 774 struct nfs4_getattr_res { 775 const struct nfs_server * server; 776 struct nfs_fattr * fattr; 777 struct nfs4_sequence_res seq_res; 778 }; 779 780 struct nfs4_link_arg { 781 const struct nfs_fh * fh; 782 const struct nfs_fh * dir_fh; 783 const struct qstr * name; 784 const u32 * bitmask; 785 struct nfs4_sequence_args seq_args; 786 }; 787 788 struct nfs4_link_res { 789 const struct nfs_server * server; 790 struct nfs_fattr * fattr; 791 struct nfs4_change_info cinfo; 792 struct nfs_fattr * dir_attr; 793 struct nfs4_sequence_res seq_res; 794 }; 795 796 797 struct nfs4_lookup_arg { 798 const struct nfs_fh * dir_fh; 799 const struct qstr * name; 800 const u32 * bitmask; 801 struct nfs4_sequence_args seq_args; 802 }; 803 804 struct nfs4_lookup_res { 805 const struct nfs_server * server; 806 struct nfs_fattr * fattr; 807 struct nfs_fh * fh; 808 struct nfs4_sequence_res seq_res; 809 }; 810 811 struct nfs4_lookup_root_arg { 812 const u32 * bitmask; 813 struct nfs4_sequence_args seq_args; 814 }; 815 816 struct nfs4_pathconf_arg { 817 const struct nfs_fh * fh; 818 const u32 * bitmask; 819 struct nfs4_sequence_args seq_args; 820 }; 821 822 struct nfs4_pathconf_res { 823 struct nfs_pathconf *pathconf; 824 struct nfs4_sequence_res seq_res; 825 }; 826 827 struct nfs4_readdir_arg { 828 const struct nfs_fh * fh; 829 u64 cookie; 830 nfs4_verifier verifier; 831 u32 count; 832 struct page ** pages; /* zero-copy data */ 833 unsigned int pgbase; /* zero-copy data */ 834 const u32 * bitmask; 835 int plus; 836 struct nfs4_sequence_args seq_args; 837 }; 838 839 struct nfs4_readdir_res { 840 nfs4_verifier verifier; 841 unsigned int pgbase; 842 struct nfs4_sequence_res seq_res; 843 }; 844 845 struct nfs4_readlink { 846 const struct nfs_fh * fh; 847 unsigned int pgbase; 848 unsigned int pglen; /* zero-copy data */ 849 struct page ** pages; /* zero-copy data */ 850 struct nfs4_sequence_args seq_args; 851 }; 852 853 struct nfs4_readlink_res { 854 struct nfs4_sequence_res seq_res; 855 }; 856 857 #define NFS4_SETCLIENTID_NAMELEN (127) 858 struct nfs4_setclientid { 859 const nfs4_verifier * sc_verifier; 860 unsigned int sc_name_len; 861 char sc_name[NFS4_SETCLIENTID_NAMELEN + 1]; 862 u32 sc_prog; 863 unsigned int sc_netid_len; 864 char sc_netid[RPCBIND_MAXNETIDLEN + 1]; 865 unsigned int sc_uaddr_len; 866 char sc_uaddr[RPCBIND_MAXUADDRLEN + 1]; 867 u32 sc_cb_ident; 868 }; 869 870 struct nfs4_setclientid_res { 871 u64 clientid; 872 nfs4_verifier confirm; 873 }; 874 875 struct nfs4_statfs_arg { 876 const struct nfs_fh * fh; 877 const u32 * bitmask; 878 struct nfs4_sequence_args seq_args; 879 }; 880 881 struct nfs4_statfs_res { 882 struct nfs_fsstat *fsstat; 883 struct nfs4_sequence_res seq_res; 884 }; 885 886 struct nfs4_server_caps_arg { 887 struct nfs_fh *fhandle; 888 struct nfs4_sequence_args seq_args; 889 }; 890 891 struct nfs4_server_caps_res { 892 u32 attr_bitmask[2]; 893 u32 acl_bitmask; 894 u32 has_links; 895 u32 has_symlinks; 896 struct nfs4_sequence_res seq_res; 897 }; 898 899 struct nfs4_string { 900 unsigned int len; 901 char *data; 902 }; 903 904 #define NFS4_PATHNAME_MAXCOMPONENTS 512 905 struct nfs4_pathname { 906 unsigned int ncomponents; 907 struct nfs4_string components[NFS4_PATHNAME_MAXCOMPONENTS]; 908 }; 909 910 #define NFS4_FS_LOCATION_MAXSERVERS 10 911 struct nfs4_fs_location { 912 unsigned int nservers; 913 struct nfs4_string servers[NFS4_FS_LOCATION_MAXSERVERS]; 914 struct nfs4_pathname rootpath; 915 }; 916 917 #define NFS4_FS_LOCATIONS_MAXENTRIES 10 918 struct nfs4_fs_locations { 919 struct nfs_fattr fattr; 920 const struct nfs_server *server; 921 struct nfs4_pathname fs_path; 922 int nlocations; 923 struct nfs4_fs_location locations[NFS4_FS_LOCATIONS_MAXENTRIES]; 924 }; 925 926 struct nfs4_fs_locations_arg { 927 const struct nfs_fh *dir_fh; 928 const struct qstr *name; 929 struct page *page; 930 const u32 *bitmask; 931 struct nfs4_sequence_args seq_args; 932 }; 933 934 struct nfs4_fs_locations_res { 935 struct nfs4_fs_locations *fs_locations; 936 struct nfs4_sequence_res seq_res; 937 }; 938 939 #endif /* CONFIG_NFS_V4 */ 940 941 struct nfstime4 { 942 u64 seconds; 943 u32 nseconds; 944 }; 945 946 #ifdef CONFIG_NFS_V4_1 947 struct nfs_impl_id4 { 948 u32 domain_len; 949 char *domain; 950 u32 name_len; 951 char *name; 952 struct nfstime4 date; 953 }; 954 955 #define NFS4_EXCHANGE_ID_LEN (48) 956 struct nfs41_exchange_id_args { 957 struct nfs_client *client; 958 nfs4_verifier *verifier; 959 unsigned int id_len; 960 char id[NFS4_EXCHANGE_ID_LEN]; 961 u32 flags; 962 }; 963 964 struct server_owner { 965 uint64_t minor_id; 966 uint32_t major_id_sz; 967 char major_id[NFS4_OPAQUE_LIMIT]; 968 }; 969 970 struct server_scope { 971 uint32_t server_scope_sz; 972 char server_scope[NFS4_OPAQUE_LIMIT]; 973 }; 974 975 struct nfs41_exchange_id_res { 976 struct nfs_client *client; 977 u32 flags; 978 }; 979 980 struct nfs41_create_session_args { 981 struct nfs_client *client; 982 uint32_t flags; 983 uint32_t cb_program; 984 struct nfs4_channel_attrs fc_attrs; /* Fore Channel */ 985 struct nfs4_channel_attrs bc_attrs; /* Back Channel */ 986 }; 987 988 struct nfs41_create_session_res { 989 struct nfs_client *client; 990 }; 991 992 struct nfs41_reclaim_complete_args { 993 /* In the future extend to include curr_fh for use with migration */ 994 unsigned char one_fs:1; 995 struct nfs4_sequence_args seq_args; 996 }; 997 998 struct nfs41_reclaim_complete_res { 999 struct nfs4_sequence_res seq_res; 1000 }; 1001 #endif /* CONFIG_NFS_V4_1 */ 1002 1003 struct nfs_page; 1004 1005 #define NFS_PAGEVEC_SIZE (8U) 1006 1007 struct nfs_read_data { 1008 int flags; 1009 struct rpc_task task; 1010 struct inode *inode; 1011 struct rpc_cred *cred; 1012 struct nfs_fattr fattr; /* fattr storage */ 1013 struct list_head pages; /* Coalesced read requests */ 1014 struct nfs_page *req; /* multi ops per nfs_page */ 1015 struct page **pagevec; 1016 unsigned int npages; /* Max length of pagevec */ 1017 struct nfs_readargs args; 1018 struct nfs_readres res; 1019 unsigned long timestamp; /* For lease renewal */ 1020 struct pnfs_layout_segment *lseg; 1021 struct nfs_client *ds_clp; /* pNFS data server */ 1022 const struct rpc_call_ops *mds_ops; 1023 int (*read_done_cb) (struct rpc_task *task, struct nfs_read_data *data); 1024 __u64 mds_offset; 1025 struct page *page_array[NFS_PAGEVEC_SIZE]; 1026 }; 1027 1028 struct nfs_write_data { 1029 int flags; 1030 struct rpc_task task; 1031 struct inode *inode; 1032 struct rpc_cred *cred; 1033 struct nfs_fattr fattr; 1034 struct nfs_writeverf verf; 1035 struct list_head pages; /* Coalesced requests we wish to flush */ 1036 struct nfs_page *req; /* multi ops per nfs_page */ 1037 struct page **pagevec; 1038 unsigned int npages; /* Max length of pagevec */ 1039 struct nfs_writeargs args; /* argument struct */ 1040 struct nfs_writeres res; /* result struct */ 1041 struct pnfs_layout_segment *lseg; 1042 struct nfs_client *ds_clp; /* pNFS data server */ 1043 const struct rpc_call_ops *mds_ops; 1044 int (*write_done_cb) (struct rpc_task *task, struct nfs_write_data *data); 1045 #ifdef CONFIG_NFS_V4 1046 unsigned long timestamp; /* For lease renewal */ 1047 #endif 1048 __u64 mds_offset; /* Filelayout dense stripe */ 1049 struct page *page_array[NFS_PAGEVEC_SIZE]; 1050 }; 1051 1052 struct nfs_access_entry; 1053 struct nfs_client; 1054 struct rpc_timeout; 1055 1056 /* 1057 * RPC procedure vector for NFSv2/NFSv3 demuxing 1058 */ 1059 struct nfs_rpc_ops { 1060 u32 version; /* Protocol version */ 1061 const struct dentry_operations *dentry_ops; 1062 const struct inode_operations *dir_inode_ops; 1063 const struct inode_operations *file_inode_ops; 1064 1065 int (*getroot) (struct nfs_server *, struct nfs_fh *, 1066 struct nfs_fsinfo *); 1067 int (*lookupfh)(struct nfs_server *, struct nfs_fh *, 1068 struct qstr *, struct nfs_fh *, 1069 struct nfs_fattr *); 1070 int (*getattr) (struct nfs_server *, struct nfs_fh *, 1071 struct nfs_fattr *); 1072 int (*setattr) (struct dentry *, struct nfs_fattr *, 1073 struct iattr *); 1074 int (*lookup) (struct inode *, struct qstr *, 1075 struct nfs_fh *, struct nfs_fattr *); 1076 int (*access) (struct inode *, struct nfs_access_entry *); 1077 int (*readlink)(struct inode *, struct page *, unsigned int, 1078 unsigned int); 1079 int (*create) (struct inode *, struct dentry *, 1080 struct iattr *, int, struct nfs_open_context *); 1081 int (*remove) (struct inode *, struct qstr *); 1082 void (*unlink_setup) (struct rpc_message *, struct inode *dir); 1083 int (*unlink_done) (struct rpc_task *, struct inode *); 1084 int (*rename) (struct inode *, struct qstr *, 1085 struct inode *, struct qstr *); 1086 void (*rename_setup) (struct rpc_message *msg, struct inode *dir); 1087 int (*rename_done) (struct rpc_task *task, struct inode *old_dir, struct inode *new_dir); 1088 int (*link) (struct inode *, struct inode *, struct qstr *); 1089 int (*symlink) (struct inode *, struct dentry *, struct page *, 1090 unsigned int, struct iattr *); 1091 int (*mkdir) (struct inode *, struct dentry *, struct iattr *); 1092 int (*rmdir) (struct inode *, struct qstr *); 1093 int (*readdir) (struct dentry *, struct rpc_cred *, 1094 u64, struct page **, unsigned int, int); 1095 int (*mknod) (struct inode *, struct dentry *, struct iattr *, 1096 dev_t); 1097 int (*statfs) (struct nfs_server *, struct nfs_fh *, 1098 struct nfs_fsstat *); 1099 int (*fsinfo) (struct nfs_server *, struct nfs_fh *, 1100 struct nfs_fsinfo *); 1101 int (*pathconf) (struct nfs_server *, struct nfs_fh *, 1102 struct nfs_pathconf *); 1103 int (*set_capabilities)(struct nfs_server *, struct nfs_fh *); 1104 int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, int); 1105 void (*read_setup) (struct nfs_read_data *, struct rpc_message *); 1106 int (*read_done) (struct rpc_task *, struct nfs_read_data *); 1107 void (*write_setup) (struct nfs_write_data *, struct rpc_message *); 1108 int (*write_done) (struct rpc_task *, struct nfs_write_data *); 1109 void (*commit_setup) (struct nfs_write_data *, struct rpc_message *); 1110 int (*commit_done) (struct rpc_task *, struct nfs_write_data *); 1111 int (*lock)(struct file *, int, struct file_lock *); 1112 int (*lock_check_bounds)(const struct file_lock *); 1113 void (*clear_acl_cache)(struct inode *); 1114 void (*close_context)(struct nfs_open_context *ctx, int); 1115 struct inode * (*open_context) (struct inode *dir, 1116 struct nfs_open_context *ctx, 1117 int open_flags, 1118 struct iattr *iattr); 1119 int (*init_client) (struct nfs_client *, const struct rpc_timeout *, 1120 const char *, rpc_authflavor_t, int); 1121 }; 1122 1123 /* 1124 * NFS_CALL(getattr, inode, (fattr)); 1125 * into 1126 * NFS_PROTO(inode)->getattr(fattr); 1127 */ 1128 #define NFS_CALL(op, inode, args) NFS_PROTO(inode)->op args 1129 1130 /* 1131 * Function vectors etc. for the NFS client 1132 */ 1133 extern const struct nfs_rpc_ops nfs_v2_clientops; 1134 extern const struct nfs_rpc_ops nfs_v3_clientops; 1135 extern const struct nfs_rpc_ops nfs_v4_clientops; 1136 extern struct rpc_version nfs_version2; 1137 extern struct rpc_version nfs_version3; 1138 extern struct rpc_version nfs_version4; 1139 1140 extern struct rpc_version nfsacl_version3; 1141 extern struct rpc_program nfsacl_program; 1142 1143 #endif 1144