coda_lookup now passes up an extra flag. But old veni will
be ok; new veni will check /dev/cfs0 to make sure that a new kernel is running. Also, a bug in vc_nb_close iff CODA_SIGNAL's were seen has been fixed.
This commit is contained in:
parent
ba58877007
commit
db28f40bee
@ -27,7 +27,7 @@
|
||||
* Mellon the rights to redistribute these changes without encumbrance.
|
||||
*
|
||||
* @(#) src/sys/coda/cnode.h,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $
|
||||
* $Id: cnode.h,v 1.3 1998/09/11 18:50:17 rvb Exp $
|
||||
* $Id: cnode.h,v 1.4 1998/09/13 13:57:59 rvb Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@ -47,6 +47,9 @@
|
||||
/*
|
||||
* HISTORY
|
||||
* $Log: cnode.h,v $
|
||||
* Revision 1.4 1998/09/13 13:57:59 rvb
|
||||
* Finish conversion of cfs -> coda
|
||||
*
|
||||
* Revision 1.3 1998/09/11 18:50:17 rvb
|
||||
* All the references to cfs, in symbols, structs, and strings
|
||||
* have been changed to coda. (Same for CFS.)
|
||||
@ -294,19 +297,20 @@ enum dc_status {
|
||||
};
|
||||
|
||||
/* cfs_psdev.h */
|
||||
int coda_call(struct coda_mntinfo *mntinfo, int inSize, int *outSize, caddr_t buffer);
|
||||
extern int coda_call(struct coda_mntinfo *mntinfo, int inSize, int *outSize, caddr_t buffer);
|
||||
extern int coda_kernel_version;
|
||||
|
||||
/* cfs_subr.h */
|
||||
int handleDownCall(int opcode, union outputArgs *out);
|
||||
void coda_unmounting(struct mount *whoIam);
|
||||
int coda_vmflush(struct cnode *cp);
|
||||
extern int handleDownCall(int opcode, union outputArgs *out);
|
||||
extern void coda_unmounting(struct mount *whoIam);
|
||||
extern int coda_vmflush(struct cnode *cp);
|
||||
|
||||
/* cfs_vnodeops.h */
|
||||
struct cnode *make_coda_node(ViceFid *fid, struct mount *vfsp, short type);
|
||||
int coda_vnodeopstats_init(void);
|
||||
extern struct cnode *make_coda_node(ViceFid *fid, struct mount *vfsp, short type);
|
||||
extern int coda_vnodeopstats_init(void);
|
||||
|
||||
/* coda_vfsops.h */
|
||||
struct mount *devtomp(dev_t dev);
|
||||
extern struct mount *devtomp(dev_t dev);
|
||||
|
||||
/* sigh */
|
||||
#define CODA_RDWR ((u_long) 31)
|
||||
|
@ -27,10 +27,11 @@
|
||||
* Mellon the rights to redistribute these changes without encumbrance.
|
||||
*
|
||||
* @(#) src/sys/coda/coda.h,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $
|
||||
* $Id: coda.h,v 1.4 1998/09/13 13:57:59 rvb Exp $
|
||||
* $Id: coda.h,v 1.5 1998/10/28 19:33:49 rvb Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
*
|
||||
* Based on cfs.h from Mach, but revamped for increased simplicity.
|
||||
@ -59,7 +60,11 @@ typedef unsigned short u_short;
|
||||
typedef u_long ino_t;
|
||||
typedef u_long dev_t;
|
||||
typedef void * caddr_t;
|
||||
#ifdef DOS
|
||||
typedef unsigned __int64 u_quad_t;
|
||||
#else
|
||||
typedef unsigned long long u_quad_t;
|
||||
#endif
|
||||
|
||||
#define inline
|
||||
|
||||
@ -188,7 +193,7 @@ static __inline__ ino_t coda_f2i(struct ViceFid *fid)
|
||||
|
||||
#else
|
||||
#define coda_f2i(fid)\
|
||||
(fid) ? ((fid)->Unique + ((fid)->Vnode<<10) + ((fid)->Volume<<20)) : 0
|
||||
((fid) ? ((fid)->Unique + ((fid)->Vnode<<10) + ((fid)->Volume<<20)) : 0)
|
||||
#endif
|
||||
|
||||
|
||||
@ -282,7 +287,15 @@ struct coda_vattr {
|
||||
#define VC_MAXMSGSIZE sizeof(union inputArgs)+sizeof(union outputArgs) +\
|
||||
VC_MAXDATASIZE
|
||||
|
||||
|
||||
#define CIOC_KERNEL_VERSION _IOWR('c', 10, sizeof (int))
|
||||
#if 0
|
||||
/* don't care about kernel version number */
|
||||
#define CODA_KERNEL_VERSION 0
|
||||
/* The old venus 4.6 compatible interface */
|
||||
#define CODA_KERNEL_VERSION 1
|
||||
#endif
|
||||
/* venus_lookup gets an extra parameter to aid windows.*/
|
||||
#define CODA_KERNEL_VERSION 2
|
||||
|
||||
/*
|
||||
* Venus <-> Coda RPC arguments
|
||||
@ -392,11 +405,17 @@ struct coda_access_out {
|
||||
struct coda_out_hdr out;
|
||||
};
|
||||
|
||||
|
||||
/* lookup flags */
|
||||
#define CLU_CASE_SENSITIVE 0x01
|
||||
#define CLU_CASE_INSENSITIVE 0x02
|
||||
|
||||
/* coda_lookup: */
|
||||
struct coda_lookup_in {
|
||||
struct coda_in_hdr ih;
|
||||
ViceFid VFid;
|
||||
int name; /* Place holder for data. */
|
||||
int flags;
|
||||
};
|
||||
|
||||
struct coda_lookup_out {
|
||||
@ -711,11 +730,20 @@ struct ViceIoctl {
|
||||
short out_size; /* Maximum size of output buffer, <= 2K */
|
||||
};
|
||||
|
||||
#if defined(__CYGWIN32__) || defined(DJGPP)
|
||||
struct PioctlData {
|
||||
unsigned long cmd;
|
||||
const char *path;
|
||||
int follow;
|
||||
struct ViceIoctl vi;
|
||||
};
|
||||
#else
|
||||
struct PioctlData {
|
||||
const char *path;
|
||||
int follow;
|
||||
struct ViceIoctl vi;
|
||||
};
|
||||
#endif
|
||||
|
||||
#define CODA_CONTROL ".CONTROL"
|
||||
#define CODA_CONTROLLEN 8
|
||||
|
@ -27,7 +27,7 @@
|
||||
* Mellon the rights to redistribute these changes without encumbrance.
|
||||
*
|
||||
* @(#) src/sys/coda/coda_psdev.c,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $
|
||||
* $Id: coda_psdev.c,v 1.7 1998/09/29 20:19:45 rvb Exp $
|
||||
* $Id: coda_psdev.c,v 1.8 1998/10/28 20:31:13 rvb Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@ -53,6 +53,13 @@
|
||||
/*
|
||||
* HISTORY
|
||||
* $Log: coda_psdev.c,v $
|
||||
* Revision 1.8 1998/10/28 20:31:13 rvb
|
||||
* Change the way unmounting happens to guarantee that the
|
||||
* client programs are allowed to finish up (coda_call is
|
||||
* forced to complete) and release their locks. Thus there
|
||||
* is a reasonable chance that the vflush implicit in the
|
||||
* unmount will not get hung on held locks.
|
||||
*
|
||||
* Revision 1.7 1998/09/29 20:19:45 rvb
|
||||
* Fixes for lkm:
|
||||
* 1. use VFS_LKM vs ACTUALLY_LKM_NOT_KERNEL
|
||||
@ -274,7 +281,7 @@ vc_nb_close (dev, flag, mode, p)
|
||||
struct proc *p;
|
||||
{
|
||||
register struct vcomm *vcp;
|
||||
register struct vmsg *vmp;
|
||||
register struct vmsg *vmp, *nvmp = NULL;
|
||||
struct coda_mntinfo *mi;
|
||||
int err;
|
||||
|
||||
@ -309,8 +316,9 @@ vc_nb_close (dev, flag, mode, p)
|
||||
/* Wakeup clients so they can return. */
|
||||
for (vmp = (struct vmsg *)GETNEXT(vcp->vc_requests);
|
||||
!EOQ(vmp, vcp->vc_requests);
|
||||
vmp = (struct vmsg *)GETNEXT(vmp->vm_chain))
|
||||
{
|
||||
vmp = nvmp)
|
||||
{
|
||||
nvmp = (struct vmsg *)GETNEXT(vmp->vm_chain);
|
||||
/* Free signal request messages and don't wakeup cause
|
||||
no one is waiting. */
|
||||
if (vmp->vm_opcode == CODA_SIGNAL) {
|
||||
@ -535,6 +543,22 @@ vc_nb_ioctl(dev, cmd, addr, flag, p)
|
||||
return(ENODEV);
|
||||
}
|
||||
break;
|
||||
case CIOC_KERNEL_VERSION:
|
||||
switch (*(u_int *)addr) {
|
||||
case 0:
|
||||
*(u_int *)addr = coda_kernel_version;
|
||||
return 0;
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
if (coda_kernel_version != *(u_int *)addr)
|
||||
return ENOENT;
|
||||
else
|
||||
return 0;
|
||||
default:
|
||||
return ENOENT;
|
||||
}
|
||||
break;
|
||||
default :
|
||||
return(EINVAL);
|
||||
break;
|
||||
|
@ -27,7 +27,7 @@
|
||||
* Mellon the rights to redistribute these changes without encumbrance.
|
||||
*
|
||||
* @(#) src/sys/cfs/coda_venus.c,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $
|
||||
* $Id: coda_venus.c,v 1.4 1998/09/13 13:57:59 rvb Exp $
|
||||
* $Id: coda_venus.c,v 1.5 1998/10/28 19:33:50 rvb Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@ -159,6 +159,8 @@
|
||||
} while (0)
|
||||
|
||||
|
||||
int coda_kernel_version = CODA_KERNEL_VERSION;
|
||||
|
||||
int
|
||||
venus_root(void *mdp,
|
||||
struct ucred *cred, struct proc *p,
|
||||
@ -408,7 +410,17 @@ venus_lookup(void *mdp, ViceFid *fid,
|
||||
INIT_IN(&inp->ih, CODA_LOOKUP, cred, p);
|
||||
inp->VFid = *fid;
|
||||
|
||||
/* NOTE:
|
||||
* Between version 1 and version 2 we have added an extra flag field
|
||||
* to this structure. But because the string was at the end and because
|
||||
* of the wierd way we represent strings by having the slot point to
|
||||
* where the string characters are in the "heap", we can just slip the
|
||||
* flag parameter in after the string slot pointer and veni that don't
|
||||
* know better won't see this new flag field ...
|
||||
* Otherwise we'd need two different venus_lookup functions.
|
||||
*/
|
||||
inp->name = Isize;
|
||||
inp->flags = CLU_CASE_SENSITIVE; /* doesn't really matter for BSD */
|
||||
STRCPY(name, nm, len); /* increments Isize */
|
||||
|
||||
error = coda_call(mdp, Isize, &Osize, (char *)inp);
|
||||
|
@ -27,7 +27,7 @@
|
||||
* Mellon the rights to redistribute these changes without encumbrance.
|
||||
*
|
||||
* @(#) src/sys/coda/cnode.h,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $
|
||||
* $Id: cnode.h,v 1.3 1998/09/11 18:50:17 rvb Exp $
|
||||
* $Id: cnode.h,v 1.4 1998/09/13 13:57:59 rvb Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@ -47,6 +47,9 @@
|
||||
/*
|
||||
* HISTORY
|
||||
* $Log: cnode.h,v $
|
||||
* Revision 1.4 1998/09/13 13:57:59 rvb
|
||||
* Finish conversion of cfs -> coda
|
||||
*
|
||||
* Revision 1.3 1998/09/11 18:50:17 rvb
|
||||
* All the references to cfs, in symbols, structs, and strings
|
||||
* have been changed to coda. (Same for CFS.)
|
||||
@ -294,19 +297,20 @@ enum dc_status {
|
||||
};
|
||||
|
||||
/* cfs_psdev.h */
|
||||
int coda_call(struct coda_mntinfo *mntinfo, int inSize, int *outSize, caddr_t buffer);
|
||||
extern int coda_call(struct coda_mntinfo *mntinfo, int inSize, int *outSize, caddr_t buffer);
|
||||
extern int coda_kernel_version;
|
||||
|
||||
/* cfs_subr.h */
|
||||
int handleDownCall(int opcode, union outputArgs *out);
|
||||
void coda_unmounting(struct mount *whoIam);
|
||||
int coda_vmflush(struct cnode *cp);
|
||||
extern int handleDownCall(int opcode, union outputArgs *out);
|
||||
extern void coda_unmounting(struct mount *whoIam);
|
||||
extern int coda_vmflush(struct cnode *cp);
|
||||
|
||||
/* cfs_vnodeops.h */
|
||||
struct cnode *make_coda_node(ViceFid *fid, struct mount *vfsp, short type);
|
||||
int coda_vnodeopstats_init(void);
|
||||
extern struct cnode *make_coda_node(ViceFid *fid, struct mount *vfsp, short type);
|
||||
extern int coda_vnodeopstats_init(void);
|
||||
|
||||
/* coda_vfsops.h */
|
||||
struct mount *devtomp(dev_t dev);
|
||||
extern struct mount *devtomp(dev_t dev);
|
||||
|
||||
/* sigh */
|
||||
#define CODA_RDWR ((u_long) 31)
|
||||
|
@ -27,10 +27,11 @@
|
||||
* Mellon the rights to redistribute these changes without encumbrance.
|
||||
*
|
||||
* @(#) src/sys/coda/coda.h,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $
|
||||
* $Id: coda.h,v 1.4 1998/09/13 13:57:59 rvb Exp $
|
||||
* $Id: coda.h,v 1.5 1998/10/28 19:33:49 rvb Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
*
|
||||
* Based on cfs.h from Mach, but revamped for increased simplicity.
|
||||
@ -59,7 +60,11 @@ typedef unsigned short u_short;
|
||||
typedef u_long ino_t;
|
||||
typedef u_long dev_t;
|
||||
typedef void * caddr_t;
|
||||
#ifdef DOS
|
||||
typedef unsigned __int64 u_quad_t;
|
||||
#else
|
||||
typedef unsigned long long u_quad_t;
|
||||
#endif
|
||||
|
||||
#define inline
|
||||
|
||||
@ -188,7 +193,7 @@ static __inline__ ino_t coda_f2i(struct ViceFid *fid)
|
||||
|
||||
#else
|
||||
#define coda_f2i(fid)\
|
||||
(fid) ? ((fid)->Unique + ((fid)->Vnode<<10) + ((fid)->Volume<<20)) : 0
|
||||
((fid) ? ((fid)->Unique + ((fid)->Vnode<<10) + ((fid)->Volume<<20)) : 0)
|
||||
#endif
|
||||
|
||||
|
||||
@ -282,7 +287,15 @@ struct coda_vattr {
|
||||
#define VC_MAXMSGSIZE sizeof(union inputArgs)+sizeof(union outputArgs) +\
|
||||
VC_MAXDATASIZE
|
||||
|
||||
|
||||
#define CIOC_KERNEL_VERSION _IOWR('c', 10, sizeof (int))
|
||||
#if 0
|
||||
/* don't care about kernel version number */
|
||||
#define CODA_KERNEL_VERSION 0
|
||||
/* The old venus 4.6 compatible interface */
|
||||
#define CODA_KERNEL_VERSION 1
|
||||
#endif
|
||||
/* venus_lookup gets an extra parameter to aid windows.*/
|
||||
#define CODA_KERNEL_VERSION 2
|
||||
|
||||
/*
|
||||
* Venus <-> Coda RPC arguments
|
||||
@ -392,11 +405,17 @@ struct coda_access_out {
|
||||
struct coda_out_hdr out;
|
||||
};
|
||||
|
||||
|
||||
/* lookup flags */
|
||||
#define CLU_CASE_SENSITIVE 0x01
|
||||
#define CLU_CASE_INSENSITIVE 0x02
|
||||
|
||||
/* coda_lookup: */
|
||||
struct coda_lookup_in {
|
||||
struct coda_in_hdr ih;
|
||||
ViceFid VFid;
|
||||
int name; /* Place holder for data. */
|
||||
int flags;
|
||||
};
|
||||
|
||||
struct coda_lookup_out {
|
||||
@ -711,11 +730,20 @@ struct ViceIoctl {
|
||||
short out_size; /* Maximum size of output buffer, <= 2K */
|
||||
};
|
||||
|
||||
#if defined(__CYGWIN32__) || defined(DJGPP)
|
||||
struct PioctlData {
|
||||
unsigned long cmd;
|
||||
const char *path;
|
||||
int follow;
|
||||
struct ViceIoctl vi;
|
||||
};
|
||||
#else
|
||||
struct PioctlData {
|
||||
const char *path;
|
||||
int follow;
|
||||
struct ViceIoctl vi;
|
||||
};
|
||||
#endif
|
||||
|
||||
#define CODA_CONTROL ".CONTROL"
|
||||
#define CODA_CONTROLLEN 8
|
||||
|
@ -27,7 +27,7 @@
|
||||
* Mellon the rights to redistribute these changes without encumbrance.
|
||||
*
|
||||
* @(#) src/sys/coda/coda_psdev.c,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $
|
||||
* $Id: coda_psdev.c,v 1.7 1998/09/29 20:19:45 rvb Exp $
|
||||
* $Id: coda_psdev.c,v 1.8 1998/10/28 20:31:13 rvb Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@ -53,6 +53,13 @@
|
||||
/*
|
||||
* HISTORY
|
||||
* $Log: coda_psdev.c,v $
|
||||
* Revision 1.8 1998/10/28 20:31:13 rvb
|
||||
* Change the way unmounting happens to guarantee that the
|
||||
* client programs are allowed to finish up (coda_call is
|
||||
* forced to complete) and release their locks. Thus there
|
||||
* is a reasonable chance that the vflush implicit in the
|
||||
* unmount will not get hung on held locks.
|
||||
*
|
||||
* Revision 1.7 1998/09/29 20:19:45 rvb
|
||||
* Fixes for lkm:
|
||||
* 1. use VFS_LKM vs ACTUALLY_LKM_NOT_KERNEL
|
||||
@ -274,7 +281,7 @@ vc_nb_close (dev, flag, mode, p)
|
||||
struct proc *p;
|
||||
{
|
||||
register struct vcomm *vcp;
|
||||
register struct vmsg *vmp;
|
||||
register struct vmsg *vmp, *nvmp = NULL;
|
||||
struct coda_mntinfo *mi;
|
||||
int err;
|
||||
|
||||
@ -309,8 +316,9 @@ vc_nb_close (dev, flag, mode, p)
|
||||
/* Wakeup clients so they can return. */
|
||||
for (vmp = (struct vmsg *)GETNEXT(vcp->vc_requests);
|
||||
!EOQ(vmp, vcp->vc_requests);
|
||||
vmp = (struct vmsg *)GETNEXT(vmp->vm_chain))
|
||||
{
|
||||
vmp = nvmp)
|
||||
{
|
||||
nvmp = (struct vmsg *)GETNEXT(vmp->vm_chain);
|
||||
/* Free signal request messages and don't wakeup cause
|
||||
no one is waiting. */
|
||||
if (vmp->vm_opcode == CODA_SIGNAL) {
|
||||
@ -535,6 +543,22 @@ vc_nb_ioctl(dev, cmd, addr, flag, p)
|
||||
return(ENODEV);
|
||||
}
|
||||
break;
|
||||
case CIOC_KERNEL_VERSION:
|
||||
switch (*(u_int *)addr) {
|
||||
case 0:
|
||||
*(u_int *)addr = coda_kernel_version;
|
||||
return 0;
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
if (coda_kernel_version != *(u_int *)addr)
|
||||
return ENOENT;
|
||||
else
|
||||
return 0;
|
||||
default:
|
||||
return ENOENT;
|
||||
}
|
||||
break;
|
||||
default :
|
||||
return(EINVAL);
|
||||
break;
|
||||
|
@ -27,7 +27,7 @@
|
||||
* Mellon the rights to redistribute these changes without encumbrance.
|
||||
*
|
||||
* @(#) src/sys/cfs/coda_venus.c,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $
|
||||
* $Id: coda_venus.c,v 1.4 1998/09/13 13:57:59 rvb Exp $
|
||||
* $Id: coda_venus.c,v 1.5 1998/10/28 19:33:50 rvb Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@ -159,6 +159,8 @@
|
||||
} while (0)
|
||||
|
||||
|
||||
int coda_kernel_version = CODA_KERNEL_VERSION;
|
||||
|
||||
int
|
||||
venus_root(void *mdp,
|
||||
struct ucred *cred, struct proc *p,
|
||||
@ -408,7 +410,17 @@ venus_lookup(void *mdp, ViceFid *fid,
|
||||
INIT_IN(&inp->ih, CODA_LOOKUP, cred, p);
|
||||
inp->VFid = *fid;
|
||||
|
||||
/* NOTE:
|
||||
* Between version 1 and version 2 we have added an extra flag field
|
||||
* to this structure. But because the string was at the end and because
|
||||
* of the wierd way we represent strings by having the slot point to
|
||||
* where the string characters are in the "heap", we can just slip the
|
||||
* flag parameter in after the string slot pointer and veni that don't
|
||||
* know better won't see this new flag field ...
|
||||
* Otherwise we'd need two different venus_lookup functions.
|
||||
*/
|
||||
inp->name = Isize;
|
||||
inp->flags = CLU_CASE_SENSITIVE; /* doesn't really matter for BSD */
|
||||
STRCPY(name, nm, len); /* increments Isize */
|
||||
|
||||
error = coda_call(mdp, Isize, &Osize, (char *)inp);
|
||||
|
Loading…
x
Reference in New Issue
Block a user