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