|
@@ -419,7 +419,6 @@ void vhost_dev_init(struct vhost_dev *dev,
|
|
|
dev->nvqs = nvqs;
|
|
|
mutex_init(&dev->mutex);
|
|
|
dev->log_ctx = NULL;
|
|
|
- dev->log_file = NULL;
|
|
|
dev->umem = NULL;
|
|
|
dev->iotlb = NULL;
|
|
|
dev->mm = NULL;
|
|
@@ -625,9 +624,6 @@ void vhost_dev_cleanup(struct vhost_dev *dev)
|
|
|
if (dev->log_ctx)
|
|
|
eventfd_ctx_put(dev->log_ctx);
|
|
|
dev->log_ctx = NULL;
|
|
|
- if (dev->log_file)
|
|
|
- fput(dev->log_file);
|
|
|
- dev->log_file = NULL;
|
|
|
/* No one will access memory at this point */
|
|
|
vhost_umem_clean(dev->umem);
|
|
|
dev->umem = NULL;
|
|
@@ -1572,8 +1568,7 @@ EXPORT_SYMBOL_GPL(vhost_init_device_iotlb);
|
|
|
/* Caller must have device mutex */
|
|
|
long vhost_dev_ioctl(struct vhost_dev *d, unsigned int ioctl, void __user *argp)
|
|
|
{
|
|
|
- struct file *eventfp, *filep = NULL;
|
|
|
- struct eventfd_ctx *ctx = NULL;
|
|
|
+ struct eventfd_ctx *ctx;
|
|
|
u64 p;
|
|
|
long r;
|
|
|
int i, fd;
|
|
@@ -1619,19 +1614,12 @@ long vhost_dev_ioctl(struct vhost_dev *d, unsigned int ioctl, void __user *argp)
|
|
|
r = get_user(fd, (int __user *)argp);
|
|
|
if (r < 0)
|
|
|
break;
|
|
|
- eventfp = fd == -1 ? NULL : eventfd_fget(fd);
|
|
|
- if (IS_ERR(eventfp)) {
|
|
|
- r = PTR_ERR(eventfp);
|
|
|
+ ctx = fd == -1 ? NULL : eventfd_ctx_fdget(fd);
|
|
|
+ if (IS_ERR(ctx)) {
|
|
|
+ r = PTR_ERR(ctx);
|
|
|
break;
|
|
|
}
|
|
|
- if (eventfp != d->log_file) {
|
|
|
- filep = d->log_file;
|
|
|
- d->log_file = eventfp;
|
|
|
- ctx = d->log_ctx;
|
|
|
- d->log_ctx = eventfp ?
|
|
|
- eventfd_ctx_fileget(eventfp) : NULL;
|
|
|
- } else
|
|
|
- filep = eventfp;
|
|
|
+ swap(ctx, d->log_ctx);
|
|
|
for (i = 0; i < d->nvqs; ++i) {
|
|
|
mutex_lock(&d->vqs[i]->mutex);
|
|
|
d->vqs[i]->log_ctx = d->log_ctx;
|
|
@@ -1639,8 +1627,6 @@ long vhost_dev_ioctl(struct vhost_dev *d, unsigned int ioctl, void __user *argp)
|
|
|
}
|
|
|
if (ctx)
|
|
|
eventfd_ctx_put(ctx);
|
|
|
- if (filep)
|
|
|
- fput(filep);
|
|
|
break;
|
|
|
default:
|
|
|
r = -ENOIOCTLCMD;
|