|  | /* | 
|  | * linux/include/linux/nfsd/xdr.h | 
|  | * | 
|  | * XDR types for nfsd. This is mainly a typing exercise. | 
|  | */ | 
|  |  | 
|  | #ifndef LINUX_NFSD_H | 
|  | #define LINUX_NFSD_H | 
|  |  | 
|  | #include <linux/fs.h> | 
|  | #include <linux/vfs.h> | 
|  | #include <linux/nfs.h> | 
|  |  | 
|  | struct nfsd_fhandle { | 
|  | struct svc_fh		fh; | 
|  | }; | 
|  |  | 
|  | struct nfsd_sattrargs { | 
|  | struct svc_fh		fh; | 
|  | struct iattr		attrs; | 
|  | }; | 
|  |  | 
|  | struct nfsd_diropargs { | 
|  | struct svc_fh		fh; | 
|  | char *			name; | 
|  | unsigned int		len; | 
|  | }; | 
|  |  | 
|  | struct nfsd_readargs { | 
|  | struct svc_fh		fh; | 
|  | __u32			offset; | 
|  | __u32			count; | 
|  | int			vlen; | 
|  | }; | 
|  |  | 
|  | struct nfsd_writeargs { | 
|  | svc_fh			fh; | 
|  | __u32			offset; | 
|  | int			len; | 
|  | int			vlen; | 
|  | }; | 
|  |  | 
|  | struct nfsd_createargs { | 
|  | struct svc_fh		fh; | 
|  | char *			name; | 
|  | unsigned int		len; | 
|  | struct iattr		attrs; | 
|  | }; | 
|  |  | 
|  | struct nfsd_renameargs { | 
|  | struct svc_fh		ffh; | 
|  | char *			fname; | 
|  | unsigned int		flen; | 
|  | struct svc_fh		tfh; | 
|  | char *			tname; | 
|  | unsigned int		tlen; | 
|  | }; | 
|  |  | 
|  | struct nfsd_readlinkargs { | 
|  | struct svc_fh		fh; | 
|  | char *			buffer; | 
|  | }; | 
|  |  | 
|  | struct nfsd_linkargs { | 
|  | struct svc_fh		ffh; | 
|  | struct svc_fh		tfh; | 
|  | char *			tname; | 
|  | unsigned int		tlen; | 
|  | }; | 
|  |  | 
|  | struct nfsd_symlinkargs { | 
|  | struct svc_fh		ffh; | 
|  | char *			fname; | 
|  | unsigned int		flen; | 
|  | char *			tname; | 
|  | unsigned int		tlen; | 
|  | struct iattr		attrs; | 
|  | }; | 
|  |  | 
|  | struct nfsd_readdirargs { | 
|  | struct svc_fh		fh; | 
|  | __u32			cookie; | 
|  | __u32			count; | 
|  | __be32 *		buffer; | 
|  | }; | 
|  |  | 
|  | struct nfsd_attrstat { | 
|  | struct svc_fh		fh; | 
|  | struct kstat		stat; | 
|  | }; | 
|  |  | 
|  | struct nfsd_diropres  { | 
|  | struct svc_fh		fh; | 
|  | struct kstat		stat; | 
|  | }; | 
|  |  | 
|  | struct nfsd_readlinkres { | 
|  | int			len; | 
|  | }; | 
|  |  | 
|  | struct nfsd_readres { | 
|  | struct svc_fh		fh; | 
|  | unsigned long		count; | 
|  | struct kstat		stat; | 
|  | }; | 
|  |  | 
|  | struct nfsd_readdirres { | 
|  | int			count; | 
|  |  | 
|  | struct readdir_cd	common; | 
|  | __be32 *		buffer; | 
|  | int			buflen; | 
|  | __be32 *		offset; | 
|  | }; | 
|  |  | 
|  | struct nfsd_statfsres { | 
|  | struct kstatfs		stats; | 
|  | }; | 
|  |  | 
|  | /* | 
|  | * Storage requirements for XDR arguments and results. | 
|  | */ | 
|  | union nfsd_xdrstore { | 
|  | struct nfsd_sattrargs	sattr; | 
|  | struct nfsd_diropargs	dirop; | 
|  | struct nfsd_readargs	read; | 
|  | struct nfsd_writeargs	write; | 
|  | struct nfsd_createargs	create; | 
|  | struct nfsd_renameargs	rename; | 
|  | struct nfsd_linkargs	link; | 
|  | struct nfsd_symlinkargs	symlink; | 
|  | struct nfsd_readdirargs	readdir; | 
|  | }; | 
|  |  | 
|  | #define NFS2_SVC_XDRSIZE	sizeof(union nfsd_xdrstore) | 
|  |  | 
|  |  | 
|  | int nfssvc_decode_void(struct svc_rqst *, __be32 *, void *); | 
|  | int nfssvc_decode_fhandle(struct svc_rqst *, __be32 *, struct nfsd_fhandle *); | 
|  | int nfssvc_decode_sattrargs(struct svc_rqst *, __be32 *, | 
|  | struct nfsd_sattrargs *); | 
|  | int nfssvc_decode_diropargs(struct svc_rqst *, __be32 *, | 
|  | struct nfsd_diropargs *); | 
|  | int nfssvc_decode_readargs(struct svc_rqst *, __be32 *, | 
|  | struct nfsd_readargs *); | 
|  | int nfssvc_decode_writeargs(struct svc_rqst *, __be32 *, | 
|  | struct nfsd_writeargs *); | 
|  | int nfssvc_decode_createargs(struct svc_rqst *, __be32 *, | 
|  | struct nfsd_createargs *); | 
|  | int nfssvc_decode_renameargs(struct svc_rqst *, __be32 *, | 
|  | struct nfsd_renameargs *); | 
|  | int nfssvc_decode_readlinkargs(struct svc_rqst *, __be32 *, | 
|  | struct nfsd_readlinkargs *); | 
|  | int nfssvc_decode_linkargs(struct svc_rqst *, __be32 *, | 
|  | struct nfsd_linkargs *); | 
|  | int nfssvc_decode_symlinkargs(struct svc_rqst *, __be32 *, | 
|  | struct nfsd_symlinkargs *); | 
|  | int nfssvc_decode_readdirargs(struct svc_rqst *, __be32 *, | 
|  | struct nfsd_readdirargs *); | 
|  | int nfssvc_encode_void(struct svc_rqst *, __be32 *, void *); | 
|  | int nfssvc_encode_attrstat(struct svc_rqst *, __be32 *, struct nfsd_attrstat *); | 
|  | int nfssvc_encode_diropres(struct svc_rqst *, __be32 *, struct nfsd_diropres *); | 
|  | int nfssvc_encode_readlinkres(struct svc_rqst *, __be32 *, struct nfsd_readlinkres *); | 
|  | int nfssvc_encode_readres(struct svc_rqst *, __be32 *, struct nfsd_readres *); | 
|  | int nfssvc_encode_statfsres(struct svc_rqst *, __be32 *, struct nfsd_statfsres *); | 
|  | int nfssvc_encode_readdirres(struct svc_rqst *, __be32 *, struct nfsd_readdirres *); | 
|  |  | 
|  | int nfssvc_encode_entry(void *, const char *name, | 
|  | int namlen, loff_t offset, u64 ino, unsigned int); | 
|  |  | 
|  | int nfssvc_release_fhandle(struct svc_rqst *, __be32 *, struct nfsd_fhandle *); | 
|  |  | 
|  | /* Helper functions for NFSv2 ACL code */ | 
|  | __be32 *nfs2svc_encode_fattr(struct svc_rqst *rqstp, __be32 *p, struct svc_fh *fhp); | 
|  | __be32 *nfs2svc_decode_fh(__be32 *p, struct svc_fh *fhp); | 
|  |  | 
|  | #endif /* LINUX_NFSD_H */ |