public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [patch] epoll - send POLLHUP on ->release
@ 2009-06-03 19:00 Davide Libenzi
  2009-06-03 19:20 ` Gregory Haskins
  0 siblings, 1 reply; 5+ messages in thread
From: Davide Libenzi @ 2009-06-03 19:00 UTC (permalink / raw)
  To: Linux Kernel Mailing List; +Cc: Andrew Morton, Gregory Haskins

The following patch allows waiters to be notified about the eventfd file* 
going away, and give them a change to unregister from the wait queue.
This is turn allows eventfd users to use the eventfd file* w/out 
holding a live reference to it.
After the eventfd user callbacks returns, any usage of the eventfd file* 
should be dropped. The eventfd user callback can acquire sleepy locks 
since it is invoked lockless.



Signed-off-by: Davide Libenzi <davidel@xmailserver.org>


- Davide


---
 fs/eventfd.c |   10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

Index: linux-2.6.mod/fs/eventfd.c
===================================================================
--- linux-2.6.mod.orig/fs/eventfd.c	2009-05-27 12:10:03.000000000 -0700
+++ linux-2.6.mod/fs/eventfd.c	2009-05-27 12:16:57.000000000 -0700
@@ -59,7 +59,15 @@ int eventfd_signal(struct file *file, in
 
 static int eventfd_release(struct inode *inode, struct file *file)
 {
-	kfree(file->private_data);
+	struct eventfd_ctx *ctx = file->private_data;
+
+	/*
+	 * No need to hold the lock here, since we are on the file cleanup
+	 * path and the ones still attached to the wait queue will be
+	 * serialized by wake_up_locked_poll().
+	 */
+	wake_up_locked_poll(&ctx->wqh, POLLHUP);
+	kfree(ctx);
 	return 0;
 }
 

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2009-06-03 19:54 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-06-03 19:00 [patch] epoll - send POLLHUP on ->release Davide Libenzi
2009-06-03 19:20 ` Gregory Haskins
2009-06-03 19:27   ` Andrew Morton
2009-06-03 19:47     ` Davide Libenzi
2009-06-03 19:53     ` Gregory Haskins

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox