nfs_xdr.h revision 3dda5e434721f942870ee30bc6103761618d410f
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_getaclargs { 440 struct nfs_fh * fh; 441 size_t acl_len; 442 unsigned int acl_pgbase; 443 struct page ** acl_pages; 444 struct nfs4_sequence_args seq_args; 445}; 446 447struct nfs_setattrres { 448 struct nfs_fattr * fattr; 449 const struct nfs_server * server; 450 struct nfs4_sequence_res seq_res; 451}; 452 453struct nfs_linkargs { 454 struct nfs_fh * fromfh; 455 struct nfs_fh * tofh; 456 const char * toname; 457 unsigned int tolen; 458}; 459 460struct nfs_symlinkargs { 461 struct nfs_fh * fromfh; 462 const char * fromname; 463 unsigned int fromlen; 464 struct page ** pages; 465 unsigned int pathlen; 466 struct iattr * sattr; 467}; 468 469struct nfs_readdirargs { 470 struct nfs_fh * fh; 471 __u32 cookie; 472 unsigned int count; 473 struct page ** pages; 474}; 475 476struct nfs3_getaclargs { 477 struct nfs_fh * fh; 478 int mask; 479 struct page ** pages; 480}; 481 482struct nfs3_setaclargs { 483 struct inode * inode; 484 int mask; 485 struct posix_acl * acl_access; 486 struct posix_acl * acl_default; 487 size_t len; 488 unsigned int npages; 489 struct page ** pages; 490}; 491 492struct nfs_diropok { 493 struct nfs_fh * fh; 494 struct nfs_fattr * fattr; 495}; 496 497struct nfs_readlinkargs { 498 struct nfs_fh * fh; 499 unsigned int pgbase; 500 unsigned int pglen; 501 struct page ** pages; 502}; 503 504struct nfs3_sattrargs { 505 struct nfs_fh * fh; 506 struct iattr * sattr; 507 unsigned int guard; 508 struct timespec guardtime; 509}; 510 511struct nfs3_diropargs { 512 struct nfs_fh * fh; 513 const char * name; 514 unsigned int len; 515}; 516 517struct nfs3_accessargs { 518 struct nfs_fh * fh; 519 __u32 access; 520}; 521 522struct nfs3_createargs { 523 struct nfs_fh * fh; 524 const char * name; 525 unsigned int len; 526 struct iattr * sattr; 527 enum nfs3_createmode createmode; 528 __be32 verifier[2]; 529}; 530 531struct nfs3_mkdirargs { 532 struct nfs_fh * fh; 533 const char * name; 534 unsigned int len; 535 struct iattr * sattr; 536}; 537 538struct nfs3_symlinkargs { 539 struct nfs_fh * fromfh; 540 const char * fromname; 541 unsigned int fromlen; 542 struct page ** pages; 543 unsigned int pathlen; 544 struct iattr * sattr; 545}; 546 547struct nfs3_mknodargs { 548 struct nfs_fh * fh; 549 const char * name; 550 unsigned int len; 551 enum nfs3_ftype type; 552 struct iattr * sattr; 553 dev_t rdev; 554}; 555 556struct nfs3_renameargs { 557 struct nfs_fh * fromfh; 558 const char * fromname; 559 unsigned int fromlen; 560 struct nfs_fh * tofh; 561 const char * toname; 562 unsigned int tolen; 563}; 564 565struct nfs3_linkargs { 566 struct nfs_fh * fromfh; 567 struct nfs_fh * tofh; 568 const char * toname; 569 unsigned int tolen; 570}; 571 572struct nfs3_readdirargs { 573 struct nfs_fh * fh; 574 __u64 cookie; 575 __be32 verf[2]; 576 int plus; 577 unsigned int count; 578 struct page ** pages; 579}; 580 581struct nfs3_diropres { 582 struct nfs_fattr * dir_attr; 583 struct nfs_fh * fh; 584 struct nfs_fattr * fattr; 585}; 586 587struct nfs3_accessres { 588 struct nfs_fattr * fattr; 589 __u32 access; 590}; 591 592struct nfs3_readlinkargs { 593 struct nfs_fh * fh; 594 unsigned int pgbase; 595 unsigned int pglen; 596 struct page ** pages; 597}; 598 599struct nfs3_renameres { 600 struct nfs_fattr * fromattr; 601 struct nfs_fattr * toattr; 602}; 603 604struct nfs3_linkres { 605 struct nfs_fattr * dir_attr; 606 struct nfs_fattr * fattr; 607}; 608 609struct nfs3_readdirres { 610 struct nfs_fattr * dir_attr; 611 __be32 * verf; 612 int plus; 613}; 614 615struct nfs3_getaclres { 616 struct nfs_fattr * fattr; 617 int mask; 618 unsigned int acl_access_count; 619 unsigned int acl_default_count; 620 struct posix_acl * acl_access; 621 struct posix_acl * acl_default; 622}; 623 624#ifdef CONFIG_NFS_V4 625 626typedef u64 clientid4; 627 628struct nfs4_accessargs { 629 const struct nfs_fh * fh; 630 const u32 * bitmask; 631 u32 access; 632 struct nfs4_sequence_args seq_args; 633}; 634 635struct nfs4_accessres { 636 const struct nfs_server * server; 637 struct nfs_fattr * fattr; 638 u32 supported; 639 u32 access; 640 struct nfs4_sequence_res seq_res; 641}; 642 643struct nfs4_create_arg { 644 u32 ftype; 645 union { 646 struct { 647 struct page ** pages; 648 unsigned int len; 649 } symlink; /* NF4LNK */ 650 struct { 651 u32 specdata1; 652 u32 specdata2; 653 } device; /* NF4BLK, NF4CHR */ 654 } u; 655 const struct qstr * name; 656 const struct nfs_server * server; 657 const struct iattr * attrs; 658 const struct nfs_fh * dir_fh; 659 const u32 * bitmask; 660 struct nfs4_sequence_args seq_args; 661}; 662 663struct nfs4_create_res { 664 const struct nfs_server * server; 665 struct nfs_fh * fh; 666 struct nfs_fattr * fattr; 667 struct nfs4_change_info dir_cinfo; 668 struct nfs_fattr * dir_fattr; 669 struct nfs4_sequence_res seq_res; 670}; 671 672struct nfs4_fsinfo_arg { 673 const struct nfs_fh * fh; 674 const u32 * bitmask; 675 struct nfs4_sequence_args seq_args; 676}; 677 678struct nfs4_fsinfo_res { 679 struct nfs_fsinfo *fsinfo; 680 struct nfs4_sequence_res seq_res; 681}; 682 683struct nfs4_getattr_arg { 684 const struct nfs_fh * fh; 685 const u32 * bitmask; 686 struct nfs4_sequence_args seq_args; 687}; 688 689struct nfs4_getattr_res { 690 const struct nfs_server * server; 691 struct nfs_fattr * fattr; 692 struct nfs4_sequence_res seq_res; 693}; 694 695struct nfs4_link_arg { 696 const struct nfs_fh * fh; 697 const struct nfs_fh * dir_fh; 698 const struct qstr * name; 699 const u32 * bitmask; 700 struct nfs4_sequence_args seq_args; 701}; 702 703struct nfs4_link_res { 704 const struct nfs_server * server; 705 struct nfs_fattr * fattr; 706 struct nfs4_change_info cinfo; 707 struct nfs_fattr * dir_attr; 708 struct nfs4_sequence_res seq_res; 709}; 710 711 712struct nfs4_lookup_arg { 713 const struct nfs_fh * dir_fh; 714 const struct qstr * name; 715 const u32 * bitmask; 716 struct nfs4_sequence_args seq_args; 717}; 718 719struct nfs4_lookup_res { 720 const struct nfs_server * server; 721 struct nfs_fattr * fattr; 722 struct nfs_fh * fh; 723 struct nfs4_sequence_res seq_res; 724}; 725 726struct nfs4_lookup_root_arg { 727 const u32 * bitmask; 728 struct nfs4_sequence_args seq_args; 729}; 730 731struct nfs4_pathconf_arg { 732 const struct nfs_fh * fh; 733 const u32 * bitmask; 734 struct nfs4_sequence_args seq_args; 735}; 736 737struct nfs4_readdir_arg { 738 const struct nfs_fh * fh; 739 u64 cookie; 740 nfs4_verifier verifier; 741 u32 count; 742 struct page ** pages; /* zero-copy data */ 743 unsigned int pgbase; /* zero-copy data */ 744 const u32 * bitmask; 745 struct nfs4_sequence_args seq_args; 746}; 747 748struct nfs4_readdir_res { 749 nfs4_verifier verifier; 750 unsigned int pgbase; 751 struct nfs4_sequence_res seq_res; 752}; 753 754struct nfs4_readlink { 755 const struct nfs_fh * fh; 756 unsigned int pgbase; 757 unsigned int pglen; /* zero-copy data */ 758 struct page ** pages; /* zero-copy data */ 759 struct nfs4_sequence_args seq_args; 760}; 761 762struct nfs4_readlink_res { 763 struct nfs4_sequence_res seq_res; 764}; 765 766struct nfs4_rename_arg { 767 const struct nfs_fh * old_dir; 768 const struct nfs_fh * new_dir; 769 const struct qstr * old_name; 770 const struct qstr * new_name; 771 const u32 * bitmask; 772 struct nfs4_sequence_args seq_args; 773}; 774 775struct nfs4_rename_res { 776 const struct nfs_server * server; 777 struct nfs4_change_info old_cinfo; 778 struct nfs_fattr * old_fattr; 779 struct nfs4_change_info new_cinfo; 780 struct nfs_fattr * new_fattr; 781 struct nfs4_sequence_res seq_res; 782}; 783 784#define NFS4_SETCLIENTID_NAMELEN (127) 785struct nfs4_setclientid { 786 const nfs4_verifier * sc_verifier; 787 unsigned int sc_name_len; 788 char sc_name[NFS4_SETCLIENTID_NAMELEN + 1]; 789 u32 sc_prog; 790 unsigned int sc_netid_len; 791 char sc_netid[RPCBIND_MAXNETIDLEN + 1]; 792 unsigned int sc_uaddr_len; 793 char sc_uaddr[RPCBIND_MAXUADDRLEN + 1]; 794 u32 sc_cb_ident; 795}; 796 797struct nfs4_statfs_arg { 798 const struct nfs_fh * fh; 799 const u32 * bitmask; 800 struct nfs4_sequence_args seq_args; 801}; 802 803struct nfs4_statfs_res { 804 struct nfs_fsstat *fsstat; 805 struct nfs4_sequence_res seq_res; 806}; 807 808struct nfs4_server_caps_arg { 809 struct nfs_fh *fhandle; 810 struct nfs4_sequence_args seq_args; 811}; 812 813struct nfs4_server_caps_res { 814 u32 attr_bitmask[2]; 815 u32 acl_bitmask; 816 u32 has_links; 817 u32 has_symlinks; 818 struct nfs4_sequence_res seq_res; 819}; 820 821struct nfs4_string { 822 unsigned int len; 823 char *data; 824}; 825 826#define NFS4_PATHNAME_MAXCOMPONENTS 512 827struct nfs4_pathname { 828 unsigned int ncomponents; 829 struct nfs4_string components[NFS4_PATHNAME_MAXCOMPONENTS]; 830}; 831 832#define NFS4_FS_LOCATION_MAXSERVERS 10 833struct nfs4_fs_location { 834 unsigned int nservers; 835 struct nfs4_string servers[NFS4_FS_LOCATION_MAXSERVERS]; 836 struct nfs4_pathname rootpath; 837}; 838 839#define NFS4_FS_LOCATIONS_MAXENTRIES 10 840struct nfs4_fs_locations { 841 struct nfs_fattr fattr; 842 const struct nfs_server *server; 843 struct nfs4_pathname fs_path; 844 int nlocations; 845 struct nfs4_fs_location locations[NFS4_FS_LOCATIONS_MAXENTRIES]; 846}; 847 848struct nfs4_fs_locations_arg { 849 const struct nfs_fh *dir_fh; 850 const struct qstr *name; 851 struct page *page; 852 const u32 *bitmask; 853 struct nfs4_sequence_args seq_args; 854}; 855 856#endif /* CONFIG_NFS_V4 */ 857 858struct nfs_page; 859 860#define NFS_PAGEVEC_SIZE (8U) 861 862struct nfs_read_data { 863 int flags; 864 struct rpc_task task; 865 struct inode *inode; 866 struct rpc_cred *cred; 867 struct nfs_fattr fattr; /* fattr storage */ 868 struct list_head pages; /* Coalesced read requests */ 869 struct nfs_page *req; /* multi ops per nfs_page */ 870 struct page **pagevec; 871 unsigned int npages; /* Max length of pagevec */ 872 struct nfs_readargs args; 873 struct nfs_readres res; 874#ifdef CONFIG_NFS_V4 875 unsigned long timestamp; /* For lease renewal */ 876#endif 877 struct page *page_array[NFS_PAGEVEC_SIZE]; 878}; 879 880struct nfs_write_data { 881 int flags; 882 struct rpc_task task; 883 struct inode *inode; 884 struct rpc_cred *cred; 885 struct nfs_fattr fattr; 886 struct nfs_writeverf verf; 887 struct list_head pages; /* Coalesced requests we wish to flush */ 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_writeargs args; /* argument struct */ 892 struct nfs_writeres res; /* result struct */ 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_access_entry; 900 901/* 902 * RPC procedure vector for NFSv2/NFSv3 demuxing 903 */ 904struct nfs_rpc_ops { 905 u32 version; /* Protocol version */ 906 const struct dentry_operations *dentry_ops; 907 const struct inode_operations *dir_inode_ops; 908 const struct inode_operations *file_inode_ops; 909 910 int (*getroot) (struct nfs_server *, struct nfs_fh *, 911 struct nfs_fsinfo *); 912 int (*lookupfh)(struct nfs_server *, struct nfs_fh *, 913 struct qstr *, struct nfs_fh *, 914 struct nfs_fattr *); 915 int (*getattr) (struct nfs_server *, struct nfs_fh *, 916 struct nfs_fattr *); 917 int (*setattr) (struct dentry *, struct nfs_fattr *, 918 struct iattr *); 919 int (*lookup) (struct inode *, struct qstr *, 920 struct nfs_fh *, struct nfs_fattr *); 921 int (*access) (struct inode *, struct nfs_access_entry *); 922 int (*readlink)(struct inode *, struct page *, unsigned int, 923 unsigned int); 924 int (*create) (struct inode *, struct dentry *, 925 struct iattr *, int, struct nameidata *); 926 int (*remove) (struct inode *, struct qstr *); 927 void (*unlink_setup) (struct rpc_message *, struct inode *dir); 928 int (*unlink_done) (struct rpc_task *, struct inode *); 929 int (*rename) (struct inode *, struct qstr *, 930 struct inode *, struct qstr *); 931 int (*link) (struct inode *, struct inode *, struct qstr *); 932 int (*symlink) (struct inode *, struct dentry *, struct page *, 933 unsigned int, struct iattr *); 934 int (*mkdir) (struct inode *, struct dentry *, struct iattr *); 935 int (*rmdir) (struct inode *, struct qstr *); 936 int (*readdir) (struct dentry *, struct rpc_cred *, 937 u64, struct page *, unsigned int, int); 938 int (*mknod) (struct inode *, struct dentry *, struct iattr *, 939 dev_t); 940 int (*statfs) (struct nfs_server *, struct nfs_fh *, 941 struct nfs_fsstat *); 942 int (*fsinfo) (struct nfs_server *, struct nfs_fh *, 943 struct nfs_fsinfo *); 944 int (*pathconf) (struct nfs_server *, struct nfs_fh *, 945 struct nfs_pathconf *); 946 int (*set_capabilities)(struct nfs_server *, struct nfs_fh *); 947 __be32 *(*decode_dirent)(__be32 *, struct nfs_entry *, int plus); 948 void (*read_setup) (struct nfs_read_data *, struct rpc_message *); 949 int (*read_done) (struct rpc_task *, struct nfs_read_data *); 950 void (*write_setup) (struct nfs_write_data *, struct rpc_message *); 951 int (*write_done) (struct rpc_task *, struct nfs_write_data *); 952 void (*commit_setup) (struct nfs_write_data *, struct rpc_message *); 953 int (*commit_done) (struct rpc_task *, struct nfs_write_data *); 954 int (*lock)(struct file *, int, struct file_lock *); 955 int (*lock_check_bounds)(const struct file_lock *); 956 void (*clear_acl_cache)(struct inode *); 957 void (*close_context)(struct nfs_open_context *ctx, int); 958}; 959 960/* 961 * NFS_CALL(getattr, inode, (fattr)); 962 * into 963 * NFS_PROTO(inode)->getattr(fattr); 964 */ 965#define NFS_CALL(op, inode, args) NFS_PROTO(inode)->op args 966 967/* 968 * Function vectors etc. for the NFS client 969 */ 970extern const struct nfs_rpc_ops nfs_v2_clientops; 971extern const struct nfs_rpc_ops nfs_v3_clientops; 972extern const struct nfs_rpc_ops nfs_v4_clientops; 973extern struct rpc_version nfs_version2; 974extern struct rpc_version nfs_version3; 975extern struct rpc_version nfs_version4; 976 977extern struct rpc_version nfsacl_version3; 978extern struct rpc_program nfsacl_program; 979 980#endif 981