version 1.77.6.1, 2005/12/29 01:36:19 |
version 1.78, 2004/05/12 02:07:38 |
|
|
struct vop_ioctl_args /* { |
struct vop_ioctl_args /* { |
struct vnode *a_vp; |
struct vnode *a_vp; |
u_long a_command; |
u_long a_command; |
caddr_t a_data; |
void *a_data; |
int a_fflag; |
int a_fflag; |
struct ucred *a_cred; |
struct ucred *a_cred; |
struct proc *a_p; |
struct proc *a_p; |
} */ *ap = v; |
} */ *ap = v; |
const struct bdevsw *bdev; |
const struct bdevsw *bdev; |
const struct cdevsw *cdev; |
const struct cdevsw *cdev; |
struct vnode *vp; |
dev_t dev = ap->a_vp->v_rdev; |
dev_t dev; |
|
|
|
/* |
switch (ap->a_vp->v_type) { |
* Extract all the info we need from the vnode, taking care to |
|
* avoid a race with VOP_REVOKE(). |
|
*/ |
|
|
|
vp = ap->a_vp; |
|
dev = NODEV; |
|
simple_lock(&vp->v_interlock); |
|
if ((vp->v_flag & VXLOCK) == 0 && vp->v_specinfo) { |
|
dev = vp->v_rdev; |
|
} |
|
simple_unlock(&vp->v_interlock); |
|
if (dev == NODEV) { |
|
return ENXIO; |
|
} |
|
|
|
switch (vp->v_type) { |
|
|
|
case VCHR: |
case VCHR: |
cdev = cdevsw_lookup(dev); |
cdev = cdevsw_lookup(dev); |
|
|
{ |
{ |
struct vop_advlock_args /* { |
struct vop_advlock_args /* { |
struct vnode *a_vp; |
struct vnode *a_vp; |
caddr_t a_id; |
void *a_id; |
int a_op; |
int a_op; |
struct flock *a_fl; |
struct flock *a_fl; |
int a_flags; |
int a_flags; |