1 #ifndef _LINUX_NFS_XDR_H 2 #define _LINUX_NFS_XDR_H 3 4 struct 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 */ 39 struct 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 (9) 63 64 struct nfs_readargs { 65 struct nfs_fh * fh; 66 __u64 offset; 67 __u32 count; 68 unsigned int pgbase; 69 struct page ** pages; 70 }; 71 72 struct 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 (9) 82 struct 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 91 struct nfs_writeverf { 92 enum nfs3_stable_how committed; 93 __u32 verifier[2]; 94 }; 95 96 struct 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 */ 105 struct nfs_entry { 106 __u64 ino; 107 __u64 cookie, 108 prev_cookie; 109 const char * name; 110 unsigned int len; 111 int eof; 112 }; 113 114 /* 115 * The following types are for NFSv2 only. 116 */ 117 struct nfs_sattrargs { 118 struct nfs_fh * fh; 119 struct iattr * sattr; 120 }; 121 122 struct nfs_diropargs { 123 struct nfs_fh * fh; 124 const char * name; 125 unsigned int len; 126 }; 127 128 struct nfs_createargs { 129 struct nfs_fh * fh; 130 const char * name; 131 unsigned int len; 132 struct iattr * sattr; 133 }; 134 135 struct nfs_renameargs { 136 struct nfs_fh * fromfh; 137 const char * fromname; 138 unsigned int fromlen; 139 struct nfs_fh * tofh; 140 const char * toname; 141 unsigned int tolen; 142 }; 143 144 struct nfs_linkargs { 145 struct nfs_fh * fromfh; 146 struct nfs_fh * tofh; 147 const char * toname; 148 unsigned int tolen; 149 }; 150 151 struct nfs_symlinkargs { 152 struct nfs_fh * fromfh; 153 const char * fromname; 154 unsigned int fromlen; 155 const char * topath; 156 unsigned int tolen; 157 struct iattr * sattr; 158 }; 159 160 struct nfs_readdirargs { 161 struct nfs_fh * fh; 162 __u32 cookie; 163 unsigned int count; 164 struct page ** pages; 165 }; 166 167 struct nfs_diropok { 168 struct nfs_fh * fh; 169 struct nfs_fattr * fattr; 170 }; 171 172 struct nfs_readlinkargs { 173 struct nfs_fh * fh; 174 unsigned int count; 175 struct page ** pages; 176 }; 177 178 struct nfs3_sattrargs { 179 struct nfs_fh * fh; 180 struct iattr * sattr; 181 unsigned int guard; 182 __u64 guardtime; 183 }; 184 185 struct nfs3_diropargs { 186 struct nfs_fh * fh; 187 const char * name; 188 unsigned int len; 189 }; 190 191 struct nfs3_accessargs { 192 struct nfs_fh * fh; 193 __u32 access; 194 }; 195 196 struct nfs3_createargs { 197 struct nfs_fh * fh; 198 const char * name; 199 unsigned int len; 200 struct iattr * sattr; 201 enum nfs3_createmode createmode; 202 __u32 verifier[2]; 203 }; 204 205 struct nfs3_mkdirargs { 206 struct nfs_fh * fh; 207 const char * name; 208 unsigned int len; 209 struct iattr * sattr; 210 }; 211 212 struct nfs3_symlinkargs { 213 struct nfs_fh * fromfh; 214 const char * fromname; 215 unsigned int fromlen; 216 const char * topath; 217 unsigned int tolen; 218 struct iattr * sattr; 219 }; 220 221 struct nfs3_mknodargs { 222 struct nfs_fh * fh; 223 const char * name; 224 unsigned int len; 225 enum nfs3_ftype type; 226 struct iattr * sattr; 227 dev_t rdev; 228 }; 229 230 struct nfs3_renameargs { 231 struct nfs_fh * fromfh; 232 const char * fromname; 233 unsigned int fromlen; 234 struct nfs_fh * tofh; 235 const char * toname; 236 unsigned int tolen; 237 }; 238 239 struct nfs3_linkargs { 240 struct nfs_fh * fromfh; 241 struct nfs_fh * tofh; 242 const char * toname; 243 unsigned int tolen; 244 }; 245 246 struct nfs3_readdirargs { 247 struct nfs_fh * fh; 248 __u64 cookie; 249 __u32 verf[2]; 250 int plus; 251 unsigned int count; 252 struct page ** pages; 253 }; 254 255 struct nfs3_diropres { 256 struct nfs_fattr * dir_attr; 257 struct nfs_fh * fh; 258 struct nfs_fattr * fattr; 259 }; 260 261 struct nfs3_accessres { 262 struct nfs_fattr * fattr; 263 __u32 access; 264 }; 265 266 struct nfs3_readlinkargs { 267 struct nfs_fh * fh; 268 unsigned int count; 269 struct page ** pages; 270 }; 271 272 struct nfs3_renameres { 273 struct nfs_fattr * fromattr; 274 struct nfs_fattr * toattr; 275 }; 276 277 struct nfs3_linkres { 278 struct nfs_fattr * dir_attr; 279 struct nfs_fattr * fattr; 280 }; 281 282 struct nfs3_readdirres { 283 struct nfs_fattr * dir_attr; 284 __u32 * verf; 285 int plus; 286 }; 287 288 /* 289 * RPC procedure vector for NFSv2/NFSv3 demuxing 290 */ 291 struct nfs_rpc_ops { 292 int version; /* Protocol version */ 293 294 int (*getroot) (struct nfs_server *, struct nfs_fh *, 295 struct nfs_fattr *); 296 int (*getattr) (struct inode *, struct nfs_fattr *); 297 int (*setattr) (struct inode *, struct nfs_fattr *, 298 struct iattr *); 299 int (*lookup) (struct inode *, struct qstr *, 300 struct nfs_fh *, struct nfs_fattr *); 301 int (*access) (struct inode *, int , int); 302 int (*readlink)(struct inode *, struct page *); 303 int (*read) (struct inode *, struct rpc_cred *, 304 struct nfs_fattr *, 305 int, unsigned int, unsigned int, 306 struct page *, int *eofp); 307 int (*write) (struct inode *, struct rpc_cred *, 308 struct nfs_fattr *, 309 int, unsigned int, unsigned int, 310 struct page *, struct nfs_writeverf *verfp); 311 int (*commit) (struct inode *, struct nfs_fattr *, 312 unsigned long, unsigned int); 313 int (*create) (struct inode *, struct qstr *, struct iattr *, 314 int, struct nfs_fh *, struct nfs_fattr *); 315 int (*remove) (struct inode *, struct qstr *); 316 int (*unlink_setup) (struct rpc_message *, 317 struct dentry *, struct qstr *); 318 void (*unlink_done) (struct dentry *, struct rpc_message *); 319 int (*rename) (struct inode *, struct qstr *, 320 struct inode *, struct qstr *); 321 int (*link) (struct inode *, struct inode *, struct qstr *); 322 int (*symlink) (struct inode *, struct qstr *, struct qstr *, 323 struct iattr *, struct nfs_fh *, 324 struct nfs_fattr *); 325 int (*mkdir) (struct inode *, struct qstr *, struct iattr *, 326 struct nfs_fh *, struct nfs_fattr *); 327 int (*rmdir) (struct inode *, struct qstr *); 328 int (*readdir) (struct inode *, struct rpc_cred *, 329 u64, struct page *, unsigned int, int); 330 int (*mknod) (struct inode *, struct qstr *, struct iattr *, 331 dev_t, struct nfs_fh *, struct nfs_fattr *); 332 int (*statfs) (struct nfs_server *, struct nfs_fh *, 333 struct nfs_fsinfo *); 334 u32 * (*decode_dirent)(u32 *, struct nfs_entry *, int plus); 335 }; 336 337 /* 338 * NFS_CALL(getattr, inode, (fattr)); 339 * into 340 * NFS_PROTO(inode)->getattr(fattr); 341 */ 342 #define NFS_CALL(op, inode, args) NFS_PROTO(inode)->op args 343 344 /* 345 * Function vectors etc. for the NFS client 346 */ 347 extern struct nfs_rpc_ops nfs_v2_clientops; 348 extern struct nfs_rpc_ops nfs_v3_clientops; 349 extern struct rpc_version nfs_version2; 350 extern struct rpc_version nfs_version3; 351 extern struct rpc_program nfs_program; 352 extern struct rpc_stat nfs_rpcstat; 353 354 #endif 355