Deleted Added
full compact
fifo_vnops.c (64819) fifo_vnops.c (72521)
1/*
2 * Copyright (c) 1990, 1993, 1995
3 * The Regents of the University of California. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 17 unchanged lines hidden (view full) ---

26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 *
33 * @(#)fifo_vnops.c 8.10 (Berkeley) 5/27/95
1/*
2 * Copyright (c) 1990, 1993, 1995
3 * The Regents of the University of California. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 17 unchanged lines hidden (view full) ---

26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 *
33 * @(#)fifo_vnops.c 8.10 (Berkeley) 5/27/95
34 * $FreeBSD: head/sys/fs/fifofs/fifo_vnops.c 64819 2000-08-18 10:01:02Z phk $
34 * $FreeBSD: head/sys/fs/fifofs/fifo_vnops.c 72521 2001-02-15 16:34:11Z jlemon $
35 */
36
37#include <sys/param.h>
38#include <sys/systm.h>
39#include <sys/unistd.h>
40#include <sys/kernel.h>
41#include <sys/lock.h>
42#include <sys/malloc.h>

--- 23 unchanged lines hidden (view full) ---

66static int fifo_print __P((struct vop_print_args *));
67static int fifo_lookup __P((struct vop_lookup_args *));
68static int fifo_open __P((struct vop_open_args *));
69static int fifo_close __P((struct vop_close_args *));
70static int fifo_read __P((struct vop_read_args *));
71static int fifo_write __P((struct vop_write_args *));
72static int fifo_ioctl __P((struct vop_ioctl_args *));
73static int fifo_poll __P((struct vop_poll_args *));
35 */
36
37#include <sys/param.h>
38#include <sys/systm.h>
39#include <sys/unistd.h>
40#include <sys/kernel.h>
41#include <sys/lock.h>
42#include <sys/malloc.h>

--- 23 unchanged lines hidden (view full) ---

