1#ifndef _LINUX_NFS_XDR_H 2#define _LINUX_NFS_XDR_H 3 4struct nfs_fattr { 5 unsigned short valid; /* which fields are valid */ 6 __u64 pre_size; /* pre_op_attr.size */ 7 __u64 pre_mtime; /* pre_op_attr.mtime */ 8 __u64 pre_ctime; /* pre_op_attr.ctime */ 9 enum nfs_ftype type; /* always use NFSv2 types */ 10 __u32 mode; 11 __u32 nlink; 12 __u32 uid; 13 __u32 gid; 14 __u64 size; 15 union { 16 struct { 17 __u32 blocksize; 18 __u32 blocks; 19 } nfs2; 20 struct { 21 __u64 used; 22 } nfs3; 23 } du; 24 __u32 rdev; 25 __u64 fsid; 26 __u64 fileid; 27 __u64 atime; 28 __u64 mtime; 29 __u64 ctime; 30}; 31 32#define NFS_ATTR_WCC 0x0001 /* pre-op WCC data */ 33#define NFS_ATTR_FATTR 0x0002 /* post-op attributes */ 34#define NFS_ATTR_FATTR_V3 0x0004 /* NFSv3 attributes */ 35 36/* 37 * Info on the file system 38 */ 39struct nfs_fsinfo { 40 __u32 rtmax; /* max. read transfer size */ 41 __u32 rtpref; /* pref. read transfer size */ 42 __u32 rtmult; /* reads should be multiple of this */ 43 __u32 wtmax; /* max. write transfer size */ 44 __u32 wtpref; /* pref. write transfer size */ 45 __u32 wtmult; /* writes should be multiple of this */ 46 __u32 dtpref; /* pref. readdir transfer size */ 47 __u64 maxfilesize; 48 __u64 bsize; /* block size */ 49 __u64 tbytes; /* total size in bytes */ 50 __u64 fbytes; /* # of free bytes */ 51 __u64 abytes; /* # of bytes available to user */ 52 __u64 tfiles; /* # of files */ 53 __u64 ffiles; /* # of free files */ 54 __u64 afiles; /* # of files available to user */ 55 __u32 linkmax;/* max # of hard links */ 56 __u32 namelen;/* max name length */ 57}; 58 59/* Arguments to the read call. 60 * Note that NFS_READ_MAXIOV must be <= (MAX_IOVEC-2) from sunrpc/xprt.h 61 */ 62#define NFS_READ_MAXIOV 8 63 64struct nfs_readargs { 65 struct nfs_fh * fh; 66 __u64 offset; 67 __u32 count; 68 unsigned int pgbase; 69 struct page ** pages; 70}; 71 72struct nfs_readres { 73 struct nfs_fattr * fattr; 74 __u32 count; 75 int eof; 76}; 77 78/* Arguments to the write call. 79 * Note that NFS_WRITE_MAXIOV must be <= (MAX_IOVEC-2) from sunrpc/xprt.h 80 */ 81#define NFS_WRITE_MAXIOV 8 82struct nfs_writeargs { 83 struct nfs_fh * fh; 84 __u64 offset; 85 __u32 count; 86 enum nfs3_stable_how stable; 87 unsigned int pgbase; 88 struct page ** pages; 89}; 90 91struct nfs_writeverf { 92 enum nfs3_stable_how committed; 93 __u32 verifier[2]; 94}; 95 96struct nfs_writeres { 97 struct nfs_fattr * fattr; 98 struct nfs_writeverf * verf; 99 __u32 count; 100}; 101 102/* 103 * Argument struct for decode_entry function 104 */ 105struct nfs_entry { 106 __u64 ino; 107 __u64 cookie, 108 prev_cookie; 109 const char * name; 110 unsigned int len; 111 int eof; 112 struct nfs_fh fh; 113 struct nfs_fattr fattr; 114}; 115 116/* 117 * The following types are for NFSv2 only. 118 */ 119struct nfs_sattrargs { 120 struct nfs_fh * fh; 121 struct iattr * sattr; 122}; 123 124struct nfs_diropargs { 125 struct nfs_fh * fh; 126 const char * name; 127 unsigned int len; 128}; 129 130struct nfs_createargs { 131 struct nfs_fh * fh; 132 const char * name; 133 unsigned int len; 134 struct iattr * sattr; 135}; 136 137struct nfs_renameargs { 138 struct nfs_fh * fromfh; 139 const char * fromname; 140 unsigned int fromlen; 141 struct nfs_fh * tofh; 142 const char * toname; 143 unsigned int tolen; 144}; 145 146struct nfs_linkargs { 147 struct nfs_fh * fromfh; 148 struct nfs_fh * tofh; 149 const char * toname; 150 unsigned int tolen; 151}; 152 153struct nfs_symlinkargs { 154 struct nfs_fh * fromfh; 155 const char * fromname; 156 unsigned int fromlen; 157 const char * topath; 158 unsigned int tolen; 159 struct iattr * sattr; 160}; 161 162struct nfs_readdirargs { 163 struct nfs_fh * fh; 164 __u32 cookie; 165 unsigned int count; 166 struct page ** pages; 167}; 168 169struct nfs_diropok { 170 struct nfs_fh * fh; 171 struct nfs_fattr * fattr; 172}; 173 174struct nfs_readlinkargs { 175 struct nfs_fh * fh; 176 unsigned int count; 177 struct page ** pages; 178}; 179 180struct nfs3_sattrargs { 181 struct nfs_fh * fh; 182 struct iattr * sattr; 183 unsigned int guard; 184 __u64 guardtime; 185}; 186 187struct nfs3_diropargs { 188 struct nfs_fh * fh; 189 const char * name; 190 unsigned int len; 191}; 192 193struct nfs3_accessargs { 194 struct nfs_fh * fh; 195 __u32 access; 196}; 197 198struct nfs3_createargs { 199 struct nfs_fh * fh; 200 const char * name; 201 unsigned int len; 202 struct iattr * sattr; 203 enum nfs3_createmode createmode; 204 __u32 verifier[2]; 205}; 206 207struct nfs3_mkdirargs { 208 struct nfs_fh * fh; 209 const char * name; 210 unsigned int len; 211 struct iattr * sattr; 212}; 213 214struct nfs3_symlinkargs { 215 struct nfs_fh * fromfh; 216 const char * fromname; 217 unsigned int fromlen; 218 const char * topath; 219 unsigned int tolen; 220 struct iattr * sattr; 221}; 222 223struct nfs3_mknodargs { 224 struct nfs_fh * fh; 225 const char * name; 226 unsigned int len; 227 enum nfs3_ftype type; 228 struct iattr * sattr; 229 dev_t rdev; 230}; 231 232struct nfs3_renameargs { 233 struct nfs_fh * fromfh; 234 const char * fromname; 235 unsigned int fromlen; 236 struct nfs_fh * tofh; 237 const char * toname; 238 unsigned int tolen; 239}; 240 241struct nfs3_linkargs { 242 struct nfs_fh * fromfh; 243 struct nfs_fh * tofh; 244 const char * toname; 245 unsigned int tolen; 246}; 247 248struct nfs3_readdirargs { 249 struct nfs_fh * fh; 250 __u64 cookie; 251 __u32 verf[2]; 252 int plus; 253 unsigned int count; 254 struct page ** pages; 255}; 256 257struct nfs3_diropres { 258 struct nfs_fattr * dir_attr; 259 struct nfs_fh * fh; 260 struct nfs_fattr * fattr; 261}; 262 263struct nfs3_accessres { 264 struct nfs_fattr * fattr; 265 __u32 access; 266}; 267 268struct nfs3_readlinkargs { 269 struct nfs_fh * fh; 270 unsigned int count; 271 struct page ** pages; 272}; 273 274struct nfs3_renameres { 275 struct nfs_fattr * fromattr; 276 struct nfs_fattr * toattr; 277}; 278 279struct nfs3_linkres { 280 struct nfs_fattr * dir_attr; 281 struct nfs_fattr * fattr; 282}; 283 284struct nfs3_readdirres { 285 struct nfs_fattr * dir_attr; 286 __u32 * verf; 287 int plus; 288}; 289 290/* 291 * RPC procedure vector for NFSv2/NFSv3 demuxing 292 */ 293struct nfs_rpc_ops { 294 int version; /* Protocol version */ 295 296 int (*getroot) (struct nfs_server *, struct nfs_fh *, 297 struct nfs_fattr *); 298 int (*getattr) (struct inode *, struct nfs_fattr *); 299 int (*setattr) (struct inode *, struct nfs_fattr *, 300 struct iattr *); 301 int (*lookup) (struct inode *, struct qstr *, 302 struct nfs_fh *, struct nfs_fattr *); 303 int (*access) (struct inode *, int , int); 304 int (*readlink)(struct inode *, struct page *); 305 int (*read) (struct inode *, struct rpc_cred *, 306 struct nfs_fattr *, 307 int, unsigned int, unsigned int, 308 struct page *, int *eofp); 309 int (*write) (struct inode *, struct rpc_cred *, 310 struct nfs_fattr *, 311 int, unsigned int, unsigned int, 312 struct page *, struct nfs_writeverf *verfp); 313 int (*commit) (struct inode *, struct nfs_fattr *, 314 unsigned long, unsigned int); 315 int (*create) (struct inode *, struct qstr *, struct iattr *, 316 int, struct nfs_fh *, struct nfs_fattr *); 317 int (*remove) (struct inode *, struct qstr *); 318 int (*unlink_setup) (struct rpc_message *, 319 struct dentry *, struct qstr *); 320 void (*unlink_done) (struct dentry *, struct rpc_message *); 321 int (*rename) (struct inode *, struct qstr *, 322 struct inode *, struct qstr *); 323 int (*link) (struct inode *, struct inode *, struct qstr *); 324 int (*symlink) (struct inode *, struct qstr *, struct qstr *, 325 struct iattr *, struct nfs_fh *, 326 struct nfs_fattr *); 327 int (*mkdir) (struct inode *, struct qstr *, struct iattr *, 328 struct nfs_fh *, struct nfs_fattr *); 329 int (*rmdir) (struct inode *, struct qstr *); 330 int (*readdir) (struct inode *, struct rpc_cred *, 331 u64, struct page *, unsigned int, int); 332 int (*mknod) (struct inode *, struct qstr *, struct iattr *, 333 dev_t, struct nfs_fh *, struct nfs_fattr *); 334 int (*statfs) (struct nfs_server *, struct nfs_fh *, 335 struct nfs_fsinfo *); 336 u32 * (*decode_dirent)(u32 *, struct nfs_entry *, int plus); 337}; 338 339/* 340 * NFS_CALL(getattr, inode, (fattr)); 341 * into 342 * NFS_PROTO(inode)->getattr(fattr); 343 */ 344#define NFS_CALL(op, inode, args) NFS_PROTO(inode)->op args 345 346/* 347 * Function vectors etc. for the NFS client 348 */ 349extern struct nfs_rpc_ops nfs_v2_clientops; 350extern struct nfs_rpc_ops nfs_v3_clientops; 351extern struct rpc_version nfs_version2; 352extern struct rpc_version nfs_version3; 353extern struct rpc_program nfs_program; 354extern struct rpc_stat nfs_rpcstat; 355 356#endif 357