From 404f6dd2da1eb3969f37a42deaf051e398a2a088 Mon Sep 17 00:00:00 2001 From: jlemon Date: Tue, 5 Jun 2001 13:52:37 +0000 Subject: Add a kqueue filter for writing to ufs filesystems which always returns true. This permits better interoperability with programs which register filters on their stdin/stdout handles. Submitted by: Niels Provos --- sys/ufs/ufs/ufs_vnops.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'sys') diff --git a/sys/ufs/ufs/ufs_vnops.c b/sys/ufs/ufs/ufs_vnops.c index 7afeca4..cb6fcfc 100644 --- a/sys/ufs/ufs/ufs_vnops.c +++ b/sys/ufs/ufs/ufs_vnops.c @@ -108,6 +108,7 @@ static int ufsspec_close __P((struct vop_close_args *)); static int ufsspec_read __P((struct vop_read_args *)); static int ufsspec_write __P((struct vop_write_args *)); static int filt_ufsread __P((struct knote *kn, long hint)); +static int filt_ufswrite __P((struct knote *kn, long hint)); static int filt_ufsvnode __P((struct knote *kn, long hint)); static void filt_ufsdetach __P((struct knote *kn)); static int ufs_kqfilter __P((struct vop_kqfilter_args *ap)); @@ -2396,6 +2397,8 @@ ufs_missingop(ap) static struct filterops ufsread_filtops = { 1, NULL, filt_ufsdetach, filt_ufsread }; +static struct filterops ufswrite_filtops = + { 1, NULL, filt_ufsdetach, filt_ufswrite }; static struct filterops ufsvnode_filtops = { 1, NULL, filt_ufsdetach, filt_ufsvnode }; @@ -2413,6 +2416,9 @@ ufs_kqfilter(ap) case EVFILT_READ: kn->kn_fop = &ufsread_filtops; break; + case EVFILT_WRITE: + kn->kn_fop = &ufswrite_filtops; + break; case EVFILT_VNODE: kn->kn_fop = &ufsvnode_filtops; break; @@ -2460,6 +2466,22 @@ filt_ufsread(struct knote *kn, long hint) return (kn->kn_data != 0); } +/*ARGSUSED*/ +static int +filt_ufswrite(struct knote *kn, long hint) +{ + + /* + * filesystem is gone, so set the EOF flag and schedule + * the knote for deletion. + */ + if (hint == NOTE_REVOKE) + kn->kn_flags |= (EV_EOF | EV_ONESHOT); + + kn->kn_data = 0; + return (1); +} + static int filt_ufsvnode(struct knote *kn, long hint) { -- cgit v1.1