diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2025-07-28 10:43:46 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2025-07-28 10:43:46 -0700 |
commit | 953e117bf4aad7e1d01419d4bcc03ab93420387c (patch) | |
tree | b3410ccea9b857f5670efdef6483b468fde9ae6b | |
parent | 815d3c16280ce289c558255acc4296b36383d1a4 (diff) | |
parent | ce23f29e7dfb5320c9e32edb5f4737ad4b732abb (diff) |
Merge tag 'pull-fd' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull CLASS(fd) update from Al Viro:
"A missing bit of commit 66635b077624 ("assorted variants of irqfd
setup: convert to CLASS(fd)") from a year ago.
mshv_eventfd would've been covered by that, but it had forked slightly
before that series and got merged into mainline later"
* tag 'pull-fd' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
mshv_eventfd: convert to CLASS(fd)
-rw-r--r-- | drivers/hv/mshv_eventfd.c | 14 |
1 files changed, 3 insertions, 11 deletions
diff --git a/drivers/hv/mshv_eventfd.c b/drivers/hv/mshv_eventfd.c index 8dd22be2ca0b4..48c514da34eb0 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 @@ fail: if (eventfd && !IS_ERR(eventfd)) eventfd_ctx_put(eventfd); - fdput(f); - out: kfree(irqfd); return ret; |