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 <provos@citi.umich.edu>
This commit is contained in:
Jonathan Lemon 2001-06-05 13:52:37 +00:00
parent 1cdc139280
commit 4e92ec9dd0

View file

@ -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)
{