#include <linux/eventfd.h>
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
+#include <linux/idr.h>
+
+DEFINE_IDA(eventfd_ida);
 
 struct eventfd_ctx {
        struct kref kref;
         */
        __u64 count;
        unsigned int flags;
+       int id;
 };
 
 /**
 
 static void eventfd_free_ctx(struct eventfd_ctx *ctx)
 {
+       if (ctx->id >= 0)
+               ida_simple_remove(&eventfd_ida, ctx->id);
        kfree(ctx);
 }
 
        seq_printf(m, "eventfd-count: %16llx\n",
                   (unsigned long long)ctx->count);
        spin_unlock_irq(&ctx->wqh.lock);
+       seq_printf(m, "eventfd-id: %d\n", ctx->id);
 }
 #endif
 
        init_waitqueue_head(&ctx->wqh);
        ctx->count = count;
        ctx->flags = flags;
+       ctx->id = ida_simple_get(&eventfd_ida, 0, 0, GFP_KERNEL);
 
        fd = anon_inode_getfd("[eventfd]", &eventfd_fops, ctx,
                              O_RDWR | (flags & EFD_SHARED_FCNTL_FLAGS));