]>
Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | /* |
2 | You may distribute this file under either of the two licenses that | |
3 | follow at your discretion. | |
4 | */ | |
5 | ||
6 | /* BLURB lgpl | |
7 | ||
8 | Coda File System | |
9 | Release 5 | |
10 | ||
11 | Copyright (c) 1987-1999 Carnegie Mellon University | |
12 | Additional copyrights listed below | |
13 | ||
14 | This code is distributed "AS IS" without warranty of any kind under | |
15 | the terms of the GNU Library General Public Licence Version 2, as | |
16 | shown in the file LICENSE, or under the license shown below. The | |
17 | technical and financial contributors to Coda are listed in the file | |
18 | CREDITS. | |
19 | ||
20 | Additional copyrights | |
21 | */ | |
22 | ||
23 | /* | |
24 | ||
25 | Coda: an Experimental Distributed File System | |
26 | Release 4.0 | |
27 | ||
28 | Copyright (c) 1987-1999 Carnegie Mellon University | |
29 | All Rights Reserved | |
30 | ||
31 | Permission to use, copy, modify and distribute this software and its | |
32 | documentation is hereby granted, provided that both the copyright | |
33 | notice and this permission notice appear in all copies of the | |
34 | software, derivative works or modified versions, and any portions | |
35 | thereof, and that both notices appear in supporting documentation, and | |
36 | that credit is given to Carnegie Mellon University in all documents | |
37 | and publicity pertaining to direct or indirect use of this code or its | |
38 | derivatives. | |
39 | ||
40 | CODA IS AN EXPERIMENTAL SOFTWARE SYSTEM AND IS KNOWN TO HAVE BUGS, | |
41 | SOME OF WHICH MAY HAVE SERIOUS CONSEQUENCES. CARNEGIE MELLON ALLOWS | |
42 | FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION. CARNEGIE MELLON | |
43 | DISCLAIMS ANY LIABILITY OF ANY KIND FOR ANY DAMAGES WHATSOEVER | |
44 | RESULTING DIRECTLY OR INDIRECTLY FROM THE USE OF THIS SOFTWARE OR OF | |
45 | ANY DERIVATIVE WORK. | |
46 | ||
47 | Carnegie Mellon encourages users of this software to return any | |
48 | improvements or extensions that they make, and to grant Carnegie | |
49 | Mellon the rights to redistribute these changes without encumbrance. | |
50 | */ | |
51 | ||
52 | /* | |
53 | * | |
54 | * Based on cfs.h from Mach, but revamped for increased simplicity. | |
55 | * Linux modifications by | |
56 | * Peter Braam, Aug 1996 | |
57 | */ | |
58 | ||
59 | #ifndef _CODA_HEADER_ | |
60 | #define _CODA_HEADER_ | |
61 | ||
62 | #include <linux/config.h> | |
63 | ||
64 | /* Catch new _KERNEL defn for NetBSD and DJGPP/__CYGWIN32__ */ | |
65 | #if defined(__NetBSD__) || \ | |
66 | ((defined(DJGPP) || defined(__CYGWIN32__)) && !defined(KERNEL)) | |
67 | #include <sys/types.h> | |
68 | #endif | |
69 | ||
70 | #ifndef CODA_MAXSYMLINKS | |
71 | #define CODA_MAXSYMLINKS 10 | |
72 | #endif | |
73 | ||
74 | #if defined(DJGPP) || defined(__CYGWIN32__) | |
75 | #ifdef KERNEL | |
76 | typedef unsigned long u_long; | |
77 | typedef unsigned int u_int; | |
78 | typedef unsigned short u_short; | |
79 | typedef u_long ino_t; | |
80 | typedef u_long dev_t; | |
81 | typedef void * caddr_t; | |
82 | #ifdef DOS | |
83 | typedef unsigned __int64 u_quad_t; | |
84 | #else | |
85 | typedef unsigned long long u_quad_t; | |
86 | #endif | |
87 | ||
88 | #define inline | |
89 | ||
90 | struct timespec { | |
91 | long ts_sec; | |
92 | long ts_nsec; | |
93 | }; | |
94 | #else /* DJGPP but not KERNEL */ | |
95 | #include <sys/time.h> | |
96 | typedef unsigned long long u_quad_t; | |
97 | #endif /* !KERNEL */ | |
98 | #endif /* !DJGPP */ | |
99 | ||
100 | ||
101 | #if defined(__linux__) | |
102 | #include <linux/time.h> | |
103 | #define cdev_t u_quad_t | |
104 | #ifndef __KERNEL__ | |
105 | #if !defined(_UQUAD_T_) && (!defined(__GLIBC__) || __GLIBC__ < 2) | |
106 | #define _UQUAD_T_ 1 | |
107 | typedef unsigned long long u_quad_t; | |
108 | #endif | |
109 | #else /*__KERNEL__ */ | |
110 | typedef unsigned long long u_quad_t; | |
111 | #endif /* __KERNEL__ */ | |
112 | #else | |
113 | #define cdev_t dev_t | |
114 | #endif | |
115 | ||
116 | #ifdef __CYGWIN32__ | |
117 | struct timespec { | |
118 | time_t tv_sec; /* seconds */ | |
119 | long tv_nsec; /* nanoseconds */ | |
120 | }; | |
121 | #endif | |
122 | ||
123 | #ifndef __BIT_TYPES_DEFINED__ | |
124 | #define __BIT_TYPES_DEFINED__ | |
125 | typedef signed char int8_t; | |
126 | typedef unsigned char u_int8_t; | |
127 | typedef short int16_t; | |
128 | typedef unsigned short u_int16_t; | |
129 | typedef int int32_t; | |
130 | typedef unsigned int u_int32_t; | |
131 | #endif | |
132 | ||
133 | ||
134 | /* | |
135 | * Cfs constants | |
136 | */ | |
137 | #define CODA_MAXNAMLEN 255 | |
138 | #define CODA_MAXPATHLEN 1024 | |
139 | #define CODA_MAXSYMLINK 10 | |
140 | ||
141 | /* these are Coda's version of O_RDONLY etc combinations | |
142 | * to deal with VFS open modes | |
143 | */ | |
144 | #define C_O_READ 0x001 | |
145 | #define C_O_WRITE 0x002 | |
146 | #define C_O_TRUNC 0x010 | |
147 | #define C_O_EXCL 0x100 | |
148 | #define C_O_CREAT 0x200 | |
149 | ||
150 | /* these are to find mode bits in Venus */ | |
151 | #define C_M_READ 00400 | |
152 | #define C_M_WRITE 00200 | |
153 | ||
154 | /* for access Venus will use */ | |
155 | #define C_A_C_OK 8 /* Test for writing upon create. */ | |
156 | #define C_A_R_OK 4 /* Test for read permission. */ | |
157 | #define C_A_W_OK 2 /* Test for write permission. */ | |
158 | #define C_A_X_OK 1 /* Test for execute permission. */ | |
159 | #define C_A_F_OK 0 /* Test for existence. */ | |
160 | ||
161 | ||
162 | ||
163 | #ifndef _VENUS_DIRENT_T_ | |
164 | #define _VENUS_DIRENT_T_ 1 | |
165 | struct venus_dirent { | |
166 | u_int32_t d_fileno; /* file number of entry */ | |
167 | u_int16_t d_reclen; /* length of this record */ | |
168 | u_int8_t d_type; /* file type, see below */ | |
169 | u_int8_t d_namlen; /* length of string in d_name */ | |
170 | char d_name[CODA_MAXNAMLEN + 1];/* name must be no longer than this */ | |
171 | }; | |
172 | #undef DIRSIZ | |
173 | #define DIRSIZ(dp) ((sizeof (struct venus_dirent) - (CODA_MAXNAMLEN+1)) + \ | |
174 | (((dp)->d_namlen+1 + 3) &~ 3)) | |
175 | ||
176 | /* | |
177 | * File types | |
178 | */ | |
179 | #define CDT_UNKNOWN 0 | |
180 | #define CDT_FIFO 1 | |
181 | #define CDT_CHR 2 | |
182 | #define CDT_DIR 4 | |
183 | #define CDT_BLK 6 | |
184 | #define CDT_REG 8 | |
185 | #define CDT_LNK 10 | |
186 | #define CDT_SOCK 12 | |
187 | #define CDT_WHT 14 | |
188 | ||
189 | /* | |
190 | * Convert between stat structure types and directory types. | |
191 | */ | |
192 | #define IFTOCDT(mode) (((mode) & 0170000) >> 12) | |
193 | #define CDTTOIF(dirtype) ((dirtype) << 12) | |
194 | ||
195 | #endif | |
196 | ||
197 | #ifndef _VUID_T_ | |
198 | #define _VUID_T_ | |
199 | typedef u_int32_t vuid_t; | |
200 | typedef u_int32_t vgid_t; | |
201 | #endif /*_VUID_T_ */ | |
202 | ||
203 | #ifdef CONFIG_CODA_FS_OLD_API | |
204 | struct CodaFid { | |
205 | u_int32_t opaque[3]; | |
206 | }; | |
207 | ||
208 | static __inline__ ino_t coda_f2i(struct CodaFid *fid) | |
209 | { | |
210 | if ( ! fid ) | |
211 | return 0; | |
212 | if (fid->opaque[1] == 0xfffffffe || fid->opaque[1] == 0xffffffff) | |
213 | return ((fid->opaque[0] << 20) | (fid->opaque[2] & 0xfffff)); | |
214 | else | |
215 | return (fid->opaque[2] + (fid->opaque[1]<<10) + (fid->opaque[0]<<20)); | |
216 | } | |
217 | ||
218 | struct coda_cred { | |
219 | vuid_t cr_uid, cr_euid, cr_suid, cr_fsuid; /* Real, efftve, set, fs uid*/ | |
220 | vgid_t cr_groupid, cr_egid, cr_sgid, cr_fsgid; /* same for groups */ | |
221 | }; | |
222 | ||
223 | #else /* not defined(CONFIG_CODA_FS_OLD_API) */ | |
224 | ||
225 | struct CodaFid { | |
226 | u_int32_t opaque[4]; | |
227 | }; | |
228 | ||
229 | #define coda_f2i(fid)\ | |
230 | (fid ? (fid->opaque[3] ^ (fid->opaque[2]<<10) ^ (fid->opaque[1]<<20) ^ fid->opaque[0]) : 0) | |
231 | ||
232 | #endif | |
233 | ||
234 | #ifndef _VENUS_VATTR_T_ | |
235 | #define _VENUS_VATTR_T_ | |
236 | /* | |
237 | * Vnode types. VNON means no type. | |
238 | */ | |
239 | enum coda_vtype { C_VNON, C_VREG, C_VDIR, C_VBLK, C_VCHR, C_VLNK, C_VSOCK, C_VFIFO, C_VBAD }; | |
240 | ||
241 | struct coda_vattr { | |
242 | long va_type; /* vnode type (for create) */ | |
243 | u_short va_mode; /* files access mode and type */ | |
244 | short va_nlink; /* number of references to file */ | |
245 | vuid_t va_uid; /* owner user id */ | |
246 | vgid_t va_gid; /* owner group id */ | |
247 | long va_fileid; /* file id */ | |
248 | u_quad_t va_size; /* file size in bytes */ | |
249 | long va_blocksize; /* blocksize preferred for i/o */ | |
250 | struct timespec va_atime; /* time of last access */ | |
251 | struct timespec va_mtime; /* time of last modification */ | |
252 | struct timespec va_ctime; /* time file changed */ | |
253 | u_long va_gen; /* generation number of file */ | |
254 | u_long va_flags; /* flags defined for file */ | |
255 | cdev_t va_rdev; /* device special file represents */ | |
256 | u_quad_t va_bytes; /* bytes of disk space held by file */ | |
257 | u_quad_t va_filerev; /* file modification number */ | |
258 | }; | |
259 | ||
260 | #endif | |
261 | ||
262 | /* structure used by CODA_STATFS for getting cache information from venus */ | |
263 | struct coda_statfs { | |
264 | int32_t f_blocks; | |
265 | int32_t f_bfree; | |
266 | int32_t f_bavail; | |
267 | int32_t f_files; | |
268 | int32_t f_ffree; | |
269 | }; | |
270 | ||
271 | /* | |
272 | * Kernel <--> Venus communications. | |
273 | */ | |
274 | ||
275 | #define CODA_ROOT 2 | |
276 | #define CODA_OPEN_BY_FD 3 | |
277 | #define CODA_OPEN 4 | |
278 | #define CODA_CLOSE 5 | |
279 | #define CODA_IOCTL 6 | |
280 | #define CODA_GETATTR 7 | |
281 | #define CODA_SETATTR 8 | |
282 | #define CODA_ACCESS 9 | |
283 | #define CODA_LOOKUP 10 | |
284 | #define CODA_CREATE 11 | |
285 | #define CODA_REMOVE 12 | |
286 | #define CODA_LINK 13 | |
287 | #define CODA_RENAME 14 | |
288 | #define CODA_MKDIR 15 | |
289 | #define CODA_RMDIR 16 | |
290 | #define CODA_SYMLINK 18 | |
291 | #define CODA_READLINK 19 | |
292 | #define CODA_FSYNC 20 | |
293 | #define CODA_VGET 22 | |
294 | #define CODA_SIGNAL 23 | |
295 | #define CODA_REPLACE 24 /* DOWNCALL */ | |
296 | #define CODA_FLUSH 25 /* DOWNCALL */ | |
297 | #define CODA_PURGEUSER 26 /* DOWNCALL */ | |
298 | #define CODA_ZAPFILE 27 /* DOWNCALL */ | |
299 | #define CODA_ZAPDIR 28 /* DOWNCALL */ | |
300 | #define CODA_PURGEFID 30 /* DOWNCALL */ | |
301 | #define CODA_OPEN_BY_PATH 31 | |
302 | #define CODA_RESOLVE 32 | |
303 | #define CODA_REINTEGRATE 33 | |
304 | #define CODA_STATFS 34 | |
305 | #define CODA_STORE 35 | |
306 | #define CODA_RELEASE 36 | |
307 | #define CODA_NCALLS 37 | |
308 | ||
309 | #define DOWNCALL(opcode) (opcode >= CODA_REPLACE && opcode <= CODA_PURGEFID) | |
310 | ||
311 | #define VC_MAXDATASIZE 8192 | |
312 | #define VC_MAXMSGSIZE sizeof(union inputArgs)+sizeof(union outputArgs) +\ | |
313 | VC_MAXDATASIZE | |
314 | ||
315 | #define CIOC_KERNEL_VERSION _IOWR('c', 10, size_t) | |
316 | ||
317 | #if 0 | |
318 | #define CODA_KERNEL_VERSION 0 /* don't care about kernel version number */ | |
319 | #define CODA_KERNEL_VERSION 1 /* The old venus 4.6 compatible interface */ | |
320 | #endif | |
321 | #ifdef CONFIG_CODA_FS_OLD_API | |
322 | #define CODA_KERNEL_VERSION 2 /* venus_lookup got an extra parameter */ | |
323 | #else | |
324 | #define CODA_KERNEL_VERSION 3 /* 128-bit file identifiers */ | |
325 | #endif | |
326 | ||
327 | /* | |
328 | * Venus <-> Coda RPC arguments | |
329 | */ | |
330 | struct coda_in_hdr { | |
331 | u_int32_t opcode; | |
332 | u_int32_t unique; /* Keep multiple outstanding msgs distinct */ | |
333 | #ifdef CONFIG_CODA_FS_OLD_API | |
334 | u_int16_t pid; /* Common to all */ | |
335 | u_int16_t pgid; /* Common to all */ | |
336 | u_int16_t sid; /* Common to all */ | |
337 | struct coda_cred cred; /* Common to all */ | |
338 | #else | |
339 | pid_t pid; | |
340 | pid_t pgid; | |
341 | vuid_t uid; | |
342 | #endif | |
343 | }; | |
344 | ||
345 | /* Really important that opcode and unique are 1st two fields! */ | |
346 | struct coda_out_hdr { | |
347 | u_int32_t opcode; | |
348 | u_int32_t unique; | |
349 | u_int32_t result; | |
350 | }; | |
351 | ||
352 | /* coda_root: NO_IN */ | |
353 | struct coda_root_out { | |
354 | struct coda_out_hdr oh; | |
355 | struct CodaFid VFid; | |
356 | }; | |
357 | ||
358 | struct coda_root_in { | |
359 | struct coda_in_hdr in; | |
360 | }; | |
361 | ||
362 | /* coda_open: */ | |
363 | struct coda_open_in { | |
364 | struct coda_in_hdr ih; | |
365 | struct CodaFid VFid; | |
366 | int flags; | |
367 | }; | |
368 | ||
369 | struct coda_open_out { | |
370 | struct coda_out_hdr oh; | |
371 | cdev_t dev; | |
372 | ino_t inode; | |
373 | }; | |
374 | ||
375 | ||
376 | /* coda_store: */ | |
377 | struct coda_store_in { | |
378 | struct coda_in_hdr ih; | |
379 | struct CodaFid VFid; | |
380 | int flags; | |
381 | }; | |
382 | ||
383 | struct coda_store_out { | |
384 | struct coda_out_hdr out; | |
385 | }; | |
386 | ||
387 | /* coda_release: */ | |
388 | struct coda_release_in { | |
389 | struct coda_in_hdr ih; | |
390 | struct CodaFid VFid; | |
391 | int flags; | |
392 | }; | |
393 | ||
394 | struct coda_release_out { | |
395 | struct coda_out_hdr out; | |
396 | }; | |
397 | ||
398 | /* coda_close: */ | |
399 | struct coda_close_in { | |
400 | struct coda_in_hdr ih; | |
401 | struct CodaFid VFid; | |
402 | int flags; | |
403 | }; | |
404 | ||
405 | struct coda_close_out { | |
406 | struct coda_out_hdr out; | |
407 | }; | |
408 | ||
409 | /* coda_ioctl: */ | |
410 | struct coda_ioctl_in { | |
411 | struct coda_in_hdr ih; | |
412 | struct CodaFid VFid; | |
413 | int cmd; | |
414 | int len; | |
415 | int rwflag; | |
416 | char *data; /* Place holder for data. */ | |
417 | }; | |
418 | ||
419 | struct coda_ioctl_out { | |
420 | struct coda_out_hdr oh; | |
421 | int len; | |
422 | caddr_t data; /* Place holder for data. */ | |
423 | }; | |
424 | ||
425 | ||
426 | /* coda_getattr: */ | |
427 | struct coda_getattr_in { | |
428 | struct coda_in_hdr ih; | |
429 | struct CodaFid VFid; | |
430 | }; | |
431 | ||
432 | struct coda_getattr_out { | |
433 | struct coda_out_hdr oh; | |
434 | struct coda_vattr attr; | |
435 | }; | |
436 | ||
437 | ||
438 | /* coda_setattr: NO_OUT */ | |
439 | struct coda_setattr_in { | |
440 | struct coda_in_hdr ih; | |
441 | struct CodaFid VFid; | |
442 | struct coda_vattr attr; | |
443 | }; | |
444 | ||
445 | struct coda_setattr_out { | |
446 | struct coda_out_hdr out; | |
447 | }; | |
448 | ||
449 | /* coda_access: NO_OUT */ | |
450 | struct coda_access_in { | |
451 | struct coda_in_hdr ih; | |
452 | struct CodaFid VFid; | |
453 | int flags; | |
454 | }; | |
455 | ||
456 | struct coda_access_out { | |
457 | struct coda_out_hdr out; | |
458 | }; | |
459 | ||
460 | ||
461 | /* lookup flags */ | |
462 | #define CLU_CASE_SENSITIVE 0x01 | |
463 | #define CLU_CASE_INSENSITIVE 0x02 | |
464 | ||
465 | /* coda_lookup: */ | |
466 | struct coda_lookup_in { | |
467 | struct coda_in_hdr ih; | |
468 | struct CodaFid VFid; | |
469 | int name; /* Place holder for data. */ | |
470 | int flags; | |
471 | }; | |
472 | ||
473 | struct coda_lookup_out { | |
474 | struct coda_out_hdr oh; | |
475 | struct CodaFid VFid; | |
476 | int vtype; | |
477 | }; | |
478 | ||
479 | ||
480 | /* coda_create: */ | |
481 | struct coda_create_in { | |
482 | struct coda_in_hdr ih; | |
483 | struct CodaFid VFid; | |
484 | struct coda_vattr attr; | |
485 | int excl; | |
486 | int mode; | |
487 | int name; /* Place holder for data. */ | |
488 | }; | |
489 | ||
490 | struct coda_create_out { | |
491 | struct coda_out_hdr oh; | |
492 | struct CodaFid VFid; | |
493 | struct coda_vattr attr; | |
494 | }; | |
495 | ||
496 | ||
497 | /* coda_remove: NO_OUT */ | |
498 | struct coda_remove_in { | |
499 | struct coda_in_hdr ih; | |
500 | struct CodaFid VFid; | |
501 | int name; /* Place holder for data. */ | |
502 | }; | |
503 | ||
504 | struct coda_remove_out { | |
505 | struct coda_out_hdr out; | |
506 | }; | |
507 | ||
508 | /* coda_link: NO_OUT */ | |
509 | struct coda_link_in { | |
510 | struct coda_in_hdr ih; | |
511 | struct CodaFid sourceFid; /* cnode to link *to* */ | |
512 | struct CodaFid destFid; /* Directory in which to place link */ | |
513 | int tname; /* Place holder for data. */ | |
514 | }; | |
515 | ||
516 | struct coda_link_out { | |
517 | struct coda_out_hdr out; | |
518 | }; | |
519 | ||
520 | ||
521 | /* coda_rename: NO_OUT */ | |
522 | struct coda_rename_in { | |
523 | struct coda_in_hdr ih; | |
524 | struct CodaFid sourceFid; | |
525 | int srcname; | |
526 | struct CodaFid destFid; | |
527 | int destname; | |
528 | }; | |
529 | ||
530 | struct coda_rename_out { | |
531 | struct coda_out_hdr out; | |
532 | }; | |
533 | ||
534 | /* coda_mkdir: */ | |
535 | struct coda_mkdir_in { | |
536 | struct coda_in_hdr ih; | |
537 | struct CodaFid VFid; | |
538 | struct coda_vattr attr; | |
539 | int name; /* Place holder for data. */ | |
540 | }; | |
541 | ||
542 | struct coda_mkdir_out { | |
543 | struct coda_out_hdr oh; | |
544 | struct CodaFid VFid; | |
545 | struct coda_vattr attr; | |
546 | }; | |
547 | ||
548 | ||
549 | /* coda_rmdir: NO_OUT */ | |
550 | struct coda_rmdir_in { | |
551 | struct coda_in_hdr ih; | |
552 | struct CodaFid VFid; | |
553 | int name; /* Place holder for data. */ | |
554 | }; | |
555 | ||
556 | struct coda_rmdir_out { | |
557 | struct coda_out_hdr out; | |
558 | }; | |
559 | ||
560 | /* coda_symlink: NO_OUT */ | |
561 | struct coda_symlink_in { | |
562 | struct coda_in_hdr ih; | |
563 | struct CodaFid VFid; /* Directory to put symlink in */ | |
564 | int srcname; | |
565 | struct coda_vattr attr; | |
566 | int tname; | |
567 | }; | |
568 | ||
569 | struct coda_symlink_out { | |
570 | struct coda_out_hdr out; | |
571 | }; | |
572 | ||
573 | /* coda_readlink: */ | |
574 | struct coda_readlink_in { | |
575 | struct coda_in_hdr ih; | |
576 | struct CodaFid VFid; | |
577 | }; | |
578 | ||
579 | struct coda_readlink_out { | |
580 | struct coda_out_hdr oh; | |
581 | int count; | |
582 | caddr_t data; /* Place holder for data. */ | |
583 | }; | |
584 | ||
585 | ||
586 | /* coda_fsync: NO_OUT */ | |
587 | struct coda_fsync_in { | |
588 | struct coda_in_hdr ih; | |
589 | struct CodaFid VFid; | |
590 | }; | |
591 | ||
592 | struct coda_fsync_out { | |
593 | struct coda_out_hdr out; | |
594 | }; | |
595 | ||
596 | /* coda_vget: */ | |
597 | struct coda_vget_in { | |
598 | struct coda_in_hdr ih; | |
599 | struct CodaFid VFid; | |
600 | }; | |
601 | ||
602 | struct coda_vget_out { | |
603 | struct coda_out_hdr oh; | |
604 | struct CodaFid VFid; | |
605 | int vtype; | |
606 | }; | |
607 | ||
608 | ||
609 | /* CODA_SIGNAL is out-of-band, doesn't need data. */ | |
610 | /* CODA_INVALIDATE is a venus->kernel call */ | |
611 | /* CODA_FLUSH is a venus->kernel call */ | |
612 | ||
613 | /* coda_purgeuser: */ | |
614 | /* CODA_PURGEUSER is a venus->kernel call */ | |
615 | struct coda_purgeuser_out { | |
616 | struct coda_out_hdr oh; | |
617 | #ifdef CONFIG_CODA_FS_OLD_API | |
618 | struct coda_cred cred; | |
619 | #else | |
620 | vuid_t uid; | |
621 | #endif | |
622 | }; | |
623 | ||
624 | /* coda_zapfile: */ | |
625 | /* CODA_ZAPFILE is a venus->kernel call */ | |
626 | struct coda_zapfile_out { | |
627 | struct coda_out_hdr oh; | |
628 | struct CodaFid CodaFid; | |
629 | }; | |
630 | ||
631 | /* coda_zapdir: */ | |
632 | /* CODA_ZAPDIR is a venus->kernel call */ | |
633 | struct coda_zapdir_out { | |
634 | struct coda_out_hdr oh; | |
635 | struct CodaFid CodaFid; | |
636 | }; | |
637 | ||
638 | /* coda_purgefid: */ | |
639 | /* CODA_PURGEFID is a venus->kernel call */ | |
640 | struct coda_purgefid_out { | |
641 | struct coda_out_hdr oh; | |
642 | struct CodaFid CodaFid; | |
643 | }; | |
644 | ||
645 | /* coda_replace: */ | |
646 | /* CODA_REPLACE is a venus->kernel call */ | |
647 | struct coda_replace_out { /* coda_replace is a venus->kernel call */ | |
648 | struct coda_out_hdr oh; | |
649 | struct CodaFid NewFid; | |
650 | struct CodaFid OldFid; | |
651 | }; | |
652 | ||
653 | /* coda_open_by_fd: */ | |
654 | struct coda_open_by_fd_in { | |
655 | struct coda_in_hdr ih; | |
656 | struct CodaFid VFid; | |
657 | int flags; | |
658 | }; | |
659 | ||
660 | struct coda_open_by_fd_out { | |
661 | struct coda_out_hdr oh; | |
662 | int fd; | |
663 | ||
664 | #ifdef __KERNEL__ | |
665 | struct file *fh; /* not passed from userspace but used in-kernel only */ | |
666 | #endif | |
667 | }; | |
668 | ||
669 | /* coda_open_by_path: */ | |
670 | struct coda_open_by_path_in { | |
671 | struct coda_in_hdr ih; | |
672 | struct CodaFid VFid; | |
673 | int flags; | |
674 | }; | |
675 | ||
676 | struct coda_open_by_path_out { | |
677 | struct coda_out_hdr oh; | |
678 | int path; | |
679 | }; | |
680 | ||
681 | /* coda_statfs: NO_IN */ | |
682 | struct coda_statfs_in { | |
683 | struct coda_in_hdr in; | |
684 | }; | |
685 | ||
686 | struct coda_statfs_out { | |
687 | struct coda_out_hdr oh; | |
688 | struct coda_statfs stat; | |
689 | }; | |
690 | ||
691 | /* | |
692 | * Occasionally, we don't cache the fid returned by CODA_LOOKUP. | |
693 | * For instance, if the fid is inconsistent. | |
694 | * This case is handled by setting the top bit of the type result parameter. | |
695 | */ | |
696 | #define CODA_NOCACHE 0x80000000 | |
697 | ||
698 | union inputArgs { | |
699 | struct coda_in_hdr ih; /* NB: every struct below begins with an ih */ | |
700 | struct coda_open_in coda_open; | |
701 | struct coda_store_in coda_store; | |
702 | struct coda_release_in coda_release; | |
703 | struct coda_close_in coda_close; | |
704 | struct coda_ioctl_in coda_ioctl; | |
705 | struct coda_getattr_in coda_getattr; | |
706 | struct coda_setattr_in coda_setattr; | |
707 | struct coda_access_in coda_access; | |
708 | struct coda_lookup_in coda_lookup; | |
709 | struct coda_create_in coda_create; | |
710 | struct coda_remove_in coda_remove; | |
711 | struct coda_link_in coda_link; | |
712 | struct coda_rename_in coda_rename; | |
713 | struct coda_mkdir_in coda_mkdir; | |
714 | struct coda_rmdir_in coda_rmdir; | |
715 | struct coda_symlink_in coda_symlink; | |
716 | struct coda_readlink_in coda_readlink; | |
717 | struct coda_fsync_in coda_fsync; | |
718 | struct coda_vget_in coda_vget; | |
719 | struct coda_open_by_fd_in coda_open_by_fd; | |
720 | struct coda_open_by_path_in coda_open_by_path; | |
721 | struct coda_statfs_in coda_statfs; | |
722 | }; | |
723 | ||
724 | union outputArgs { | |
725 | struct coda_out_hdr oh; /* NB: every struct below begins with an oh */ | |
726 | struct coda_root_out coda_root; | |
727 | struct coda_open_out coda_open; | |
728 | struct coda_ioctl_out coda_ioctl; | |
729 | struct coda_getattr_out coda_getattr; | |
730 | struct coda_lookup_out coda_lookup; | |
731 | struct coda_create_out coda_create; | |
732 | struct coda_mkdir_out coda_mkdir; | |
733 | struct coda_readlink_out coda_readlink; | |
734 | struct coda_vget_out coda_vget; | |
735 | struct coda_purgeuser_out coda_purgeuser; | |
736 | struct coda_zapfile_out coda_zapfile; | |
737 | struct coda_zapdir_out coda_zapdir; | |
738 | struct coda_purgefid_out coda_purgefid; | |
739 | struct coda_replace_out coda_replace; | |
740 | struct coda_open_by_fd_out coda_open_by_fd; | |
741 | struct coda_open_by_path_out coda_open_by_path; | |
742 | struct coda_statfs_out coda_statfs; | |
743 | }; | |
744 | ||
745 | union coda_downcalls { | |
746 | /* CODA_INVALIDATE is a venus->kernel call */ | |
747 | /* CODA_FLUSH is a venus->kernel call */ | |
748 | struct coda_purgeuser_out purgeuser; | |
749 | struct coda_zapfile_out zapfile; | |
750 | struct coda_zapdir_out zapdir; | |
751 | struct coda_purgefid_out purgefid; | |
752 | struct coda_replace_out replace; | |
753 | }; | |
754 | ||
755 | ||
756 | /* | |
757 | * Used for identifying usage of "Control" and pioctls | |
758 | */ | |
759 | ||
760 | #define PIOCPARM_MASK 0x0000ffff | |
761 | struct ViceIoctl { | |
762 | void __user *in; /* Data to be transferred in */ | |
763 | void __user *out; /* Data to be transferred out */ | |
764 | u_short in_size; /* Size of input buffer <= 2K */ | |
765 | u_short out_size; /* Maximum size of output buffer, <= 2K */ | |
766 | }; | |
767 | ||
768 | struct PioctlData { | |
769 | const char __user *path; | |
770 | int follow; | |
771 | struct ViceIoctl vi; | |
772 | }; | |
773 | ||
774 | #define CODA_CONTROL ".CONTROL" | |
775 | #define CODA_CONTROLLEN 8 | |
776 | #define CTL_INO -1 | |
777 | ||
778 | /* Data passed to mount */ | |
779 | ||
780 | #define CODA_MOUNT_VERSION 1 | |
781 | ||
782 | struct coda_mount_data { | |
783 | int version; | |
784 | int fd; /* Opened device */ | |
785 | }; | |
786 | ||
787 | #endif | |
788 |