66static int fifo_print __P((struct vop_print_args *));
67static int fifo_lookup __P((struct vop_lookup_args *));
68static int fifo_open __P((struct vop_open_args *));
69static int fifo_close __P((struct vop_close_args *));
70static int fifo_read __P((struct vop_read_args *));
71static int fifo_write __P((struct vop_write_args *));
72static int fifo_ioctl __P((struct vop_ioctl_args *));
73static int fifo_poll __P((struct vop_poll_args *));
74static int fifo_kqfilter __P((struct vop_kqfilter_args *));
74static int fifo_bmap __P((struct vop_bmap_args *));
75static int fifo_pathconf __P((struct vop_pathconf_args *));
76static int fifo_advlock __P((struct vop_advlock_args *));
77
75static int fifo_bmap __P((struct vop_bmap_args *));
76static int fifo_pathconf __P((struct vop_pathconf_args *));
77static int fifo_advlock __P((struct vop_advlock_args *));
78
78static int filt_fiforattach(struct knote *kn);
79static void filt_fifordetach(struct knote *kn);
80static int filt_fiforead(struct knote *kn, long hint);
79static void filt_fifordetach(struct knote *kn);
80static int filt_fiforead(struct knote *kn, long hint);
81static int filt_fifowattach(struct knote *kn);
82static void filt_fifowdetach(struct knote *kn);
83static int filt_fifowrite(struct knote *kn, long hint);
84
81static void filt_fifowdetach(struct knote *kn);
82static int filt_fifowrite(struct knote *kn, long hint);
83
85struct filterops fifo_rwfiltops[] = {
86 { 1, filt_fiforattach, filt_fifordetach, filt_fiforead },
87 { 1, filt_fifowattach, filt_fifowdetach, filt_fifowrite },
88};
84static struct filterops fiforead_filtops =
85 { 1, NULL, filt_fifordetach, filt_fiforead };
86static struct filterops fifowrite_filtops =
87 { 1, NULL, filt_fifowdetach, filt_fifowrite };
89
90vop_t **fifo_vnodeop_p;
91static struct vnodeopv_entry_desc fifo_vnodeop_entries[] = {
92 { &vop_default_desc, (vop_t *) vop_defaultop },
93 { &vop_access_desc, (vop_t *) vop_ebadf },
94 { &vop_advlock_desc, (vop_t *) fifo_advlock },
95 { &vop_bmap_desc, (vop_t *) fifo_bmap },
96 { &vop_close_desc, (vop_t *) fifo_close },

--- 4 unchanged lines hidden (view full) ---

101 { &vop_lease_desc, (vop_t *) vop_null },
102 { &vop_link_desc, (vop_t *) fifo_badop },
103 { &vop_lookup_desc, (vop_t *) fifo_lookup },
104 { &vop_mkdir_desc, (vop_t *) fifo_badop },
105 { &vop_mknod_desc, (vop_t *) fifo_badop },
106 { &vop_open_desc, (vop_t *) fifo_open },
107 { &vop_pathconf_desc, (vop_t *) fifo_pathconf },
108 { &vop_poll_desc, (vop_t *) fifo_poll },
88
89vop_t **fifo_vnodeop_p;
90static struct vnodeopv_entry_desc fifo_vnodeop_entries[] = {
91 { &vop_default_desc, (vop_t *) vop_defaultop },
92 { &vop_access_desc, (vop_t *) vop_ebadf },
93 { &vop_advlock_desc, (vop_t *) fifo_advlock },
94 { &vop_bmap_desc, (vop_t *) fifo_bmap },
95 { &vop_close_desc, (vop_t *) fifo_close },

--- 4 unchanged lines hidden (view full) ---

100 { &vop_lease_desc, (vop_t *) vop_null },
101 { &vop_link_desc, (vop_t *) fifo_badop },
102 { &vop_lookup_desc, (vop_t *) fifo_lookup },
103 { &vop_mkdir_desc, (vop_t *) fifo_badop },
104 { &vop_mknod_desc, (vop_t *) fifo_badop },
105 { &vop_open_desc, (vop_t *) fifo_open },
106 { &vop_pathconf_desc, (vop_t *) fifo_pathconf },
107 { &vop_poll_desc, (vop_t *) fifo_poll },
108 { &vop_kqfilter_desc, (vop_t *) fifo_kqfilter },
109 { &vop_print_desc, (vop_t *) fifo_print },
110 { &vop_read_desc, (vop_t *) fifo_read },
111 { &vop_readdir_desc, (vop_t *) fifo_badop },
112 { &vop_readlink_desc, (vop_t *) fifo_badop },
113 { &vop_reallocblks_desc, (vop_t *) fifo_badop },
114 { &vop_reclaim_desc, (vop_t *) vop_null },
115 { &vop_remove_desc, (vop_t *) fifo_badop },
116 { &vop_rename_desc, (vop_t *) fifo_badop },

--- 232 unchanged lines hidden (view full) ---

349 filetmp.f_data = (caddr_t)ap->a_vp->v_fifoinfo->fi_writesock;
350 error = soo_ioctl(&filetmp, ap->a_command, ap->a_data, ap->a_p);
351 if (error)
352 return (error);
353 }
354 return (0);
355}
356
109 { &vop_print_desc, (vop_t *) fifo_print },
110 { &vop_read_desc, (vop_t *) fifo_read },
111 { &vop_readdir_desc, (vop_t *) fifo_badop },
112 { &vop_readlink_desc, (vop_t *) fifo_badop },
113 { &vop_reallocblks_desc, (vop_t *) fifo_badop },
114 { &vop_reclaim_desc, (vop_t *) vop_null },
115 { &vop_remove_desc, (vop_t *) fifo_badop },
116 { &vop_rename_desc, (vop_t *) fifo_badop },

--- 232 unchanged lines hidden (view full) ---

