On 7/12/2025 9:52 AM, Al Viro wrote:
> [in viro/vfs.git #work.fd; if nobody objects, into #for-next it goes...]
> 
> similar to 66635b077624 ("assorted variants of irqfd setup: convert
> to CLASS(fd)") a year ago...
>     
> Signed-off-by: Al Viro <[email protected]>
> ---
> diff --git a/drivers/hv/mshv_eventfd.c b/drivers/hv/mshv_eventfd.c
> index 8dd22be2ca0b..48c514da34eb 100644
> --- a/drivers/hv/mshv_eventfd.c
> +++ b/drivers/hv/mshv_eventfd.c
> @@ -377,10 +377,11 @@ static int mshv_irqfd_assign(struct mshv_partition *pt,
>       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;
> @@ -390,8 +391,7 @@ static int mshv_irqfd_assign(struct mshv_partition *pt,
>       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;
>       }
> @@ -496,12 +496,6 @@ static int mshv_irqfd_assign(struct mshv_partition *pt,
>               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:
> @@ -514,8 +508,6 @@ static int mshv_irqfd_assign(struct mshv_partition *pt,
>       if (eventfd && !IS_ERR(eventfd))
>               eventfd_ctx_put(eventfd);
>  
> -     fdput(f);
> -
>  out:
>       kfree(irqfd);
>       return ret;

Looks fine to me, thanks.

Reviewed-by: Nuno Das Neves <[email protected]>

Reply via email to