nfs_xdr.h revision 64419a9b20938d9070fdd8c58c2fa23c911915f8
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 struct timespec time_delta; /* server time granularity */ 116 __u32 lease_time; /* in seconds */ 117 __u32 layouttype; /* supported pnfs layout driver */ 118}; 119 120struct 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 130struct 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 138struct 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 144struct nfs4_change_info { 145 u32 atomic; 146 u64 before; 147 u64 after; 148}; 149 150struct nfs_seqid; 151 152/* nfs41 sessions channel attributes */ 153struct 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 */ 163struct nfs4_slot { 164 u32 seq_nr; 165}; 166 167struct nfs4_sequence_args { 168 struct nfs4_session *sa_session; 169 u8 sa_slotid; 170 u8 sa_cache_this; 171}; 172 173struct 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 181struct nfs4_get_lease_time_args { 182 struct nfs4_sequence_args la_seq_args; 183}; 184 185struct 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 192struct nfs4_layoutdriver_data { 193 __u32 len; 194 void *buf; 195}; 196 197struct pnfs_layout_range { 198 u32 iomode; 199 u64 offset; 200 u64 length; 201}; 202 203struct 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 214struct 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 223struct nfs4_layoutget { 224 struct nfs4_layoutget_args args; 225 struct nfs4_layoutget_res res; 226 struct pnfs_layout_segment **lsegpp; 227}; 228 229struct nfs4_getdeviceinfo_args { 230 struct pnfs_device *pdev; 231 struct nfs4_sequence_args seq_args; 232}; 233 234struct 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 */ 242struct 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 264struct 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 */ 284struct nfs_open_confirmargs { 285 const struct nfs_fh * fh; 286 nfs4_stateid * stateid; 287 struct nfs_seqid * seqid; 288}; 289 290struct nfs_open_confirmres { 291 nfs4_stateid stateid; 292 struct nfs_seqid * seqid; 293}; 294 295/* 296 * Arguments to the close call. 297 */ 298struct 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 307struct 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 * */ 317struct nfs_lowner { 318 __u64 clientid; 319 __u64 id; 320 dev_t s_dev; 321}; 322 323struct 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 337struct 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 344struct 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 352struct nfs_locku_res { 353 nfs4_stateid stateid; 354 struct nfs_seqid * seqid; 355 struct nfs4_sequence_res seq_res; 356}; 357 358struct 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 365struct nfs_lockt_res { 366 struct file_lock * denied; /* LOCK, LOCKT failed */ 367 struct nfs4_sequence_res seq_res; 368}; 369 370struct nfs_release_lockowner_args { 371 struct nfs_lowner lock_owner; 372}; 373 374struct 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 381struct 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 */ 390struct 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 401struct 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 */ 411struct 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 424struct nfs_writeverf { 425 enum nfs3_stable_how committed; 426 __be32 verifier[2]; 427}; 428 429struct 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 */ 440struct 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 447struct 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 */ 457struct 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 466struct 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 */ 478struct 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 */ 494struct nfs_sattrargs { 495 struct nfs_fh * fh; 496 struct iattr * sattr; 497}; 498 499struct nfs_diropargs { 500 struct nfs_fh * fh; 501 const char * name; 502 unsigned int len; 503}; 504 505struct nfs_createargs { 506 struct nfs_fh * fh; 507 const char * name; 508 unsigned int len; 509 struct iattr * sattr; 510}; 511 512struct 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 521struct 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 529struct nfs_setaclres { 530 struct nfs4_sequence_res seq_res; 531}; 532 533struct 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 541struct nfs_getaclres { 542 size_t acl_len; 543 struct nfs4_sequence_res seq_res; 544}; 545 546struct nfs_setattrres { 547 struct nfs_fattr * fattr; 548 const struct nfs_server * server; 549 struct nfs4_sequence_res seq_res; 550}; 551 552struct nfs_linkargs { 553 struct nfs_fh * fromfh; 554 struct nfs_fh * tofh; 555 const char * toname; 556 unsigned int tolen; 557}; 558 559struct 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 568struct nfs_readdirargs { 569 struct nfs_fh * fh; 570 __u32 cookie; 571 unsigned int count; 572 struct page ** pages; 573}; 574 575struct nfs3_getaclargs { 576 struct nfs_fh * fh; 577 int mask; 578 struct page ** pages; 579}; 580 581struct 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 591struct nfs_diropok { 592 struct nfs_fh * fh; 593 struct nfs_fattr * fattr; 594}; 595 596struct nfs_readlinkargs { 597 struct nfs_fh * fh; 598 unsigned int pgbase; 599 unsigned int pglen; 600 struct page ** pages; 601}; 602 603struct nfs3_sattrargs { 604 struct nfs_fh * fh; 605 struct iattr * sattr; 606 unsigned int guard; 607 struct timespec guardtime; 608}; 609 610struct nfs3_diropargs { 611 struct nfs_fh * fh; 612 const char * name; 613 unsigned int len; 614}; 615 616struct nfs3_accessargs { 617 struct nfs_fh * fh; 618 __u32 access; 619}; 620 621struct 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 630struct nfs3_mkdirargs { 631 struct nfs_fh * fh; 632 const char * name; 633 unsigned int len; 634 struct iattr * sattr; 635}; 636 637struct 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 646struct 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 655struct nfs3_linkargs { 656 struct nfs_fh * fromfh; 657 struct nfs_fh * tofh; 658 const char * toname; 659 unsigned int tolen; 660}; 661 662struct 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 671struct nfs3_diropres { 672 struct nfs_fattr * dir_attr; 673 struct nfs_fh * fh; 674 struct nfs_fattr * fattr; 675}; 676 677struct nfs3_accessres { 678 struct nfs_fattr * fattr; 679 __u32 access; 680}; 681 682struct nfs3_readlinkargs { 683 struct nfs_fh * fh; 684 unsigned int pgbase; 685 unsigned int pglen; 686 struct page ** pages; 687}; 688 689struct nfs3_linkres { 690 struct nfs_fattr * dir_attr; 691 struct nfs_fattr * fattr; 692}; 693 694struct nfs3_readdirres { 695 struct nfs_fattr * dir_attr; 696 __be32 * verf; 697 int plus; 698}; 699 700struct 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 711typedef u64 clientid4; 712 713struct nfs4_accessargs { 714 const struct nfs_fh * fh; 715 const u32 * bitmask; 716 u32 access; 717 struct nfs4_sequence_args seq_args; 718}; 719 720struct 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 728struct 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 748struct 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 757struct nfs4_fsinfo_arg { 758 const struct nfs_fh * fh; 759 const u32 * bitmask; 760 struct nfs4_sequence_args seq_args; 761}; 762 763struct nfs4_fsinfo_res { 764 struct nfs_fsinfo *fsinfo; 765 struct nfs4_sequence_res seq_res; 766}; 767 768struct nfs4_getattr_arg { 769 const struct nfs_fh * fh; 770 const u32 * bitmask; 771 struct nfs4_sequence_args seq_args; 772}; 773 774struct nfs4_getattr_res { 775 const struct nfs_server * server; 776 struct nfs_fattr * fattr; 777 struct nfs4_sequence_res seq_res; 778}; 779 780struct 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 788struct 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 797struct 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 804struct 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 811struct nfs4_lookup_root_arg { 812 const u32 * bitmask; 813 struct nfs4_sequence_args seq_args; 814}; 815 816struct nfs4_pathconf_arg { 817 const struct nfs_fh * fh; 818 const u32 * bitmask; 819 struct nfs4_sequence_args seq_args; 820}; 821 822struct nfs4_pathconf_res { 823 struct nfs_pathconf *pathconf; 824 struct nfs4_sequence_res seq_res; 825}; 826 827struct 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 839struct nfs4_readdir_res { 840 nfs4_verifier verifier; 841 unsigned int pgbase; 842 struct nfs4_sequence_res seq_res; 843}; 844 845struct 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 853struct nfs4_readlink_res { 854 struct nfs4_sequence_res seq_res; 855}; 856 857#define NFS4_SETCLIENTID_NAMELEN (127) 858struct 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 870struct nfs4_setclientid_res { 871 u64 clientid; 872 nfs4_verifier confirm; 873}; 874 875struct nfs4_statfs_arg { 876 const struct nfs_fh * fh; 877 const u32 * bitmask; 878 struct nfs4_sequence_args seq_args; 879}; 880 881struct nfs4_statfs_res { 882 struct nfs_fsstat *fsstat; 883 struct nfs4_sequence_res seq_res; 884}; 885 886struct nfs4_server_caps_arg { 887 struct nfs_fh *fhandle; 888 struct nfs4_sequence_args seq_args; 889}; 890 891struct 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 899struct nfs4_string { 900 unsigned int len; 901 char *data; 902}; 903 904#define NFS4_PATHNAME_MAXCOMPONENTS 512 905struct nfs4_pathname { 906 unsigned int ncomponents; 907 struct nfs4_string components[NFS4_PATHNAME_MAXCOMPONENTS]; 908}; 909 910#define NFS4_FS_LOCATION_MAXSERVERS 10 911struct 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 918struct 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 926struct 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 934struct 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 941struct nfstime4 { 942 u64 seconds; 943 u32 nseconds; 944}; 945 946#ifdef CONFIG_NFS_V4_1 947struct 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) 956struct 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 964struct server_owner { 965 uint64_t minor_id; 966 uint32_t major_id_sz; 967 char major_id[NFS4_OPAQUE_LIMIT]; 968}; 969 970struct server_scope { 971 uint32_t server_scope_sz; 972 char server_scope[NFS4_OPAQUE_LIMIT]; 973}; 974 975struct nfs41_exchange_id_res { 976 struct nfs_client *client; 977 u32 flags; 978}; 979 980struct 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 988struct nfs41_create_session_res { 989 struct nfs_client *client; 990}; 991 992struct 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 998struct nfs41_reclaim_complete_res { 999 struct nfs4_sequence_res seq_res; 1000}; 1001#endif /* CONFIG_NFS_V4_1 */ 1002 1003struct nfs_page; 1004 1005#define NFS_PAGEVEC_SIZE (8U) 1006 1007struct 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 const struct rpc_call_ops *mds_ops; 1022 struct page *page_array[NFS_PAGEVEC_SIZE]; 1023}; 1024 1025struct nfs_write_data { 1026 int flags; 1027 struct rpc_task task; 1028 struct inode *inode; 1029 struct rpc_cred *cred; 1030 struct nfs_fattr fattr; 1031 struct nfs_writeverf verf; 1032 struct list_head pages; /* Coalesced requests we wish to flush */ 1033 struct nfs_page *req; /* multi ops per nfs_page */ 1034 struct page **pagevec; 1035 unsigned int npages; /* Max length of pagevec */ 1036 struct nfs_writeargs args; /* argument struct */ 1037 struct nfs_writeres res; /* result struct */ 1038#ifdef CONFIG_NFS_V4 1039 unsigned long timestamp; /* For lease renewal */ 1040#endif 1041 struct page *page_array[NFS_PAGEVEC_SIZE]; 1042}; 1043 1044struct nfs_access_entry; 1045struct nfs_client; 1046 1047/* 1048 * RPC procedure vector for NFSv2/NFSv3 demuxing 1049 */ 1050struct nfs_rpc_ops { 1051 u32 version; /* Protocol version */ 1052 const struct dentry_operations *dentry_ops; 1053 const struct inode_operations *dir_inode_ops; 1054 const struct inode_operations *file_inode_ops; 1055 1056 int (*getroot) (struct nfs_server *, struct nfs_fh *, 1057 struct nfs_fsinfo *); 1058 int (*lookupfh)(struct nfs_server *, struct nfs_fh *, 1059 struct qstr *, struct nfs_fh *, 1060 struct nfs_fattr *); 1061 int (*getattr) (struct nfs_server *, struct nfs_fh *, 1062 struct nfs_fattr *); 1063 int (*setattr) (struct dentry *, struct nfs_fattr *, 1064 struct iattr *); 1065 int (*lookup) (struct inode *, struct qstr *, 1066 struct nfs_fh *, struct nfs_fattr *); 1067 int (*access) (struct inode *, struct nfs_access_entry *); 1068 int (*readlink)(struct inode *, struct page *, unsigned int, 1069 unsigned int); 1070 int (*create) (struct inode *, struct dentry *, 1071 struct iattr *, int, struct nfs_open_context *); 1072 int (*remove) (struct inode *, struct qstr *); 1073 void (*unlink_setup) (struct rpc_message *, struct inode *dir); 1074 int (*unlink_done) (struct rpc_task *, struct inode *); 1075 int (*rename) (struct inode *, struct qstr *, 1076 struct inode *, struct qstr *); 1077 void (*rename_setup) (struct rpc_message *msg, struct inode *dir); 1078 int (*rename_done) (struct rpc_task *task, struct inode *old_dir, struct inode *new_dir); 1079 int (*link) (struct inode *, struct inode *, struct qstr *); 1080 int (*symlink) (struct inode *, struct dentry *, struct page *, 1081 unsigned int, struct iattr *); 1082 int (*mkdir) (struct inode *, struct dentry *, struct iattr *); 1083 int (*rmdir) (struct inode *, struct qstr *); 1084 int (*readdir) (struct dentry *, struct rpc_cred *, 1085 u64, struct page **, unsigned int, int); 1086 int (*mknod) (struct inode *, struct dentry *, struct iattr *, 1087 dev_t); 1088 int (*statfs) (struct nfs_server *, struct nfs_fh *, 1089 struct nfs_fsstat *); 1090 int (*fsinfo) (struct nfs_server *, struct nfs_fh *, 1091 struct nfs_fsinfo *); 1092 int (*pathconf) (struct nfs_server *, struct nfs_fh *, 1093 struct nfs_pathconf *); 1094 int (*set_capabilities)(struct nfs_server *, struct nfs_fh *); 1095 int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, int); 1096 void (*read_setup) (struct nfs_read_data *, struct rpc_message *); 1097 int (*read_done) (struct rpc_task *, struct nfs_read_data *); 1098 void (*write_setup) (struct nfs_write_data *, struct rpc_message *); 1099 int (*write_done) (struct rpc_task *, struct nfs_write_data *); 1100 void (*commit_setup) (struct nfs_write_data *, struct rpc_message *); 1101 int (*commit_done) (struct rpc_task *, struct nfs_write_data *); 1102 int (*lock)(struct file *, int, struct file_lock *); 1103 int (*lock_check_bounds)(const struct file_lock *); 1104 void (*clear_acl_cache)(struct inode *); 1105 void (*close_context)(struct nfs_open_context *ctx, int); 1106 struct inode * (*open_context) (struct inode *dir, 1107 struct nfs_open_context *ctx, 1108 int open_flags, 1109 struct iattr *iattr); 1110 int (*init_client) (struct nfs_client *, const struct rpc_timeout *, 1111 const char *, rpc_authflavor_t, int); 1112}; 1113 1114/* 1115 * NFS_CALL(getattr, inode, (fattr)); 1116 * into 1117 * NFS_PROTO(inode)->getattr(fattr); 1118 */ 1119#define NFS_CALL(op, inode, args) NFS_PROTO(inode)->op args 1120 1121/* 1122 * Function vectors etc. for the NFS client 1123 */ 1124extern const struct nfs_rpc_ops nfs_v2_clientops; 1125extern const struct nfs_rpc_ops nfs_v3_clientops; 1126extern const struct nfs_rpc_ops nfs_v4_clientops; 1127extern struct rpc_version nfs_version2; 1128extern struct rpc_version nfs_version3; 1129extern struct rpc_version nfs_version4; 1130 1131extern struct rpc_version nfsacl_version3; 1132extern struct rpc_program nfsacl_program; 1133 1134#endif 1135