struct eventfd_ctx *eventfd = NULL, *resamplefd = NULL;
        struct mshv_irqfd *irqfd, *tmp;
        unsigned int events;
-       struct fd f;
        int ret;
        int idx;
 
+       CLASS(fd, f)(args->fd);
+
        irqfd = kzalloc(sizeof(*irqfd), GFP_KERNEL);
        if (!irqfd)
                return -ENOMEM;
        INIT_WORK(&irqfd->irqfd_shutdown, mshv_irqfd_shutdown);
        seqcount_spinlock_init(&irqfd->irqfd_irqe_sc, &pt->pt_irqfds_lock);
 
-       f = fdget(args->fd);
-       if (!fd_file(f)) {
+       if (fd_empty(f)) {
                ret = -EBADF;
                goto out;
        }
                mshv_assert_irq_slow(irqfd);
 
        srcu_read_unlock(&pt->pt_irq_srcu, idx);
-       /*
-        * do not drop the file until the irqfd is fully initialized, otherwise
-        * we might race against the POLLHUP
-        */
-       fdput(f);
-
        return 0;
 
 fail:
        if (eventfd && !IS_ERR(eventfd))
                eventfd_ctx_put(eventfd);
 
-       fdput(f);
-
 out:
        kfree(irqfd);
        return ret;