kernel - Tear out vfs polling
authorSamuel J. Greear <sjg@thesjg.com>
Sun, 11 Jul 2010 17:03:11 +0000 (17:03 +0000)
committerSamuel J. Greear <sjg@thesjg.com>
Sun, 11 Jul 2010 17:03:11 +0000 (17:03 +0000)
* Remove existing (now legacy) code that implements vfs polling, kq filters
  are now the "One True (and only) Way"

sys/kern/vfs_default.c
sys/kern/vfs_subr.c
sys/sys/vnode.h
sys/vfs/deadfs/dead_vnops.c
sys/vfs/fdesc/fdesc_vnops.c
sys/vfs/fifofs/fifo_vnops.c
sys/vfs/gnu/ext2fs/ext2_vnops.c
sys/vfs/nfs/nfs_vnops.c
sys/vfs/ufs/ufs_vnops.c

index bec7e19..a5c4ebf 100644 (file)
@@ -55,7 +55,6 @@
 #include <sys/vnode.h>
 #include <sys/namei.h>
 #include <sys/nlookup.h>
-#include <sys/poll.h>
 #include <sys/mountctl.h>
 
 #include <machine/limits.h>
@@ -85,7 +84,6 @@ struct vop_ops default_vnode_vops = {
        .vop_open               = vop_stdopen,
        .vop_close              = vop_stdclose,
        .vop_pathconf           = vop_stdpathconf,
-       .vop_poll               = vop_nopoll,
        .vop_readlink           = (void *)vop_einval,
        .vop_reallocblks        = (void *)vop_eopnotsupp,
        .vop_strategy           = vop_nostrategy,
@@ -1215,36 +1213,6 @@ vop_stdclose(struct vop_close_args *ap)
        return (0);
 }
 
-/*
- * Return true for select/poll.
- */
-int
-vop_nopoll(struct vop_poll_args *ap)
-{
-       /*
-        * Return true for read/write.  If the user asked for something
-        * special, return POLLNVAL, so that clients have a way of
-        * determining reliably whether or not the extended
-        * functionality is present without hard-coding knowledge
-        * of specific filesystem implementations.
-        */
-       if (ap->a_events & ~POLLSTANDARD)
-               return (POLLNVAL);
-
-       return (ap->a_events & (POLLIN | POLLOUT | POLLRDNORM | POLLWRNORM));
-}
-
-/*
- * Implement poll for local filesystems that support it.
- */
-int
-vop_stdpoll(struct vop_poll_args *ap)
-{
-       if (ap->a_events & ~POLLSTANDARD)
-               return (vn_pollrecord(ap->a_vp, ap->a_events));
-       return (ap->a_events & (POLLIN | POLLOUT | POLLRDNORM | POLLWRNORM));
-}
-
 /*
  * Implement standard getpages and putpages.  All filesystems must use
  * the buffer cache to back regular files.
index 29d0a25..ad3b81f 100644 (file)
@@ -2149,10 +2149,7 @@ vn_pollrecord(struct vnode *vp, int events)
 }
 
 /*
- * Note the occurrence of an event.  If the VN_POLLEVENT macro is used,
- * it is possible for us to miss an event due to race conditions, but
- * that condition is expected to be rare, so for the moment it is the
- * preferred interface.
+ * Note the occurrence of an event.
  */
 void
 vn_pollevent(struct vnode *vp, int events)
