diff --git a/fs/eventpoll.c b/fs/eventpoll.c index 67db22fe99c5..ea4436f409fb 100644 --- a/fs/eventpoll.c +++ b/fs/eventpoll.c @@ -922,14 +922,18 @@ static __poll_t ep_read_events_proc(struct eventpoll *ep, struct list_head *head return 0; } -static __poll_t ep_eventpoll_poll(struct file *file, poll_table *wait) +static struct wait_queue_head *ep_eventpoll_get_poll_head(struct file *file, + __poll_t eventmask) +{ + struct eventpoll *ep = file->private_data; + return &ep->poll_wait; +} + +static __poll_t ep_eventpoll_poll_mask(struct file *file, __poll_t eventmask) { struct eventpoll *ep = file->private_data; int depth = 0; - /* Insert inside our poll wait queue */ - poll_wait(file, &ep->poll_wait, wait); - /* * Proceed to find out if wanted events are really available inside * the ready list. @@ -968,7 +972,8 @@ static const struct file_operations eventpoll_fops = { .show_fdinfo = ep_show_fdinfo, #endif .release = ep_eventpoll_release, - .poll = ep_eventpoll_poll, + .get_poll_head = ep_eventpoll_get_poll_head, + .poll_mask = ep_eventpoll_poll_mask, .llseek = noop_llseek, };