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