diff options
author | vhanquez@kneesa.uk.xensource.com <vhanquez@kneesa.uk.xensource.com> | 2005-12-31 14:16:13 +0000 |
---|---|---|
committer | vhanquez@kneesa.uk.xensource.com <vhanquez@kneesa.uk.xensource.com> | 2005-12-31 14:16:13 +0000 |
commit | 4b6164a042993aa91a346146344cc9a6f1a775e3 (patch) | |
tree | 8e4de066966b934ee8f0fcbdb7aa8078032994db | |
parent | 24b0fec3cf6661ee1ef82a5dffed48ec987ea95b (diff) | |
download | xen-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.c | 30 |
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) |