Rely on the fd exit path machinery. Signed-off-by: Christian Brauner (Amutable) --- virt/kvm/guest_memfd.c | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index 625e62e1a031..e0d1cb869342 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -526,17 +526,16 @@ static int __kvm_gmem_create(struct kvm *kvm, loff_t size, u64 flags) struct gmem_file *f; struct inode *inode; struct file *file; - int fd, err; + const struct fd_slot *fd; + int err; - fd = get_unused_fd_flags(0); - if (fd < 0) - return fd; + fd = fd_prepare(0); + if (IS_ERR(fd)) + return PTR_ERR(fd); f = kzalloc_obj(*f); - if (!f) { - err = -ENOMEM; - goto err_fd; - } + if (!f) + return -ENOMEM; /* __fput() will take care of fops_put(). */ if (!fops_get(&kvm_gmem_fops)) { @@ -575,8 +574,7 @@ static int __kvm_gmem_create(struct kvm *kvm, loff_t size, u64 flags) xa_init(&f->bindings); list_add(&f->entry, &GMEM_I(inode)->gmem_file_list); - fd_install(fd, file); - return fd; + return fd_stage(fd, file); err_inode: iput(inode); @@ -584,8 +582,6 @@ static int __kvm_gmem_create(struct kvm *kvm, loff_t size, u64 flags) fops_put(&kvm_gmem_fops); err_gmem: kfree(f); -err_fd: - put_unused_fd(fd); return err; } -- 2.53.0