diff --git a/fs/userfaultfd.c b/fs/userfaultfd.c index 2d8c2d848668076111daf445098fdf182aa6c9e6..06ea26b8c996f3cc7a9d6fd177260f89394fb325 100644 --- a/fs/userfaultfd.c +++ b/fs/userfaultfd.c @@ -854,6 +854,9 @@ static int userfaultfd_release(struct inode *inode, struct file *file) __wake_up_locked_key(&ctx->fault_wqh, TASK_NORMAL, &range); spin_unlock(&ctx->fault_pending_wqh.lock); + /* Flush pending events that may still wait on event_wqh */ + wake_up_all(&ctx->event_wqh); + wake_up_poll(&ctx->fd_wqh, POLLHUP); userfaultfd_ctx_put(ctx); return 0;