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