@@ -1286,27 +1286,18 @@ static int vhost_net_open(struct inode *inode, struct file *f)
if (!n)
return -ENOMEM;
vqs = kmalloc_array(VHOST_NET_VQ_MAX, sizeof(*vqs), GFP_KERNEL);
- if (!vqs) {
- kvfree(n);
- return -ENOMEM;
- }
+ if (!vqs)
+ goto err_vqs;
queue = kmalloc_array(VHOST_NET_BATCH, sizeof(void *),
GFP_KERNEL);
- if (!queue) {
- kfree(vqs);
- kvfree(n);
- return -ENOMEM;
- }
+ if (!queue)
+ goto err_queue;
n->vqs[VHOST_NET_VQ_RX].rxq.queue = queue;
xdp = kmalloc_array(VHOST_NET_BATCH, sizeof(*xdp), GFP_KERNEL);
- if (!xdp) {
- kfree(vqs);
- kvfree(n);
- kfree(queue);
- return -ENOMEM;
- }
+ if (!xdp)
+ goto err_xdp;
n->vqs[VHOST_NET_VQ_TX].xdp = xdp;
dev = &n->dev;
@@ -1338,6 +1329,14 @@ static int vhost_net_open(struct inode *inode, struct file *f)
n->refcnt_bias = 0;
return 0;
+
+err_xdp:
+ kfree(queue);
+err_queue:
+ kfree(vqs);
+err_vqs:
+ kvfree(n);
+ return -ENOMEM;
}
static struct socket *vhost_net_stop_vq(struct vhost_net *n,