|
@@ -519,13 +519,12 @@ static long vhost_net_set_backend(struct vhost_net *n, unsigned index, int fd)
|
|
|
|
|
|
/* start polling new socket */
|
|
|
oldsock = vq->private_data;
|
|
|
- if (sock == oldsock)
|
|
|
- goto done;
|
|
|
+ if (sock != oldsock){
|
|
|
+ vhost_net_disable_vq(n, vq);
|
|
|
+ rcu_assign_pointer(vq->private_data, sock);
|
|
|
+ vhost_net_enable_vq(n, vq);
|
|
|
+ }
|
|
|
|
|
|
- vhost_net_disable_vq(n, vq);
|
|
|
- rcu_assign_pointer(vq->private_data, sock);
|
|
|
- vhost_net_enable_vq(n, vq);
|
|
|
-done:
|
|
|
if (oldsock) {
|
|
|
vhost_net_flush_vq(n, index);
|
|
|
fput(oldsock->file);
|