diff options
Diffstat (limited to 'sys/fs/coda/coda_venus.c')
-rw-r--r-- | sys/fs/coda/coda_venus.c | 103 |
1 files changed, 57 insertions, 46 deletions
diff --git a/sys/fs/coda/coda_venus.c b/sys/fs/coda/coda_venus.c index f1eac62..8067226 100644 --- a/sys/fs/coda/coda_venus.c +++ b/sys/fs/coda/coda_venus.c @@ -93,6 +93,7 @@ __FBSDID("$FreeBSD$"); ((char*)inp + (int)inp->struc)[len++] = 0; \ Isize += len +#ifdef CODA_COMPAT_5 #define INIT_IN(in, op, ident, p) \ (in)->opcode = (op); \ sx_slock(&proctree_lock); \ @@ -107,8 +108,18 @@ __FBSDID("$FreeBSD$"); bzero(&((in)->cred),sizeof(struct coda_cred)); \ (in)->cred.cr_uid = -1; \ (in)->cred.cr_groupid = -1; \ - } \ - + } +#else +#define INIT_IN(in, op, ident, p) \ + (in)->opcode = (op); \ + (in)->pid = p ? p->p_pid : -1; \ + (in)->pgid = p ? p->p_pgid : -1; \ + if (ident != NOCRED) { \ + (in)->uid = ident->cr_uid; \ + } else { \ + (in)->uid = -1; \ + } +#endif #define CNV_OFLAG(to, from) \ do { \ to = 0; \ @@ -168,7 +179,7 @@ int coda_kernel_version = CODA_KERNEL_VERSION; int venus_root(void *mdp, struct ucred *cred, struct proc *p, -/*out*/ ViceFid *VFid) +/*out*/ CodaFid *VFid) { DECL_NO_IN(coda_root); /* sets Isize & Osize */ ALLOC_NO_IN(coda_root); /* sets inp & outp */ @@ -178,14 +189,14 @@ venus_root(void *mdp, error = coda_call(mdp, Isize, &Osize, (char *)inp); if (!error) - *VFid = outp->VFid; + *VFid = outp->Fid; CODA_FREE(inp, coda_root_size); return error; } int -venus_open(void *mdp, ViceFid *fid, int flag, +venus_open(void *mdp, CodaFid *fid, int flag, struct ucred *cred, struct proc *p, /*out*/ dev_t *dev, ino_t *inode) { @@ -195,7 +206,7 @@ venus_open(void *mdp, ViceFid *fid, int flag, /* send the open to venus. */ INIT_IN(&inp->ih, CODA_OPEN, cred, p); - inp->VFid = *fid; + inp->Fid = *fid; CNV_OFLAG(cflag, flag); inp->flags = cflag; @@ -211,7 +222,7 @@ venus_open(void *mdp, ViceFid *fid, int flag, } int -venus_close(void *mdp, ViceFid *fid, int flag, +venus_close(void *mdp, CodaFid *fid, int flag, struct ucred *cred, struct proc *p) { int cflag; @@ -219,7 +230,7 @@ venus_close(void *mdp, ViceFid *fid, int flag, ALLOC_NO_OUT(coda_close); /* sets inp & outp */ INIT_IN(&inp->ih, CODA_CLOSE, cred, p); - inp->VFid = *fid; + inp->Fid = *fid; CNV_OFLAG(cflag, flag); inp->flags = cflag; @@ -248,7 +259,7 @@ venus_write(void) * normal files. */ int -venus_ioctl(void *mdp, ViceFid *fid, +venus_ioctl(void *mdp, CodaFid *fid, int com, int flag, caddr_t data, struct ucred *cred, struct proc *p) { @@ -260,7 +271,7 @@ venus_ioctl(void *mdp, ViceFid *fid, ALLOC(coda_ioctl); /* sets inp & outp */ INIT_IN(&inp->ih, CODA_IOCTL, cred, p); - inp->VFid = *fid; + inp->Fid = *fid; /* command was mutated by increasing its size field to reflect the * path and follow args. we need to subtract that out before sending @@ -299,7 +310,7 @@ venus_ioctl(void *mdp, ViceFid *fid, } int -venus_getattr(void *mdp, ViceFid *fid, +venus_getattr(void *mdp, CodaFid *fid, struct ucred *cred, struct proc *p, /*out*/ struct vattr *vap) { @@ -308,7 +319,7 @@ venus_getattr(void *mdp, ViceFid *fid, /* send the open to venus. */ INIT_IN(&inp->ih, CODA_GETATTR, cred, p); - inp->VFid = *fid; + inp->Fid = *fid; error = coda_call(mdp, Isize, &Osize, (char *)inp); if (!error) { @@ -320,7 +331,7 @@ venus_getattr(void *mdp, ViceFid *fid, } int -venus_setattr(void *mdp, ViceFid *fid, struct vattr *vap, +venus_setattr(void *mdp, CodaFid *fid, struct vattr *vap, struct ucred *cred, struct proc *p) { DECL_NO_OUT(coda_setattr); /* sets Isize & Osize */ @@ -328,7 +339,7 @@ venus_setattr(void *mdp, ViceFid *fid, struct vattr *vap, /* send the open to venus. */ INIT_IN(&inp->ih, CODA_SETATTR, cred, p); - inp->VFid = *fid; + inp->Fid = *fid; CNV_V2VV_ATTR(&inp->attr, vap); error = coda_call(mdp, Isize, &Osize, (char *)inp); @@ -338,7 +349,7 @@ venus_setattr(void *mdp, ViceFid *fid, struct vattr *vap, } int -venus_access(void *mdp, ViceFid *fid, int mode, +venus_access(void *mdp, CodaFid *fid, int mode, struct ucred *cred, struct proc *p) { DECL_NO_OUT(coda_access); /* sets Isize & Osize */ @@ -346,7 +357,7 @@ venus_access(void *mdp, ViceFid *fid, int mode, /* send the open to venus. */ INIT_IN(&inp->ih, CODA_ACCESS, cred, p); - inp->VFid = *fid; + inp->Fid = *fid; /* NOTE: * NetBSD and Venus internals use the "data" in the low 3 bits. * Hence, the conversion. @@ -360,7 +371,7 @@ venus_access(void *mdp, ViceFid *fid, int mode, } int -venus_readlink(void *mdp, ViceFid *fid, +venus_readlink(void *mdp, CodaFid *fid, struct ucred *cred, struct proc *p, /*out*/ char **str, int *len) { @@ -370,7 +381,7 @@ venus_readlink(void *mdp, ViceFid *fid, /* send the open to venus. */ INIT_IN(&inp->ih, CODA_READLINK, cred, p); - inp->VFid = *fid; + inp->Fid = *fid; Osize += CODA_MAXPATHLEN; error = coda_call(mdp, Isize, &Osize, (char *)inp); @@ -385,7 +396,7 @@ venus_readlink(void *mdp, ViceFid *fid, } int -venus_fsync(void *mdp, ViceFid *fid, +venus_fsync(void *mdp, CodaFid *fid, struct ucred *cred, struct proc *p) { DECL_NO_OUT(coda_fsync); /* sets Isize & Osize */ @@ -393,7 +404,7 @@ venus_fsync(void *mdp, ViceFid *fid, /* send the open to venus. */ INIT_IN(&inp->ih, CODA_FSYNC, cred, p); - inp->VFid = *fid; + inp->Fid = *fid; error = coda_call(mdp, Isize, &Osize, (char *)inp); @@ -402,10 +413,10 @@ venus_fsync(void *mdp, ViceFid *fid, } int -venus_lookup(void *mdp, ViceFid *fid, +venus_lookup(void *mdp, CodaFid *fid, const char *nm, int len, struct ucred *cred, struct proc *p, -/*out*/ ViceFid *VFid, int *vtype) +/*out*/ CodaFid *VFid, int *vtype) { DECL(coda_lookup); /* sets Isize & Osize */ coda_lookup_size += len + 1; @@ -413,7 +424,7 @@ venus_lookup(void *mdp, ViceFid *fid, /* send the open to venus. */ INIT_IN(&inp->ih, CODA_LOOKUP, cred, p); - inp->VFid = *fid; + inp->Fid = *fid; /* NOTE: * Between version 1 and version 2 we have added an extra flag field @@ -430,7 +441,7 @@ venus_lookup(void *mdp, ViceFid *fid, error = coda_call(mdp, Isize, &Osize, (char *)inp); if (!error) { - *VFid = outp->VFid; + *VFid = outp->Fid; *vtype = outp->vtype; } @@ -439,10 +450,10 @@ venus_lookup(void *mdp, ViceFid *fid, } int -venus_create(void *mdp, ViceFid *fid, +venus_create(void *mdp, CodaFid *fid, const char *nm, int len, int exclusive, int mode, struct vattr *va, struct ucred *cred, struct proc *p, -/*out*/ ViceFid *VFid, struct vattr *attr) +/*out*/ CodaFid *VFid, struct vattr *attr) { DECL(coda_create); /* sets Isize & Osize */ coda_create_size += len + 1; @@ -450,7 +461,7 @@ venus_create(void *mdp, ViceFid *fid, /* send the open to venus. */ INIT_IN(&inp->ih, CODA_CREATE, cred, p); - inp->VFid = *fid; + inp->Fid = *fid; inp->excl = exclusive ? C_O_EXCL : 0; inp->mode = mode; CNV_V2VV_ATTR(&inp->attr, va); @@ -460,7 +471,7 @@ venus_create(void *mdp, ViceFid *fid, error = coda_call(mdp, Isize, &Osize, (char *)inp); if (!error) { - *VFid = outp->VFid; + *VFid = outp->Fid; CNV_VV2V_ATTR(attr, &outp->attr); } @@ -469,7 +480,7 @@ venus_create(void *mdp, ViceFid *fid, } int -venus_remove(void *mdp, ViceFid *fid, +venus_remove(void *mdp, CodaFid *fid, const char *nm, int len, struct ucred *cred, struct proc *p) { @@ -479,7 +490,7 @@ venus_remove(void *mdp, ViceFid *fid, /* send the open to venus. */ INIT_IN(&inp->ih, CODA_REMOVE, cred, p); - inp->VFid = *fid; + inp->Fid = *fid; inp->name = Isize; STRCPY(name, nm, len); /* increments Isize */ @@ -491,7 +502,7 @@ venus_remove(void *mdp, ViceFid *fid, } int -venus_link(void *mdp, ViceFid *fid, ViceFid *tfid, +venus_link(void *mdp, CodaFid *fid, CodaFid *tfid, const char *nm, int len, struct ucred *cred, struct proc *p) { @@ -514,7 +525,7 @@ venus_link(void *mdp, ViceFid *fid, ViceFid *tfid, } int -venus_rename(void *mdp, ViceFid *fid, ViceFid *tfid, +venus_rename(void *mdp, CodaFid *fid, CodaFid *tfid, const char *nm, int len, const char *tnm, int tlen, struct ucred *cred, struct proc *p) { @@ -540,10 +551,10 @@ venus_rename(void *mdp, ViceFid *fid, ViceFid *tfid, } int -venus_mkdir(void *mdp, ViceFid *fid, +venus_mkdir(void *mdp, CodaFid *fid, const char *nm, int len, struct vattr *va, struct ucred *cred, struct proc *p, -/*out*/ ViceFid *VFid, struct vattr *ova) +/*out*/ CodaFid *VFid, struct vattr *ova) { DECL(coda_mkdir); /* sets Isize & Osize */ coda_mkdir_size += len + 1; @@ -551,7 +562,7 @@ venus_mkdir(void *mdp, ViceFid *fid, /* send the open to venus. */ INIT_IN(&inp->ih, CODA_MKDIR, cred, p); - inp->VFid = *fid; + inp->Fid = *fid; CNV_V2VV_ATTR(&inp->attr, va); inp->name = Isize; @@ -559,7 +570,7 @@ venus_mkdir(void *mdp, ViceFid *fid, error = coda_call(mdp, Isize, &Osize, (char *)inp); if (!error) { - *VFid = outp->VFid; + *VFid = outp->Fid; CNV_VV2V_ATTR(ova, &outp->attr); } @@ -568,7 +579,7 @@ venus_mkdir(void *mdp, ViceFid *fid, } int -venus_rmdir(void *mdp, ViceFid *fid, +venus_rmdir(void *mdp, CodaFid *fid, const char *nm, int len, struct ucred *cred, struct proc *p) { @@ -578,7 +589,7 @@ venus_rmdir(void *mdp, ViceFid *fid, /* send the open to venus. */ INIT_IN(&inp->ih, CODA_RMDIR, cred, p); - inp->VFid = *fid; + inp->Fid = *fid; inp->name = Isize; STRCPY(name, nm, len); /* increments Isize */ @@ -590,7 +601,7 @@ venus_rmdir(void *mdp, ViceFid *fid, } int -venus_symlink(void *mdp, ViceFid *fid, +venus_symlink(void *mdp, CodaFid *fid, const char *lnm, int llen, const char *nm, int len, struct vattr *va, struct ucred *cred, struct proc *p) { @@ -600,7 +611,7 @@ venus_symlink(void *mdp, ViceFid *fid, /* send the open to venus. */ INIT_IN(&inp->ih, CODA_SYMLINK, cred, p); - inp->VFid = *fid; + inp->Fid = *fid; CNV_V2VV_ATTR(&inp->attr, va); inp->srcname = Isize; @@ -616,7 +627,7 @@ venus_symlink(void *mdp, ViceFid *fid, } int -venus_readdir(void *mdp, ViceFid *fid, +venus_readdir(void *mdp, CodaFid *fid, int count, int offset, struct ucred *cred, struct proc *p, /*out*/ char *buffer, int *len) @@ -627,7 +638,7 @@ venus_readdir(void *mdp, ViceFid *fid, /* send the open to venus. */ INIT_IN(&inp->ih, CODA_READDIR, cred, p); - inp->VFid = *fid; + inp->Fid = *fid; inp->count = count; inp->offset = offset; @@ -643,20 +654,20 @@ venus_readdir(void *mdp, ViceFid *fid, } int -venus_fhtovp(void *mdp, ViceFid *fid, +venus_fhtovp(void *mdp, CodaFid *fid, struct ucred *cred, struct proc *p, -/*out*/ ViceFid *VFid, int *vtype) +/*out*/ CodaFid *VFid, int *vtype) { DECL(coda_vget); /* sets Isize & Osize */ ALLOC(coda_vget); /* sets inp & outp */ /* Send the open to Venus. */ INIT_IN(&inp->ih, CODA_VGET, cred, p); - inp->VFid = *fid; + inp->Fid = *fid; error = coda_call(mdp, Isize, &Osize, (char *)inp); if (!error) { - *VFid = outp->VFid; + *VFid = outp->Fid; *vtype = outp->vtype; } |