diff options
| author | Jan Harkes <jaharkes@cs.cmu.edu> | 2003-09-16 03:33:57 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@home.osdl.org> | 2003-09-16 03:33:57 -0700 |
| commit | d7d65a959ccd08b4fec96e3599491b041b17c916 (patch) | |
| tree | fe8827c2f88a76f086a5d66c45fd48b03a90cbe7 /include/linux | |
| parent | 01a4efd91fcb30d86dd2f49533ea5e1d6abd9ff9 (diff) | |
[PATCH] Coda updates [5/5]
Introduce a new kernel-userspace interface that uses 128-bit file
identifiers instead of the previously used 96-bit fileids. We also
replacing the coda_creds structure with only the fsuid.
This new API has been used by for a couple of months now, people had to
patch their kernels whenever they want to run a current Coda release.
A new Kconfig option is added to fall back on the old API for older Coda
clients and other userspace filesystems that might use our protocol.
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/coda.h | 52 |
1 files changed, 34 insertions, 18 deletions
diff --git a/include/linux/coda.h b/include/linux/coda.h index d1a9f3d9f5ef..3743f5ef7c47 100644 --- a/include/linux/coda.h +++ b/include/linux/coda.h @@ -59,7 +59,7 @@ Mellon the rights to redistribute these changes without encumbrance. #ifndef _CODA_HEADER_ #define _CODA_HEADER_ - +#include <linux/config.h> /* Catch new _KERNEL defn for NetBSD and DJGPP/__CYGWIN32__ */ #if defined(__NetBSD__) || \ @@ -194,11 +194,17 @@ struct venus_dirent { #endif +#ifndef _VUID_T_ +#define _VUID_T_ +typedef u_int32_t vuid_t; +typedef u_int32_t vgid_t; +#endif /*_VUID_T_ */ + +#ifdef CODA_FS_OLD_API struct CodaFid { u_int32_t opaque[3]; }; -#ifdef __linux__ static __inline__ ino_t coda_f2i(struct CodaFid *fid) { if ( ! fid ) @@ -208,26 +214,22 @@ static __inline__ ino_t coda_f2i(struct CodaFid *fid) else return (fid->opaque[2] + (fid->opaque[1]<<10) + (fid->opaque[0]<<20)); } - -#else -#define coda_f2i(fid)\ - ((fid) ? ((fid)->opaque[2] + ((fid)->opaque[1]<<10) + ((fid)->opaque[0]<<20)) : 0) -#endif - - -#ifndef _VUID_T_ -#define _VUID_T_ -typedef u_int32_t vuid_t; -typedef u_int32_t vgid_t; -#endif /*_VUID_T_ */ -#ifndef _CODACRED_T_ -#define _CODACRED_T_ struct coda_cred { vuid_t cr_uid, cr_euid, cr_suid, cr_fsuid; /* Real, efftve, set, fs uid*/ vgid_t cr_groupid, cr_egid, cr_sgid, cr_fsgid; /* same for groups */ }; -#endif + +#else /* not defined(CODA_FS_OLD_API) */ + +struct CodaFid { + u_int32_t opaque[4]; +}; + +#define coda_f2i(fid)\ + (fid ? (fid->opaque[3] ^ (fid->opaque[2]<<10) ^ (fid->opaque[1]<<20) ^ fid->opaque[0]) : 0) + +#endif #ifndef _VENUS_VATTR_T_ #define _VENUS_VATTR_T_ @@ -316,7 +318,11 @@ struct coda_statfs { #define CODA_KERNEL_VERSION 0 /* don't care about kernel version number */ #define CODA_KERNEL_VERSION 1 /* The old venus 4.6 compatible interface */ #endif -#define CODA_KERNEL_VERSION 2 /* venus_lookup gets an extra parameter */ +#ifdef CODA_FS_OLD_API +#define CODA_KERNEL_VERSION 2 /* venus_lookup got an extra parameter */ +#else +#define CODA_KERNEL_VERSION 3 /* 128-bit file identifiers */ +#endif /* * Venus <-> Coda RPC arguments @@ -324,10 +330,16 @@ struct coda_statfs { struct coda_in_hdr { u_int32_t opcode; u_int32_t unique; /* Keep multiple outstanding msgs distinct */ +#ifdef CODA_FS_OLD_API u_int16_t pid; /* Common to all */ u_int16_t pgid; /* Common to all */ u_int16_t sid; /* Common to all */ struct coda_cred cred; /* Common to all */ +#else + pid_t pid; + pid_t pgid; + vuid_t uid; +#endif }; /* Really important that opcode and unique are 1st two fields! */ @@ -602,7 +614,11 @@ struct coda_vget_out { /* CODA_PURGEUSER is a venus->kernel call */ struct coda_purgeuser_out { struct coda_out_hdr oh; +#ifdef CODA_FS_OLD_API struct coda_cred cred; +#else + vuid_t uid; +#endif }; /* coda_zapfile: */ |
