db1_printf(("RAIDframe: vn_open returned %d\n", error));
raidlookup(path, p, vpp)	char *path;	struct proc *p;	struct vnode **vpp;	/* result */{	struct nameidata nd;	struct vnode *vp;	struct vattr va;	int error;	NDINIT(&nd, LOOKUP, FOLLOW, UIO_SYSSPACE, path, p);	if ((error = vn_open(&nd, FREAD|FWRITE, 0)) != 0) {		db1_printf(("RAIDframe: vn_open returned %d\n", error));		return (error);	}	vp = nd.ni_vp;	if (vp->v_usecount > 1) {		VOP_UNLOCK(vp, 0, p);		(void)vn_close(vp, FREAD|FWRITE, p->p_ucred, p);		return (EBUSY);	}	if ((error = VOP_GETATTR(vp, &va, p->p_ucred, p)) != 0) {		VOP_UNLOCK(vp, 0, p);		(void)vn_close(vp, FREAD|FWRITE, p->p_ucred, p);		return (error);	}	/* XXX: eventually we should handle VREG, too. */	if (va.va_type != VBLK) {		VOP_UNLOCK(vp, 0, p);		(void)vn_close(vp, FREAD|FWRITE, p->p_ucred, p);		return (ENOTBLK);	}	VOP_UNLOCK(vp, 0, p);	*vpp = vp;	return (0);}