linux/fs/nfsd/xdr.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2/* XDR types for nfsd. This is mainly a typing exercise. */
   3
   4#ifndef LINUX_NFSD_H
   5#define LINUX_NFSD_H
   6
   7#include <linux/vfs.h>
   8#include "nfsd.h"
   9#include "nfsfh.h"
  10
  11struct nfsd_fhandle {
  12        struct svc_fh           fh;
  13};
  14
  15struct nfsd_sattrargs {
  16        struct svc_fh           fh;
  17        struct iattr            attrs;
  18};
  19
  20struct nfsd_diropargs {
  21        struct svc_fh           fh;
  22        char *                  name;
  23        unsigned int            len;
  24};
  25
  26struct nfsd_readargs {
  27        struct svc_fh           fh;
  28        __u32                   offset;
  29        __u32                   count;
  30};
  31
  32struct nfsd_writeargs {
  33        svc_fh                  fh;
  34        __u32                   offset;
  35        int                     len;
  36        struct kvec             first;
  37};
  38
  39struct nfsd_createargs {
  40        struct svc_fh           fh;
  41        char *                  name;
  42        unsigned int            len;
  43        struct iattr            attrs;
  44};
  45
  46struct nfsd_renameargs {
  47        struct svc_fh           ffh;
  48        char *                  fname;
  49        unsigned int            flen;
  50        struct svc_fh           tfh;
  51        char *                  tname;
  52        unsigned int            tlen;
  53};
  54
  55struct nfsd_linkargs {
  56        struct svc_fh           ffh;
  57        struct svc_fh           tfh;
  58        char *                  tname;
  59        unsigned int            tlen;
  60};
  61
  62struct nfsd_symlinkargs {
  63        struct svc_fh           ffh;
  64        char *                  fname;
  65        unsigned int            flen;
  66        char *                  tname;
  67        unsigned int            tlen;
  68        struct iattr            attrs;
  69        struct kvec             first;
  70};
  71
  72struct nfsd_readdirargs {
  73        struct svc_fh           fh;
  74        __u32                   cookie;
  75        __u32                   count;
  76};
  77
  78struct nfsd_stat {
  79        __be32                  status;
  80};
  81
  82struct nfsd_attrstat {
  83        __be32                  status;
  84        struct svc_fh           fh;
  85        struct kstat            stat;
  86};
  87
  88struct nfsd_diropres  {
  89        __be32                  status;
  90        struct svc_fh           fh;
  91        struct kstat            stat;
  92};
  93
  94struct nfsd_readlinkres {
  95        __be32                  status;
  96        int                     len;
  97        struct page             *page;
  98};
  99
 100struct nfsd_readres {
 101        __be32                  status;
 102        struct svc_fh           fh;
 103        unsigned long           count;
 104        struct kstat            stat;
 105        struct page             **pages;
 106};
 107
 108struct nfsd_readdirres {
 109        /* Components of the reply */
 110        __be32                  status;
 111
 112        int                     count;
 113
 114        /* Used to encode the reply's entry list */
 115        struct xdr_stream       xdr;
 116        struct xdr_buf          dirlist;
 117        struct readdir_cd       common;
 118        unsigned int            cookie_offset;
 119};
 120
 121struct nfsd_statfsres {
 122        __be32                  status;
 123        struct kstatfs          stats;
 124};
 125
 126/*
 127 * Storage requirements for XDR arguments and results.
 128 */
 129union nfsd_xdrstore {
 130        struct nfsd_sattrargs   sattr;
 131        struct nfsd_diropargs   dirop;
 132        struct nfsd_readargs    read;
 133        struct nfsd_writeargs   write;
 134        struct nfsd_createargs  create;
 135        struct nfsd_renameargs  rename;
 136        struct nfsd_linkargs    link;
 137        struct nfsd_symlinkargs symlink;
 138        struct nfsd_readdirargs readdir;
 139};
 140
 141#define NFS2_SVC_XDRSIZE        sizeof(union nfsd_xdrstore)
 142
 143
 144int nfssvc_decode_fhandleargs(struct svc_rqst *, __be32 *);
 145int nfssvc_decode_sattrargs(struct svc_rqst *, __be32 *);
 146int nfssvc_decode_diropargs(struct svc_rqst *, __be32 *);
 147int nfssvc_decode_readargs(struct svc_rqst *, __be32 *);
 148int nfssvc_decode_writeargs(struct svc_rqst *, __be32 *);
 149int nfssvc_decode_createargs(struct svc_rqst *, __be32 *);
 150int nfssvc_decode_renameargs(struct svc_rqst *, __be32 *);
 151int nfssvc_decode_linkargs(struct svc_rqst *, __be32 *);
 152int nfssvc_decode_symlinkargs(struct svc_rqst *, __be32 *);
 153int nfssvc_decode_readdirargs(struct svc_rqst *, __be32 *);
 154int nfssvc_encode_statres(struct svc_rqst *, __be32 *);
 155int nfssvc_encode_attrstatres(struct svc_rqst *, __be32 *);
 156int nfssvc_encode_diropres(struct svc_rqst *, __be32 *);
 157int nfssvc_encode_readlinkres(struct svc_rqst *, __be32 *);
 158int nfssvc_encode_readres(struct svc_rqst *, __be32 *);
 159int nfssvc_encode_statfsres(struct svc_rqst *, __be32 *);
 160int nfssvc_encode_readdirres(struct svc_rqst *, __be32 *);
 161
 162void nfssvc_encode_nfscookie(struct nfsd_readdirres *resp, u32 offset);
 163int nfssvc_encode_entry(void *data, const char *name, int namlen,
 164                        loff_t offset, u64 ino, unsigned int d_type);
 165
 166void nfssvc_release_attrstat(struct svc_rqst *rqstp);
 167void nfssvc_release_diropres(struct svc_rqst *rqstp);
 168void nfssvc_release_readres(struct svc_rqst *rqstp);
 169
 170/* Helper functions for NFSv2 ACL code */
 171bool svcxdr_decode_fhandle(struct xdr_stream *xdr, struct svc_fh *fhp);
 172bool svcxdr_encode_stat(struct xdr_stream *xdr, __be32 status);
 173bool svcxdr_encode_fattr(struct svc_rqst *rqstp, struct xdr_stream *xdr,
 174                         const struct svc_fh *fhp, const struct kstat *stat);
 175
 176#endif /* LINUX_NFSD_H */
 177