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