diff options
| -rw-r--r-- | drivers/vhost/net.c | 4 | ||||
| -rw-r--r-- | drivers/vhost/vhost.c | 8 | ||||
| -rw-r--r-- | drivers/vhost/vhost.h | 1 |
3 files changed, 12 insertions, 1 deletions
diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c index b07d96b8c0d1..8cf5aece8c84 100644 --- a/drivers/vhost/net.c +++ b/drivers/vhost/net.c | |||
| @@ -1054,6 +1054,10 @@ static long vhost_net_set_owner(struct vhost_net *n) | |||
| 1054 | int r; | 1054 | int r; |
| 1055 | 1055 | ||
| 1056 | mutex_lock(&n->dev.mutex); | 1056 | mutex_lock(&n->dev.mutex); |
| 1057 | if (vhost_dev_has_owner(&n->dev)) { | ||
| 1058 | r = -EBUSY; | ||
| 1059 | goto out; | ||
| 1060 | } | ||
| 1057 | r = vhost_net_set_ubuf_info(n); | 1061 | r = vhost_net_set_ubuf_info(n); |
| 1058 | if (r) | 1062 | if (r) |
| 1059 | goto out; | 1063 | goto out; |
diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c index beee7f5787e6..60aa5ad09a2f 100644 --- a/drivers/vhost/vhost.c +++ b/drivers/vhost/vhost.c | |||
| @@ -344,13 +344,19 @@ static int vhost_attach_cgroups(struct vhost_dev *dev) | |||
| 344 | } | 344 | } |
| 345 | 345 | ||
| 346 | /* Caller should have device mutex */ | 346 | /* Caller should have device mutex */ |
| 347 | bool vhost_dev_has_owner(struct vhost_dev *dev) | ||
| 348 | { | ||
| 349 | return dev->mm; | ||
| 350 | } | ||
| 351 | |||
| 352 | /* Caller should have device mutex */ | ||
| 347 | long vhost_dev_set_owner(struct vhost_dev *dev) | 353 | long vhost_dev_set_owner(struct vhost_dev *dev) |
| 348 | { | 354 | { |
| 349 | struct task_struct *worker; | 355 | struct task_struct *worker; |
| 350 | int err; | 356 | int err; |
| 351 | 357 | ||
| 352 | /* Is there an owner already? */ | 358 | /* Is there an owner already? */ |
| 353 | if (dev->mm) { | 359 | if (vhost_dev_has_owner(dev)) { |
| 354 | err = -EBUSY; | 360 | err = -EBUSY; |
| 355 | goto err_mm; | 361 | goto err_mm; |
| 356 | } | 362 | } |
diff --git a/drivers/vhost/vhost.h b/drivers/vhost/vhost.h index a7ad63592987..64adcf99ff33 100644 --- a/drivers/vhost/vhost.h +++ b/drivers/vhost/vhost.h | |||
| @@ -133,6 +133,7 @@ struct vhost_dev { | |||
| 133 | 133 | ||
| 134 | long vhost_dev_init(struct vhost_dev *, struct vhost_virtqueue **vqs, int nvqs); | 134 | long vhost_dev_init(struct vhost_dev *, struct vhost_virtqueue **vqs, int nvqs); |
| 135 | long vhost_dev_set_owner(struct vhost_dev *dev); | 135 | long vhost_dev_set_owner(struct vhost_dev *dev); |
| 136 | bool vhost_dev_has_owner(struct vhost_dev *dev); | ||
| 136 | long vhost_dev_check_owner(struct vhost_dev *); | 137 | long vhost_dev_check_owner(struct vhost_dev *); |
| 137 | struct vhost_memory *vhost_dev_reset_owner_prepare(void); | 138 | struct vhost_memory *vhost_dev_reset_owner_prepare(void); |
| 138 | void vhost_dev_reset_owner(struct vhost_dev *, struct vhost_memory *); | 139 | void vhost_dev_reset_owner(struct vhost_dev *, struct vhost_memory *); |
