]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
epoll: cleanup: hoist out f_op->poll calls
authorEric Wong <normalperson@yhbt.net>
Wed, 20 Mar 2013 04:07:48 +0000 (15:07 +1100)
committerStephen Rothwell <sfr@canb.auug.org.au>
Wed, 20 Mar 2013 04:23:03 +0000 (15:23 +1100)
This reduces the amount of code inside the ready list iteration loops for
better readability IMHO.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Cc: Davide Libenzi <davidel@xmailserver.org>
Cc: Al Viro <viro@ZenIV.linux.org.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
fs/eventpoll.c

index 67fc7f6559cc5bb61e52b0e46352172e95a0eb90..083f420b72f1ea32cc2eb1d3e62457a7e30b0d06 100644 (file)
@@ -803,6 +803,13 @@ static int ep_eventpoll_release(struct inode *inode, struct file *file)
        return 0;
 }
 
+static inline unsigned int ep_item_poll(struct epitem *epi, poll_table *pt)
+{
+       pt->_key = epi->event.events;
+
+       return epi->ffd.file->f_op->poll(epi->ffd.file, pt) & epi->event.events;
+}
+
 static int ep_read_events_proc(struct eventpoll *ep, struct list_head *head,
                               void *priv)
 {
@@ -810,10 +817,9 @@ static int ep_read_events_proc(struct eventpoll *ep, struct list_head *head,
        poll_table pt;
 
        init_poll_funcptr(&pt, NULL);
+
        list_for_each_entry_safe(epi, tmp, head, rdllink) {
-               pt._key = epi->event.events;
-               if (epi->ffd.file->f_op->poll(epi->ffd.file, &pt) &
-                   epi->event.events)
+               if (ep_item_poll(epi, &pt))
                        return POLLIN | POLLRDNORM;
                else {
                        /*
@@ -1285,7 +1291,6 @@ 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.
@@ -1294,7 +1299,7 @@ static int ep_insert(struct eventpoll *ep, struct epoll_event *event,
         * this operation completes, the poll callback can start hitting
         * the new item.
         */
-       revents = tfile->f_op->poll(tfile, &epq.pt);
+       revents = ep_item_poll(epi, &epq.pt);
 
        /*
         * We have to check if something went wrong during the poll wait queue
@@ -1394,7 +1399,6 @@ 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; /* need barrier below */
-       pt._key = event->events;
        epi->event.data = event->data; /* protected by mtx */
        if (epi->event.events & EPOLLWAKEUP) {
                if (!ep_has_wakeup_source(epi))
@@ -1427,7 +1431,7 @@ static int ep_modify(struct eventpoll *ep, struct epitem *epi, struct epoll_even
         * 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, &pt);
+       revents = ep_item_poll(epi, &pt);
 
        /*
         * If the item is "hot" and it is not registered inside the ready
@@ -1495,9 +1499,7 @@ static int ep_send_events_proc(struct eventpoll *ep, struct list_head *head,
 
                list_del_init(&epi->rdllink);
 
-               pt._key = epi->event.events;
-               revents = epi->ffd.file->f_op->poll(epi->ffd.file, &pt) &
-                       epi->event.events;
+               revents = ep_item_poll(epi, &pt);
 
                /*
                 * If the event mask intersect the caller-requested one,