index c3ac1dc..247096d 100644 (file)
@@ -277,12 +277,6 @@ struct vnode {
 #define        v_fifoinfo      v_un.vu_fifoinfo
 #define        v_spinlock      v_lock.lk_spinlock
 
-#define        VN_POLLEVENT(vp, events)                                \
-       do {                                                    \
-               if ((vp)->v_pollinfo.vpi_events & (events))     \
-                       vn_pollevent((vp), (events));           \
-       } while (0)
-
 /*
  * Vnode flags.
  */
@@ -561,9 +555,7 @@ int vop_stdputpages(struct vop_putpages_args *ap);
 int    vop_stdmarkatime(struct vop_markatime_args *ap);
 int    vop_stdnoread(struct vop_read_args *ap);
 int    vop_stdnowrite(struct vop_write_args *ap);
-int    vop_nopoll (struct vop_poll_args *ap);
 int    vop_stdpathconf (struct vop_pathconf_args *ap);
-int    vop_stdpoll (struct vop_poll_args *ap);
 int    vop_eopnotsupp (struct vop_generic_args *ap);
 int    vop_ebadf (struct vop_generic_args *ap);
 int    vop_einval (struct vop_generic_args *ap);
index 008f723..e15f56f 100644 (file)
@@ -42,7 +42,6 @@
 #include <sys/vnode.h>
 #include <sys/fcntl.h>
 #include <sys/buf.h>
-#include <sys/poll.h>
 
 /*
  * Prototypes for dead operations on vnodes.
@@ -53,7 +52,6 @@ static int    dead_ioctl (struct vop_ioctl_args *);
 static int     dead_lookup (struct vop_old_lookup_args *);
 static int     dead_open (struct vop_open_args *);
 static int     dead_close (struct vop_close_args *);
-static int     dead_poll (struct vop_poll_args *);
 static int     dead_print (struct vop_print_args *);
 static int     dead_read (struct vop_read_args *);
 static int     dead_write (struct vop_write_args *);
@@ -75,7 +73,6 @@ struct vop_ops dead_vnode_vops = {
        .vop_open =             dead_open,
        .vop_close =            dead_close,
        .vop_pathconf =         (void *)vop_ebadf,      /* per pathconf(2) */
-       .vop_poll =             dead_poll,
        .vop_print =            dead_print,
        .vop_read =             dead_read,
        .vop_readdir =          (void *)vop_ebadf,
@@ -216,14 +213,3 @@ dead_badop(void)
        panic("dead_badop called");
        /* NOTREACHED */
 }
-
-/*
- * Trivial poll routine that always returns POLLHUP.
- * This is necessary so that a process which is polling a file
- * gets notified when that file is revoke()d.
- */
-static int
-dead_poll(struct vop_poll_args *ap)
-{
-       return (POLLHUP);
-}
index c39e694..45f1214 100644 (file)
@@ -81,7 +81,6 @@ static int    fdesc_open (struct vop_open_args *ap);
 static int     fdesc_print (struct vop_print_args *ap);
 static int     fdesc_readdir (struct vop_readdir_args *ap);
 static int     fdesc_reclaim (struct vop_reclaim_args *ap);
-static int     fdesc_poll (struct vop_poll_args *ap);
 static int     fdesc_setattr (struct vop_setattr_args *ap);
 
 /*
@@ -484,15 +483,6 @@ done:
        return (error);
 }
 
-/*
- * fdesc_poll(struct vnode *a_vp, int a_events, struct ucred *a_cred)
- */
-static int
-fdesc_poll(struct vop_poll_args *ap)
-{
-       return seltrue(0, ap->a_events);
-}
-
 /*
  * fdesc_inactive(struct vnode *a_vp)
  */
