| #ifndef _LINUX_NFS_XDR_H |
| #define _LINUX_NFS_XDR_H |
| |
| struct nfs_fattr { |
| unsigned short valid; /* which fields are valid */ |
| __u64 pre_size; /* pre_op_attr.size */ |
| __u64 pre_mtime; /* pre_op_attr.mtime */ |
| __u64 pre_ctime; /* pre_op_attr.ctime */ |
| enum nfs_ftype type; /* always use NFSv2 types */ |
| __u32 mode; |
| __u32 nlink; |
| __u32 uid; |
| __u32 gid; |
| __u64 size; |
| union { |
| struct { |
| __u32 blocksize; |
| __u32 blocks; |
| } nfs2; |
| struct { |
| __u64 used; |
| } nfs3; |
| } du; |
| __u32 rdev; |
| __u64 fsid; |
| __u64 fileid; |
| __u64 atime; |
| __u64 mtime; |
| __u64 ctime; |
| }; |
| |
| #define NFS_ATTR_WCC 0x0001 /* pre-op WCC data */ |
| #define NFS_ATTR_FATTR 0x0002 /* post-op attributes */ |
| #define NFS_ATTR_FATTR_V3 0x0004 /* NFSv3 attributes */ |
| |
| /* |
| * Info on the file system |
| */ |
| struct nfs_fsinfo { |
| __u32 rtmax; /* max. read transfer size */ |
| __u32 rtpref; /* pref. read transfer size */ |
| __u32 rtmult; /* reads should be multiple of this */ |
| __u32 wtmax; /* max. write transfer size */ |
| __u32 wtpref; /* pref. write transfer size */ |
| __u32 wtmult; /* writes should be multiple of this */ |
| __u32 dtpref; /* pref. readdir transfer size */ |
| __u64 maxfilesize; |
| __u64 bsize; /* block size */ |
| __u64 tbytes; /* total size in bytes */ |
| __u64 fbytes; /* # of free bytes */ |
| __u64 abytes; /* # of bytes available to user */ |
| __u64 tfiles; /* # of files */ |
| __u64 ffiles; /* # of free files */ |
| __u64 afiles; /* # of files available to user */ |
| __u32 linkmax;/* max # of hard links */ |
| __u32 namelen;/* max name length */ |
| }; |
| |
| /* Arguments to the read call. |
| * Note that NFS_READ_MAXIOV must be <= (MAX_IOVEC-2) from sunrpc/xprt.h |
| */ |
| #define NFS_READ_MAXIOV (9) |
| |
| struct nfs_readargs { |
| struct nfs_fh * fh; |
| __u64 offset; |
| __u32 count; |
| unsigned int pgbase; |
| struct page ** pages; |
| }; |
| |
| struct nfs_readres { |
| struct nfs_fattr * fattr; |
| __u32 count; |
| int eof; |
| }; |
| |
| /* Arguments to the write call. |
| * Note that NFS_WRITE_MAXIOV must be <= (MAX_IOVEC-2) from sunrpc/xprt.h |
| */ |
| #define NFS_WRITE_MAXIOV (9) |
| struct nfs_writeargs { |
| struct nfs_fh * fh; |
| __u64 offset; |
| __u32 count; |
| enum nfs3_stable_how stable; |
| unsigned int pgbase; |
| struct page ** pages; |
| }; |
| |
| struct nfs_writeverf { |
| enum nfs3_stable_how committed; |
| __u32 verifier[2]; |
| }; |
| |
| struct nfs_writeres { |
| struct nfs_fattr * fattr; |
| struct nfs_writeverf * verf; |
| __u32 count; |
| }; |
| |
| /* |
| * Argument struct for decode_entry function |
| */ |
| struct nfs_entry { |
| __u64 ino; |
| __u64 cookie, |
| prev_cookie; |
| const char * name; |
| unsigned int len; |
| int eof; |
| }; |
| |
| /* |
| * The following types are for NFSv2 only. |
| */ |
| struct nfs_sattrargs { |
| struct nfs_fh * fh; |
| struct iattr * sattr; |
| }; |
| |
| struct nfs_diropargs { |
| struct nfs_fh * fh; |
| const char * name; |
| unsigned int len; |
| }; |
| |
| struct nfs_createargs { |
| struct nfs_fh * fh; |
| const char * name; |
| unsigned int len; |
| struct iattr * sattr; |
| }; |
| |
| struct nfs_renameargs { |
| struct nfs_fh * fromfh; |
| const char * fromname; |
| unsigned int fromlen; |
| struct nfs_fh * tofh; |
| const char * toname; |
| unsigned int tolen; |
| }; |
| |
| struct nfs_linkargs { |
| struct nfs_fh * fromfh; |
| struct nfs_fh * tofh; |
| const char * toname; |
| unsigned int tolen; |
| }; |
| |
| struct nfs_symlinkargs { |
| struct nfs_fh * fromfh; |
| const char * fromname; |
| unsigned int fromlen; |
| const char * topath; |
| unsigned int tolen; |
| struct iattr * sattr; |
| }; |
| |
| struct nfs_readdirargs { |
| struct nfs_fh * fh; |
| __u32 cookie; |
| unsigned int count; |
| struct page ** pages; |
| }; |
| |
| struct nfs_diropok { |
| struct nfs_fh * fh; |
| struct nfs_fattr * fattr; |
| }; |
| |
| struct nfs_readlinkargs { |
| struct nfs_fh * fh; |
| unsigned int count; |
| struct page ** pages; |
| }; |
| |
| struct nfs3_sattrargs { |
| struct nfs_fh * fh; |
| struct iattr * sattr; |
| unsigned int guard; |
| __u64 guardtime; |
| }; |
| |
| struct nfs3_diropargs { |
| struct nfs_fh * fh; |
| const char * name; |
| unsigned int len; |
| }; |
| |
| struct nfs3_accessargs { |
| struct nfs_fh * fh; |
| __u32 access; |
| }; |
| |
| struct nfs3_createargs { |
| struct nfs_fh * fh; |
| const char * name; |
| unsigned int len; |
| struct iattr * sattr; |
| enum nfs3_createmode createmode; |
| __u32 verifier[2]; |
| }; |
| |
| struct nfs3_mkdirargs { |
| struct nfs_fh * fh; |
| const char * name; |
| unsigned int len; |
| struct iattr * sattr; |
| }; |
| |
| struct nfs3_symlinkargs { |
| struct nfs_fh * fromfh; |
| const char * fromname; |
| unsigned int fromlen; |
| const char * topath; |
| unsigned int tolen; |
| struct iattr * sattr; |
| }; |
| |
| struct nfs3_mknodargs { |
| struct nfs_fh * fh; |
| const char * name; |
| unsigned int len; |
| enum nfs3_ftype type; |
| struct iattr * sattr; |
| dev_t rdev; |
| }; |
| |
| struct nfs3_renameargs { |
| struct nfs_fh * fromfh; |
| const char * fromname; |
| unsigned int fromlen; |
| struct nfs_fh * tofh; |
| const char * toname; |
| unsigned int tolen; |
| }; |
| |
| struct nfs3_linkargs { |
| struct nfs_fh * fromfh; |
| struct nfs_fh * tofh; |
| const char * toname; |
| unsigned int tolen; |
| }; |
| |
| struct nfs3_readdirargs { |
| struct nfs_fh * fh; |
| __u64 cookie; |
| __u32 verf[2]; |
| int plus; |
| unsigned int count; |
| struct page ** pages; |
| }; |
| |
| struct nfs3_diropres { |
| struct nfs_fattr * dir_attr; |
| struct nfs_fh * fh; |
| struct nfs_fattr * fattr; |
| }; |
| |
| struct nfs3_accessres { |
| struct nfs_fattr * fattr; |
| __u32 access; |
| }; |
| |
| struct nfs3_readlinkargs { |
| struct nfs_fh * fh; |
| unsigned int count; |
| struct page ** pages; |
| }; |
| |
| struct nfs3_renameres { |
| struct nfs_fattr * fromattr; |
| struct nfs_fattr * toattr; |
| }; |
| |
| struct nfs3_linkres { |
| struct nfs_fattr * dir_attr; |
| struct nfs_fattr * fattr; |
| }; |
| |
| struct nfs3_readdirres { |
| struct nfs_fattr * dir_attr; |
| __u32 * verf; |
| int plus; |
| }; |
| |
| /* |
| * RPC procedure vector for NFSv2/NFSv3 demuxing |
| */ |
| struct nfs_rpc_ops { |
| int version; /* Protocol version */ |
| |
| int (*getroot) (struct nfs_server *, struct nfs_fh *, |
| struct nfs_fattr *); |
| int (*getattr) (struct inode *, struct nfs_fattr *); |
| int (*setattr) (struct inode *, struct nfs_fattr *, |
| struct iattr *); |
| int (*lookup) (struct inode *, struct qstr *, |
| struct nfs_fh *, struct nfs_fattr *); |
| int (*access) (struct inode *, int , int); |
| int (*readlink)(struct inode *, struct page *); |
| int (*read) (struct inode *, struct rpc_cred *, |
| struct nfs_fattr *, |
| int, unsigned int, unsigned int, |
| struct page *, int *eofp); |
| int (*write) (struct inode *, struct rpc_cred *, |
| struct nfs_fattr *, |
| int, unsigned int, unsigned int, |
| struct page *, struct nfs_writeverf *verfp); |
| int (*commit) (struct inode *, struct nfs_fattr *, |
| unsigned long, unsigned int); |
| int (*create) (struct inode *, struct qstr *, struct iattr *, |
| int, struct nfs_fh *, struct nfs_fattr *); |
| int (*remove) (struct inode *, struct qstr *); |
| int (*unlink_setup) (struct rpc_message *, |
| struct dentry *, struct qstr *); |
| void (*unlink_done) (struct dentry *, struct rpc_message *); |
| int (*rename) (struct inode *, struct qstr *, |
| struct inode *, struct qstr *); |
| int (*link) (struct inode *, struct inode *, struct qstr *); |
| int (*symlink) (struct inode *, struct qstr *, struct qstr *, |
| struct iattr *, struct nfs_fh *, |
| struct nfs_fattr *); |
| int (*mkdir) (struct inode *, struct qstr *, struct iattr *, |
| struct nfs_fh *, struct nfs_fattr *); |
| int (*rmdir) (struct inode *, struct qstr *); |
| int (*readdir) (struct inode *, struct rpc_cred *, |
| u64, struct page *, unsigned int, int); |
| int (*mknod) (struct inode *, struct qstr *, struct iattr *, |
| dev_t, struct nfs_fh *, struct nfs_fattr *); |
| int (*statfs) (struct nfs_server *, struct nfs_fh *, |
| struct nfs_fsinfo *); |
| u32 * (*decode_dirent)(u32 *, struct nfs_entry *, int plus); |
| }; |
| |
| /* |
| * NFS_CALL(getattr, inode, (fattr)); |
| * into |
| * NFS_PROTO(inode)->getattr(fattr); |
| */ |
| #define NFS_CALL(op, inode, args) NFS_PROTO(inode)->op args |
| |
| /* |
| * Function vectors etc. for the NFS client |
| */ |
| extern struct nfs_rpc_ops nfs_v2_clientops; |
| extern struct nfs_rpc_ops nfs_v3_clientops; |
| extern struct rpc_version nfs_version2; |
| extern struct rpc_version nfs_version3; |
| extern struct rpc_program nfs_program; |
| extern struct rpc_stat nfs_rpcstat; |
| |
| #endif |