349 filetmp.f_data = (caddr_t)ap->a_vp->v_fifoinfo->fi_writesock;
350 error = soo_ioctl(&filetmp, ap->a_command, ap->a_data, ap->a_p);
351 if (error)
352 return (error);
353 }
354 return (0);
355}
356
357/* ARGSUSED */
357static int
358static int
358filt_fiforattach(struct knote *kn)
359fifo_kqfilter(ap)
360 struct vop_kqfilter_args /* {
361 struct vnode *a_vp;
362 struct knote *a_kn;
363 } */ *ap;
359{
364{
360 struct vnode *vn = (struct vnode *)kn->kn_fp->f_data;
361 struct socket *so = (struct socket *)vn->v_fifoinfo->fi_readsock;
365 struct socket *so = (struct socket *)ap->a_vp->v_fifoinfo->fi_readsock;
366 struct sockbuf *sb;
362
367
363 SLIST_INSERT_HEAD(&so->so_rcv.sb_sel.si_note, kn, kn_selnext);
364 so->so_rcv.sb_flags |= SB_KNOTE;
368 switch (ap->a_kn->kn_filter) {
369 case EVFILT_READ:
370 ap->a_kn->kn_fop = &fiforead_filtops;
371 sb = &so->so_rcv;
372 break;
373 case EVFILT_WRITE:
374 ap->a_kn->kn_fop = &fifowrite_filtops;
375 sb = &so->so_snd;
376 break;
377 default:
378 return (1);
379 }
380
381 ap->a_kn->kn_hook = (caddr_t)so;
382
383 SLIST_INSERT_HEAD(&sb->sb_sel.si_note, ap->a_kn, kn_selnext);
384 sb->sb_flags |= SB_KNOTE;
385
365 return (0);
366}
367
368static void
369filt_fifordetach(struct knote *kn)
370{
386 return (0);
387}
388
389static void
390filt_fifordetach(struct knote *kn)
391{
371 struct vnode *vn = (struct vnode *)kn->kn_fp->f_data;
372 struct socket *so = (struct socket *)vn->v_fifoinfo->fi_readsock;
392 struct socket *so = (struct socket *)kn->kn_hook;
373
374 SLIST_REMOVE(&so->so_rcv.sb_sel.si_note, kn, knote, kn_selnext);
375 if (SLIST_EMPTY(&so->so_rcv.sb_sel.si_note))
376 so->so_rcv.sb_flags &= ~SB_KNOTE;
377}
378
379static int
380filt_fiforead(struct knote *kn, long hint)
381{
393
394 SLIST_REMOVE(&so->so_rcv.sb_sel.si_note, kn, knote, kn_selnext);
395 if (SLIST_EMPTY(&so->so_rcv.sb_sel.si_note))
396 so->so_rcv.sb_flags &= ~SB_KNOTE;
397}
398
399static int
400filt_fiforead(struct knote *kn, long hint)
401{
382 struct vnode *vn = (struct vnode *)kn->kn_fp->f_data;
383 struct socket *so = (struct socket *)vn->v_fifoinfo->fi_readsock;
402 struct socket *so = (struct socket *)kn->kn_hook;
384
385 kn->kn_data = so->so_rcv.sb_cc;
386 if (so->so_state & SS_CANTRCVMORE) {
387 kn->kn_flags |= EV_EOF;
388 return (1);
389 }
390 kn->kn_flags &= ~EV_EOF;
391 return (kn->kn_data > 0);
392}
393
403
404 kn->kn_data = so->so_rcv.sb_cc;
405 if (so->so_state & SS_CANTRCVMORE) {
406 kn->kn_flags |= EV_EOF;
407 return (1);
408 }
409 kn->kn_flags &= ~EV_EOF;
410 return (kn->kn_data > 0);
411}
412
394static int
395filt_fifowattach(struct knote *kn)
396{
397 struct vnode *vn = (struct vnode *)kn->kn_fp->f_data;
398 struct socket *so = (struct socket *)vn->v_fifoinfo->fi_writesock;
399
400 SLIST_INSERT_HEAD(&so->so_snd.sb_sel.si_note, kn, kn_selnext);
401 so->so_rcv.sb_flags |= SB_KNOTE;
402 return (0);
403}
404
405static void
406filt_fifowdetach(struct knote *kn)
407{
413static void
414filt_fifowdetach(struct knote *kn)
415{
408 struct vnode *vn = (struct vnode *)kn->kn_fp->f_data;
409 struct socket *so = (struct socket *)vn->v_fifoinfo->fi_readsock;
416 struct socket *so = (struct socket *)kn->kn_hook;
410
411 SLIST_REMOVE(&so->so_snd.sb_sel.si_note, kn, knote, kn_selnext);
412 if (SLIST_EMPTY(&so->so_snd.sb_sel.si_note))
413 so->so_snd.sb_flags &= ~SB_KNOTE;
414}
415
416static int
417filt_fifowrite(struct knote *kn, long hint)
418{
417
418 SLIST_REMOVE(&so->so_snd.sb_sel.si_note, kn, knote, kn_selnext);
419 if (SLIST_EMPTY(&so->so_snd.sb_sel.si_note))
420 so->so_snd.sb_flags &= ~SB_KNOTE;
421}
422
423static int
424filt_fifowrite(struct knote *kn, long hint)
425{
419 struct vnode *vn = (struct vnode *)kn->kn_fp->f_data;
420 struct socket *so = (struct socket *)vn->v_fifoinfo->fi_readsock;
426 struct socket *so = (struct socket *)kn->kn_hook;
421
422 kn->kn_data = sbspace(&so->so_snd);
423 if (so->so_state & SS_CANTSENDMORE) {
424 kn->kn_flags |= EV_EOF;
425 return (1);
426 }
427 kn->kn_flags &= ~EV_EOF;
428 return (kn->kn_data >= so->so_snd.sb_lowat);

--- 181 unchanged lines hidden ---
427
428 kn->kn_data = sbspace(&so->so_snd);
429 if (so->so_state & SS_CANTSENDMORE) {
430 kn->kn_flags |= EV_EOF;
431 return (1);
432 }
433 kn->kn_flags &= ~EV_EOF;
434 return (kn->kn_data >= so->so_snd.sb_lowat);

--- 181 unchanged lines hidden ---