Signed-off-by: Christoph Hellwig <h...@lst.de>
---
 fs/timerfd.c | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/fs/timerfd.c b/fs/timerfd.c
index 0510717f3a53..ee36bb5b2698 100644
--- a/fs/timerfd.c
+++ b/fs/timerfd.c
@@ -226,21 +226,20 @@ static int timerfd_release(struct inode *inode, struct 
file *file)
        kfree_rcu(ctx, rcu);
        return 0;
 }
-
-static __poll_t timerfd_poll(struct file *file, poll_table *wait)
+       
+static struct wait_queue_head *timerfd_get_poll_head(struct file *file,
+               __poll_t eventmask)
 {
        struct timerfd_ctx *ctx = file->private_data;
-       __poll_t events = 0;
-       unsigned long flags;
 
-       poll_wait(file, &ctx->wqh, wait);
+       return &ctx->wqh;
+}
 
-       spin_lock_irqsave(&ctx->wqh.lock, flags);
-       if (ctx->ticks)
-               events |= POLLIN;
-       spin_unlock_irqrestore(&ctx->wqh.lock, flags);
+static __poll_t timerfd_poll_mask(struct file *file, __poll_t eventmask)
+{
+       struct timerfd_ctx *ctx = file->private_data;
 
-       return events;
+       return ctx->ticks ? POLLIN : 0;
 }
 
 static ssize_t timerfd_read(struct file *file, char __user *buf, size_t count,
@@ -364,7 +363,8 @@ static long timerfd_ioctl(struct file *file, unsigned int 
cmd, unsigned long arg
 
 static const struct file_operations timerfd_fops = {
        .release        = timerfd_release,
-       .poll           = timerfd_poll,
+       .get_poll_head  = timerfd_get_poll_head,
+       .poll_mask      = timerfd_poll_mask,
        .read           = timerfd_read,
        .llseek         = noop_llseek,
        .show_fdinfo    = timerfd_show,
-- 
2.14.2

Reply via email to