static int cttykqfilter(struct dev_kqfilter_args *ap) { cdev_t dev = ap->a_head.a_dev; struct proc *p = curproc; struct knote *kn = ap->a_kn; struct vnode *ttyvp; KKASSERT(p); ttyvp = cttyvp(p); if (ttyvp != NULL) return (VOP_KQFILTER(ttyvp, kn)); ap->a_result = 0; switch (kn->kn_filter) { case EVFILT_READ: kn->kn_fop = &cttyfiltops_read; kn->kn_hook = (caddr_t)dev; break; case EVFILT_WRITE: kn->kn_fop = &cttyfiltops_write; kn->kn_hook = (caddr_t)dev; break; default: ap->a_result = EOPNOTSUPP; return (0); } return (0); }
/* * MPSAFE */ static int vn_kqfilter(struct file *fp, struct knote *kn) { int error; error = VOP_KQFILTER(((struct vnode *)fp->f_data), kn); return (error); }
int cttykqfilter(dev_t dev, struct knote *kn) { struct vnode *ttyvp = cttyvp(curproc); if (ttyvp == NULL) return (ENXIO); return (VOP_KQFILTER(ttyvp, kn)); }
static int cttykqfilter(dev_t dev, struct knote *kn) { /* This is called from filt_fileattach() by the attaching process. */ struct proc *p = curproc; struct vnode *ttyvp = cttyvp(p); if (ttyvp == NULL) return (1); return (VOP_KQFILTER(ttyvp, kn)); }
static int unionfs_kqfilter(void *v) { struct vop_kqfilter_args *ap = v; struct unionfs_node *unp; struct vnode *tvp; unp = VTOUNIONFS(ap->a_vp); tvp = (unp->un_uppervp != NULLVP ? unp->un_uppervp : unp->un_lowervp); return VOP_KQFILTER(tvp, ap->a_kn); }
int RUMP_VOP_KQFILTER(struct vnode *vp, struct knote *kn) { int error; rump_schedule(); error = VOP_KQFILTER(vp, kn); rump_unschedule(); return error; }
int vn_kqfilter(struct file *fp, struct knote *kn) { return (VOP_KQFILTER(((struct vnode *)fp->f_data), kn)); }
/* * File table vnode kqfilter routine. */ int vn_kqfilter(file_t *fp, struct knote *kn) { return (VOP_KQFILTER(fp->f_data, kn)); }