diff options
| author | Thomas Gleixner <tglx@linutronix.de> | 2012-03-13 16:34:48 +0100 |
|---|---|---|
| committer | Thomas Gleixner <tglx@linutronix.de> | 2012-03-13 16:35:16 +0100 |
| commit | df8d291f28aa1e8437c8f7816328a6516379c71b (patch) | |
| tree | 26ae585aa259584ddd0d9088933547c065c37086 /fs/signalfd.c | |
| parent | 5234ffb9f74cfa8993d174782bc861dd9b7b5bfb (diff) | |
| parent | fde7d9049e55ab85a390be7f415d74c9f62dd0f9 (diff) | |
Merge branch 'linus' into irq/core
Reason: Get upstream fixes integrated before further modifications.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'fs/signalfd.c')
| -rw-r--r-- | fs/signalfd.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/fs/signalfd.c b/fs/signalfd.c index 492465b451dd..7ae2a574cb25 100644 --- a/fs/signalfd.c +++ b/fs/signalfd.c @@ -30,6 +30,21 @@ #include <linux/signalfd.h> #include <linux/syscalls.h> +void signalfd_cleanup(struct sighand_struct *sighand) +{ + wait_queue_head_t *wqh = &sighand->signalfd_wqh; + /* + * The lockless check can race with remove_wait_queue() in progress, + * but in this case its caller should run under rcu_read_lock() and + * sighand_cachep is SLAB_DESTROY_BY_RCU, we can safely return. + */ + if (likely(!waitqueue_active(wqh))) + return; + + /* wait_queue_t->func(POLLFREE) should do remove_wait_queue() */ + wake_up_poll(wqh, POLLHUP | POLLFREE); +} + struct signalfd_ctx { sigset_t sigmask; }; |
