version 1.40.4.3, 2001/09/20 11:15:42 |
version 1.40.4.4, 2001/09/26 15:28:09 |
Line 67 cnopen(devvp, mode, flag, p) |
|
Line 67 cnopen(devvp, mode, flag, p) |
|
struct proc *p; |
struct proc *p; |
{ |
{ |
int error; |
int error; |
dev_t cndev; |
dev_t cndev, rdev; |
struct vnode *vp; |
struct vnode *vp; |
|
|
if (cn_tab == NULL) |
if (cn_tab == NULL) |
Line 88 cnopen(devvp, mode, flag, p) |
|
Line 88 cnopen(devvp, mode, flag, p) |
|
*/ |
*/ |
panic("cnopen: cn_tab->cn_dev == NODEV\n"); |
panic("cnopen: cn_tab->cn_dev == NODEV\n"); |
} |
} |
if (devvp->v_rdev == cndev) { |
rdev = vdev_rdev(devvp); |
|
if (rdev == cndev) { |
/* |
/* |
* This causes cnopen() to be called recursively, which |
* This causes cnopen() to be called recursively, which |
* is generally a bad thing. It is often caused when |
* is generally a bad thing. It is often caused when |
Line 105 cnopen(devvp, mode, flag, p) |
|
Line 106 cnopen(devvp, mode, flag, p) |
|
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); |
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); |
} else |
} else |
vget(vp, LK_EXCLUSIVE | LK_RETRY); |
vget(vp, LK_EXCLUSIVE | LK_RETRY); |
devvp->v_devcookie = vp; |
|
|
vdev_setprivdata(devvp, vp); |
|
|
error = VOP_OPEN(vp, mode, p->p_ucred, p, NULL); |
error = VOP_OPEN(vp, mode, p->p_ucred, p, NULL); |
VOP_UNLOCK(vp, 0); |
VOP_UNLOCK(vp, 0); |
Line 126 cnclose(devvp, flag, mode, p) |
|
Line 128 cnclose(devvp, flag, mode, p) |
|
if (cn_tab == NULL) |
if (cn_tab == NULL) |
return (0); |
return (0); |
|
|
vp = devvp->v_devcookie; |
vp = vdev_privdata(devvp); |
|
|
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); |
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); |
error = VOP_CLOSE(vp, flag, p->p_ucred, p); |
error = VOP_CLOSE(vp, flag, p->p_ucred, p); |
Line 157 cnread(devvp, uio, flag) |
|
Line 159 cnread(devvp, uio, flag) |
|
else if (cn_tab == NULL) |
else if (cn_tab == NULL) |
return ENXIO; |
return ENXIO; |
|
|
vp = devvp->v_devcookie; |
vp = vdev_privdata(devvp); |
|
|
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); |
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); |
error = VOP_READ(vp, uio, flag, p->p_ucred); |
error = VOP_READ(vp, uio, flag, p->p_ucred); |
VOP_UNLOCK(vp, 0); |
VOP_UNLOCK(vp, 0); |
Line 184 cnwrite(devvp, uio, flag) |
|
Line 187 cnwrite(devvp, uio, flag) |
|
else if (cn_tab == NULL) |
else if (cn_tab == NULL) |
return ENXIO; |
return ENXIO; |
else |
else |
vp = devvp->v_devcookie; |
vp = vdev_privdata(devvp); |
|
|
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); |
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); |
error = VOP_WRITE(vp, uio, flag, p->p_ucred); |
error = VOP_WRITE(vp, uio, flag, p->p_ucred); |
VOP_UNLOCK(vp, 0); |
VOP_UNLOCK(vp, 0); |
Line 233 cnioctl(devvp, cmd, data, flag, p) |
|
Line 237 cnioctl(devvp, cmd, data, flag, p) |
|
else if (cn_tab == NULL) |
else if (cn_tab == NULL) |
return ENXIO; |
return ENXIO; |
else |
else |
vp = devvp->v_devcookie; |
vp = vdev_privdata(devvp); |
|
|
return VOP_IOCTL(vp, cmd, data, flag, p->p_ucred, p); |
return VOP_IOCTL(vp, cmd, data, flag, p->p_ucred, p); |
} |
} |
Line 257 cnpoll(devvp, events, p) |
|
Line 261 cnpoll(devvp, events, p) |
|
else if (cn_tab == NULL) |
else if (cn_tab == NULL) |
return ENXIO; |
return ENXIO; |
else |
else |
vp = devvp->v_devcookie; |
vp = vdev_privdata(devvp); |
|
|
return VOP_POLL(vp, events, p); |
return VOP_POLL(vp, events, p); |
} |
} |