aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvhanquez@kneesa.uk.xensource.com <vhanquez@kneesa.uk.xensource.com>2005-12-31 14:16:13 +0000
committervhanquez@kneesa.uk.xensource.com <vhanquez@kneesa.uk.xensource.com>2005-12-31 14:16:13 +0000
commit4b6164a042993aa91a346146344cc9a6f1a775e3 (patch)
tree8e4de066966b934ee8f0fcbdb7aa8078032994db
parent24b0fec3cf6661ee1ef82a5dffed48ec987ea95b (diff)
downloadxen-4b6164a042993aa91a346146344cc9a6f1a775e3.tar.gz
xen-4b6164a042993aa91a346146344cc9a6f1a775e3.tar.bz2
xen-4b6164a042993aa91a346146344cc9a6f1a775e3.zip
move error handling out of line to avoid duplicated code.
Signed-off-by: Vincent Hanquez <vincent@xensource.com>
-rw-r--r--linux-2.6-xen-sparse/drivers/xen/netback/interface.c30
1 files changed, 14 insertions, 16 deletions
diff --git a/linux-2.6-xen-sparse/drivers/xen/netback/interface.c b/linux-2.6-xen-sparse/drivers/xen/netback/interface.c
index 16cc929a11..a27533cf87 100644
--- a/linux-2.6-xen-sparse/drivers/xen/netback/interface.c
+++ b/linux-2.6-xen-sparse/drivers/xen/netback/interface.c
@@ -183,7 +183,7 @@ static void unmap_frontend_pages(netif_t *netif)
int netif_map(netif_t *netif, unsigned long tx_ring_ref,
unsigned long rx_ring_ref, unsigned int evtchn)
{
- int err;
+ int err = -ENOMEM;
netif_tx_sring_t *txs;
netif_rx_sring_t *rxs;
evtchn_op_t op = {
@@ -199,25 +199,16 @@ int netif_map(netif_t *netif, unsigned long tx_ring_ref,
if (netif->tx_comms_area == NULL)
return -ENOMEM;
netif->rx_comms_area = alloc_vm_area(PAGE_SIZE);
- if (netif->rx_comms_area == NULL) {
- free_vm_area(netif->tx_comms_area);
- return -ENOMEM;
- }
+ if (netif->rx_comms_area == NULL)
+ goto err_rx;
err = map_frontend_pages(netif, tx_ring_ref, rx_ring_ref);
- if (err) {
- free_vm_area(netif->tx_comms_area);
- free_vm_area(netif->rx_comms_area);
- return err;
- }
+ if (err)
+ goto err_map;
err = HYPERVISOR_event_channel_op(&op);
- if (err) {
- unmap_frontend_pages(netif);
- free_vm_area(netif->tx_comms_area);
- free_vm_area(netif->rx_comms_area);
- return err;
- }
+ if (err)
+ goto err_hypervisor;
netif->evtchn = op.u.bind_interdomain.local_port;
@@ -245,6 +236,13 @@ int netif_map(netif_t *netif, unsigned long tx_ring_ref,
rtnl_unlock();
return 0;
+err_hypervisor:
+ unmap_frontend_pages(netif);
+err_map:
+ free_vm_area(netif->rx_comms_area);
+err_rx:
+ free_vm_area(netif->tx_comms_area);
+ return err;
}
static void free_netif_callback(void *arg)