return -ECONNRESET;
 }
 
+static int vnet_port_alloc_tx_ring(struct vnet_port *port);
+
 static int vnet_send_attr(struct vio_driver_state *vio)
 {
        struct vnet_port *port = to_vnet_port(vio);
        struct net_device *dev = port->vp->dev;
        struct vio_net_attr_info pkt;
        int framelen = ETH_FRAME_LEN;
-       int i;
+       int i, err;
+
+       err = vnet_port_alloc_tx_ring(to_vnet_port(vio));
+       if (err)
+               return err;
 
        memset(&pkt, 0, sizeof(pkt));
        pkt.tag.type = VIO_TYPE_CTRL;
        }
 }
 
-static int vnet_port_alloc_tx_bufs(struct vnet_port *port)
+static int vnet_port_alloc_tx_ring(struct vnet_port *port)
 {
        struct vio_dring_state *dr;
        unsigned long len;
 
        netif_napi_add(port->vp->dev, &port->napi, vnet_poll, NAPI_POLL_WEIGHT);
 
-       err = vnet_port_alloc_tx_bufs(port);
-       if (err)
-               goto err_out_free_ldc;
-
        INIT_HLIST_NODE(&port->hash);
        INIT_LIST_HEAD(&port->list);
 
 
        return 0;
 
-err_out_free_ldc:
-       netif_napi_del(&port->napi);
-       vio_ldc_free(&port->vio);
-
 err_out_free_port:
        kfree(port);