On Fri, 8 May 2020 17:36:30 +0200 Christoph Hellwig hch@lst.de wrote:
Use __anon_inode_getfd instead of opencoding the logic using get_unused_fd_flags + anon_inode_getfile.
Signed-off-by: Christoph Hellwig hch@lst.de
drivers/vfio/vfio.c | 37 ++++++++----------------------------- 1 file changed, 8 insertions(+), 29 deletions(-)
Thanks!
Acked-by: Alex Williamson alex.williamson@redhat.com
diff --git a/drivers/vfio/vfio.c b/drivers/vfio/vfio.c index 765e0e5d83ed9..33a88103f857f 100644 --- a/drivers/vfio/vfio.c +++ b/drivers/vfio/vfio.c @@ -1451,42 +1451,21 @@ static int vfio_group_get_device_fd(struct vfio_group *group, char *buf) return ret; }
- /*
* We can't use anon_inode_getfd() because we need to modify
* the f_mode flags directly to allow more than just ioctls
*/
- ret = get_unused_fd_flags(O_CLOEXEC);
- if (ret < 0) {
device->ops->release(device->device_data);
vfio_device_put(device);
return ret;
- }
- filep = anon_inode_getfile("[vfio-device]", &vfio_device_fops,
device, O_RDWR);
- if (IS_ERR(filep)) {
put_unused_fd(ret);
ret = PTR_ERR(filep);
device->ops->release(device->device_data);
vfio_device_put(device);
return ret;
- }
- /*
* TODO: add an anon_inode interface to do this.
* Appears to be missing by lack of need rather than
* explicitly prevented. Now there's need.
*/
- ret = __anon_inode_getfd("[vfio-device]", &vfio_device_fops,
device, O_CLOEXEC | O_RDWR, &filep);
- if (ret < 0)
filep->f_mode |= (FMODE_LSEEK | FMODE_PREAD | FMODE_PWRITE);goto release;
atomic_inc(&group->container_users);
fd_install(ret, filep);
if (group->noiommu) dev_warn(device->dev, "vfio-noiommu device opened by user " "(%s:%d)\n", current->comm, task_pid_nr(current));
- return ret;
+release:
- device->ops->release(device->device_data);
- vfio_device_put(device); return ret;
}