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