Signed-off-by: Cyrill Gorcunov <gorcu...@openvz.org>
Cc: Pavel Emelyanov <xe...@parallels.com>
Cc: Oleg Nesterov <o...@redhat.com>
Cc: Andrey Vagin <ava...@openvz.org>
Cc: Al Viro <v...@zeniv.linux.org.uk>
Cc: Alexey Dobriyan <adobri...@gmail.com>
Cc: James Bottomley <jbottom...@parallels.com>
Cc: "Aneesh Kumar K.V" <aneesh.ku...@linux.vnet.ibm.com>
Cc: Alexey Dobriyan <adobri...@gmail.com>
Cc: Matthew Helsley <matt.hels...@gmail.com>
Cc: "J. Bruce Fields" <bfie...@fieldses.org>
Cc: "Aneesh Kumar K.V" <aneesh.ku...@linux.vnet.ibm.com>
Cc: Tvrtko Ursulin <tvrtko.ursu...@onelan.co.uk>
Cc: Andrew Morton <a...@linux-foundation.org>
---
 fs/eventpoll.c |   45 +++++++++++++++++++++++++++++++++------------
 1 file changed, 33 insertions(+), 12 deletions(-)

Index: linux-2.6.git/fs/eventpoll.c
===================================================================
--- linux-2.6.git.orig/fs/eventpoll.c
+++ linux-2.6.git/fs/eventpoll.c
@@ -834,32 +834,53 @@ static unsigned int ep_eventpoll_poll(st
 }
 
 #ifdef CONFIG_PROC_FS
-static int ep_show_fdinfo(struct seq_file *m, struct file *f)
+static void *seq_start(struct seq_file *m, loff_t *pos)
 {
-       struct eventpoll *ep = f->private_data;
+       struct eventpoll *ep = ((struct file *)m->private)->private_data;
        struct rb_node *rbp;
-       int ret = 0;
+       loff_t num = *pos;
 
        mutex_lock(&ep->mtx);
        for (rbp = rb_first(&ep->rbr); rbp; rbp = rb_next(rbp)) {
-               struct epitem *epi = rb_entry(rbp, struct epitem, rbn);
-
-               ret = seq_printf(m, "tfd: %8d events: %8x data: %16llx\n",
-                                epi->ffd.fd, epi->event.events,
-                                (long long)epi->event.data);
-               if (ret)
-                       break;
+               if (num-- == 0)
+                       return rbp;
        }
+       return NULL;
+}
+
+static void seq_stop(struct seq_file *m, void *v)
+{
+       struct eventpoll *ep = ((struct file *)m->private)->private_data;
        mutex_unlock(&ep->mtx);
+}
 
-       return ret;
+static void *seq_next(struct seq_file *m, void *p, loff_t *pos)
+{
+       ++*pos;
+       return (void *)rb_next(p);
 }
+
+static int seq_show(struct seq_file *m, void *v)
+{
+       struct epitem *epi = rb_entry(v, struct epitem, rbn);
+
+       return seq_printf(m, "tfd: %8d events: %8x data: %16llx\n",
+                         epi->ffd.fd, epi->event.events,
+                         (long long)epi->event.data);
+}
+
+static struct seq_operations ep_fdinfo_ops = {
+       .start          = seq_start,
+       .next           = seq_next,
+       .stop           = seq_stop,
+       .show           = seq_show,
+};
 #endif
 
 /* File callbacks that implement the eventpoll file behaviour */
 static const struct file_operations eventpoll_fops = {
 #ifdef CONFIG_PROC_FS
-       .show_fdinfo    = ep_show_fdinfo,
+       .fdinfo_ops     = &ep_fdinfo_ops,
 #endif
        .release        = ep_eventpoll_release,
        .poll           = ep_eventpoll_poll,

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to