poll: add poll_requested_events() and poll_does_not_wait() functions
[deliverable/linux.git] / fs / eventpoll.c
index 4d9d3a45e35647a19d9182e28422c397f654abb5..ca300071e79c1c1abcd3eb3f58fc8f24ea558dc0 100644 (file)
@@ -699,9 +699,12 @@ static int ep_read_events_proc(struct eventpoll *ep, struct list_head *head,
                               void *priv)
 {
        struct epitem *epi, *tmp;
+       poll_table pt;
 
+       init_poll_funcptr(&pt, NULL);
        list_for_each_entry_safe(epi, tmp, head, rdllink) {
-               if (epi->ffd.file->f_op->poll(epi->ffd.file, NULL) &
+               pt._key = epi->event.events;
+               if (epi->ffd.file->f_op->poll(epi->ffd.file, &pt) &
                    epi->event.events)
                        return POLLIN | POLLRDNORM;
                else {
@@ -1097,6 +1100,7 @@ static int ep_insert(struct eventpoll *ep, struct epoll_event *event,
        /* Initialize the poll table using the queue callback */
        epq.epi = epi;
        init_poll_funcptr(&epq.pt, ep_ptable_queue_proc);
+       epq.pt._key = event->events;
 
        /*
         * Attach the item to the poll hooks and get current event bits.
@@ -1191,6 +1195,9 @@ static int ep_modify(struct eventpoll *ep, struct epitem *epi, struct epoll_even
 {
        int pwake = 0;
        unsigned int revents;
+       poll_table pt;
+
+       init_poll_funcptr(&pt, NULL);
 
        /*
         * Set the new event interest mask before calling f_op->poll();
@@ -1198,13 +1205,14 @@ static int ep_modify(struct eventpoll *ep, struct epitem *epi, struct epoll_even
         * f_op->poll() call and the new event set registering.
         */
        epi->event.events = event->events;
+       pt._key = event->events;
        epi->event.data = event->data; /* protected by mtx */
 
        /*
         * Get current event bits. We can safely use the file* here because
         * its usage count has been increased by the caller of this function.
         */
-       revents = epi->ffd.file->f_op->poll(epi->ffd.file, NULL);
+       revents = epi->ffd.file->f_op->poll(epi->ffd.file, &pt);
 
        /*
         * If the item is "hot" and it is not registered inside the ready
@@ -1239,6 +1247,9 @@ static int ep_send_events_proc(struct eventpoll *ep, struct list_head *head,
        unsigned int revents;
        struct epitem *epi;
        struct epoll_event __user *uevent;
+       poll_table pt;
+
+       init_poll_funcptr(&pt, NULL);
 
        /*
         * We can loop without lock because we are passed a task private list.
@@ -1251,7 +1262,8 @@ static int ep_send_events_proc(struct eventpoll *ep, struct list_head *head,
 
                list_del_init(&epi->rdllink);
 
-               revents = epi->ffd.file->f_op->poll(epi->ffd.file, NULL) &
+               pt._key = epi->event.events;
+               revents = epi->ffd.file->f_op->poll(epi->ffd.file, &pt) &
                        epi->event.events;
 
                /*
This page took 0.042758 seconds and 5 git commands to generate.