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