When an eventfd is closed, a wakeup with POLLHUP will be issued, but cgroup wants to issue wakeup explicitly, so when a cgroup is removed userspace can be notified. Signed-off-by: Li Zefan <lizefan@xxxxxxxxxx> --- fs/eventfd.c | 11 +++++++++++ include/linux/eventfd.h | 5 +++++ 2 files changed, 16 insertions(+) diff --git a/fs/eventfd.c b/fs/eventfd.c index 35470d9..acf15e3 100644 --- a/fs/eventfd.c +++ b/fs/eventfd.c @@ -67,6 +67,17 @@ __u64 eventfd_signal(struct eventfd_ctx *ctx, __u64 n) } EXPORT_SYMBOL_GPL(eventfd_signal); +/** + * eventfd_signal_hangup - Notify that this eventfd is hung up. + * @ctx: [in] Pointer to the eventfd context. + * + * Issue a POLLHUP wakeup. + */ +void eventfd_signal_hangup(struct eventfd_ctx *ctx) +{ + wake_up_poll(&ctx->wqh, POLLHUP); +} + static void eventfd_free_ctx(struct eventfd_ctx *ctx) { kfree(ctx); diff --git a/include/linux/eventfd.h b/include/linux/eventfd.h index 3c3ef19..68af706 100644 --- a/include/linux/eventfd.h +++ b/include/linux/eventfd.h @@ -35,6 +35,7 @@ struct file *eventfd_fget(int fd); struct eventfd_ctx *eventfd_ctx_fdget(int fd); struct eventfd_ctx *eventfd_ctx_fileget(struct file *file); __u64 eventfd_signal(struct eventfd_ctx *ctx, __u64 n); +void eventfd_signal_hangup(struct eventfd_ctx *ctx); ssize_t eventfd_ctx_read(struct eventfd_ctx *ctx, int no_wait, __u64 *cnt); int eventfd_ctx_remove_wait_queue(struct eventfd_ctx *ctx, wait_queue_t *wait, __u64 *cnt); @@ -60,6 +61,10 @@ static inline int eventfd_signal(struct eventfd_ctx *ctx, int n) return -ENOSYS; } +static inline void eventfd_signal_hangup(struct eventfd_ctx *ctx) +{ +} + static inline void eventfd_ctx_put(struct eventfd_ctx *ctx) { -- 1.8.0.2 -- To unsubscribe from this list: send the line "unsubscribe cgroups" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html