@@ -546,7 +536,6 @@ struct vop_ops fdesc_vnode_vops = {
        .vop_old_lookup =       fdesc_lookup,
        .vop_open =             fdesc_open,
        .vop_pathconf =         vop_stdpathconf,
-       .vop_poll =             fdesc_poll,
        .vop_print =            fdesc_print,
        .vop_readdir =          fdesc_readdir,
        .vop_reclaim =          fdesc_reclaim,
index cf93c86..3418b43 100644 (file)
@@ -48,7 +48,6 @@
 #include <sys/fcntl.h>
 #include <sys/file.h>
 #include <sys/event.h>
-#include <sys/poll.h>
 #include <sys/un.h>
 
 #include <sys/thread2.h>
@@ -74,7 +73,6 @@ static int    fifo_close (struct vop_close_args *);
 static int     fifo_read (struct vop_read_args *);
 static int     fifo_write (struct vop_write_args *);
 static int     fifo_ioctl (struct vop_ioctl_args *);
-static int     fifo_poll (struct vop_poll_args *);
 static int     fifo_kqfilter (struct vop_kqfilter_args *);
 static int     fifo_inactive (struct  vop_inactive_args *);
 static int     fifo_bmap (struct vop_bmap_args *);
@@ -108,7 +106,6 @@ struct vop_ops fifo_vnode_vops = {
        .vop_old_mknod =        (void *)fifo_badop,
        .vop_open =             fifo_open,
        .vop_pathconf =         fifo_pathconf,
-       .vop_poll =             fifo_poll,
        .vop_print =            fifo_print,
        .vop_read =             fifo_read,
        .vop_readdir =          (void *)fifo_badop,
@@ -464,55 +461,6 @@ filt_fifowrite(struct knote *kn, long hint)
        return (kn->kn_data >= so->so_snd.ssb_lowat);
 }
 
-/*
- * fifo_poll(struct vnode *a_vp, int a_events, struct ucred *a_cred)
- */
-/* ARGSUSED */
-static int
-fifo_poll(struct vop_poll_args *ap)
-{
-       struct vnode *vp = ap->a_vp;
-       struct file filetmp;
-       int events, revents = 0;
-
-       lwkt_gettoken(&vp->v_token);
-       events = ap->a_events &
-               (POLLIN | POLLINIGNEOF | POLLPRI | POLLRDNORM | POLLRDBAND);
-       if (events) {
-               /*
-                * If POLLIN or POLLRDNORM is requested and POLLINIGNEOF is
-                * not, then convert the first two to the last one.  This
-                * tells the socket poll function to ignore EOF so that we
-                * block if there is no writer (and no data).  Callers can
-                * set POLLINIGNEOF to get non-blocking behavior.
-                */
-               if (events & (POLLIN | POLLRDNORM) &&
-                       !(events & POLLINIGNEOF)) {
-                       events &= ~(POLLIN | POLLRDNORM);
-                       events |= POLLINIGNEOF;
-               }
-               
-               filetmp.f_data = vp->v_fifoinfo->fi_readsock;
-               if (filetmp.f_data)
-                       revents |= soo_poll(&filetmp, events, ap->a_cred);
-
-               /* Reverse the above conversion. */
-               if ((revents & POLLINIGNEOF) &&
-                       !(ap->a_events & POLLINIGNEOF)) {
-                       revents |= (ap->a_events & (POLLIN | POLLRDNORM));
-                       revents &= ~POLLINIGNEOF;
-               }
-       }
-       events = ap->a_events & (POLLOUT | POLLWRNORM | POLLWRBAND);
-       if (events) {
-               filetmp.f_data = vp->v_fifoinfo->fi_writesock;
-               if (filetmp.f_data)
-                       revents |= soo_poll(&filetmp, events, ap->a_cred);
-       }
-       lwkt_reltoken(&vp->v_token);
-       return (revents);
-}
-
 /*
  * fifo_inactive(struct vnode *a_vp)
  */
index 81b6803..058ce0c 100644 (file)
@@ -2043,7 +2043,6 @@ struct vop_ops ext2_vnode_vops = {
        .vop_mmap =             ext2_mmap,
        .vop_open =             ext2_open,
        .vop_pathconf =         ext2_pathconf,
-       .vop_poll =             vop_stdpoll,
        .vop_kqfilter =         ext2_kqfilter,
        .vop_print =            ext2_print,
        .vop_readdir =          ext2_readdir,
index 7dc763a..40b26a8 100644 (file)
@@ -97,7 +97,6 @@
 static int     nfsfifo_read (struct vop_read_args *);
 static int     nfsfifo_write (struct vop_write_args *);
 static int     nfsfifo_close (struct vop_close_args *);
-#define nfs_poll vop_nopoll
 static int     nfs_setattrrpc (struct vnode *,struct vattr *,struct ucred *,struct thread *);
 static int     nfs_lookup (struct vop_old_lookup_args *);
 static int     nfs_create (struct vop_old_create_args *);
@@ -149,7 +148,6 @@ struct vop_ops nfsv2_vnode_vops = {
        .vop_old_mknod =        nfs_mknod,
        .vop_mmap =             nfs_mmap,
        .vop_open =             nfs_open,
-       .vop_poll =             nfs_poll,
        .vop_print =            nfs_print,
        .vop_read =             nfs_read,
        .vop_readdir =          nfs_readdir,
index b1f2951..94d5eaa 100644 (file)
@@ -2236,7 +2236,6 @@ static struct vop_ops ufs_vnode_vops = {
        .vop_mmap =             ufs_mmap,
        .vop_open =             vop_stdopen,
        .vop_pathconf =         vop_stdpathconf,
-       .vop_poll =             vop_stdpoll,
        .vop_kqfilter =         ufs_kqfilter,
        .vop_print =            ufs_print,
        .vop_readdir =          ufs_readdir,