From owner-p4-projects@FreeBSD.ORG Thu Jun 11 12:51:02 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id EA7321065676; Thu, 11 Jun 2009 12:51:01 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A78311065673 for ; Thu, 11 Jun 2009 12:51:01 +0000 (UTC) (envelope-from zhaoshuai@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 94E338FC17 for ; Thu, 11 Jun 2009 12:51:01 +0000 (UTC) (envelope-from zhaoshuai@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n5BCp1Lr062213 for ; Thu, 11 Jun 2009 12:51:01 GMT (envelope-from zhaoshuai@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n5BCp17R062211 for perforce@freebsd.org; Thu, 11 Jun 2009 12:51:01 GMT (envelope-from zhaoshuai@FreeBSD.org) Date: Thu, 11 Jun 2009 12:51:01 GMT Message-Id: <200906111251.n5BCp17R062211@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to zhaoshuai@FreeBSD.org using -f From: Zhao Shuai To: Perforce Change Reviews Cc: Subject: PERFORCE change 164100 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2009 12:51:02 -0000 http://perforce.freebsd.org/chv.cgi?CH=164100 Change 164100 by zhaoshuai@zhaoshuai on 2009/06/11 12:50:07 add fifo_kqfilter_f() Affected files ... .. //depot/projects/soc2009/fifo/sys/fs/fifofs/fifo_vnops.c#13 edit Differences ... ==== //depot/projects/soc2009/fifo/sys/fs/fifofs/fifo_vnops.c#13 (text+ko) ==== @@ -91,6 +91,12 @@ static vop_pathconf_t fifo_pathconf; static vop_advlock_t fifo_advlock; +static void filt_fifodetach_notsup(struct knote *kn); +static int filt_fifo_notsup(struct knote *kn, long hint); + +static struct filterops fifo_notsup_filtops = + { 1, NULL, filt_fifodetach_notsup, filt_fifo_notsup }; + struct vop_vector fifo_specops = { .vop_default = &default_vnodeops, .vop_access = VOP_EBADF, @@ -484,9 +490,54 @@ } } +/* + * Because fifos are now a file descriptor layer object, EVFILT_VNODE is not + * implemented. Likely, fifo_kqfilter() should be removed, and + * fifo_kqfilter_f() should know how to forward the request to the underling + * vnode using f_vnode in the file descriptor here. + */ static int fifo_kqfilter_f(struct file *fp, struct knote *kn) { + struct fifoinfo *fip = fp->f_data; + + /* + * If a filter is requested that is not supported by this file + * descriptor, don't return an error, but also don't ever generate an + * event. + */ + if ((kn->kn_filter == EVFILT_READ) && !(fp->f_flag & FREAD)) { + kn->kn_fop = &fifo_notsup_filtops; + return (0); + } + if ((kn->kn_filter == EVFILT_WRITE) && !(fp->f_flag & FWRITE)) { + kn->kn_fop = &fifo_notsup_filtops; + return (0); + } + + switch (kn->kn_filter) { + case EVFILT_READ: + return (generic_pipe_kqfilter(fip->fi_rpipe, kn)); + + case EVFILT_WRITE: + return (generic_pipe_kqfilter(fip->fi_wpipe, kn)); + + default: + return (EINVAL); + } + + return (0); +} + +static void +filt_fifodetach_notsup(struct knote *kn) +{ + +} + +static int +filt_fifo_notsup(struct knote *kn, long hint) +{ return (0); }