X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=blobdiff_plain;f=linux_module%2Fiface-packet.c;fp=linux_module%2Fiface-packet.c;h=9df66bd93646b7f6979b71aa85db46fb005e1798;hp=f3562b09035827c873e4eb6e112bb632318159f3;hb=7f5af6dae89572f00563cde3165b87b83c3ed7e4;hpb=dc41a5e6b7601dcdf9eb2ac84dbf297cac037f5b diff --git a/linux_module/iface-packet.c b/linux_module/iface-packet.c index f3562b0..9df66bd 100644 --- a/linux_module/iface-packet.c +++ b/linux_module/iface-packet.c @@ -249,23 +249,25 @@ palacios_packet_connect(struct v3_packet * packet, unsigned long flags; spin_lock_irqsave(&(packet_state.lock), flags); - iface = find_interface(host_nic); + spin_unlock_irqrestore(&(packet_state.lock),flags); + if(iface == NULL){ iface = (struct raw_interface *)kmalloc(sizeof(struct raw_interface), GFP_KERNEL); + if (!iface) { + printk("Palacios Packet Interface: Fails to allocate interface\n"); + return -1; + } if(init_raw_interface(iface, host_nic) != 0) { printk("Palacios Packet Interface: Fails to initiate an raw interface on device %s\n", host_nic); kfree(iface); - spin_unlock_irqrestore(&(packet_state.lock), flags); - return -1; } - + spin_lock_irqsave(&(packet_state.lock), flags); list_add(&(iface->node), &(packet_state.open_interfaces)); + spin_unlock_irqrestore(&(packet_state.lock),flags); } - spin_unlock_irqrestore(&(packet_state.lock), flags); - packet->host_packet_data = iface; list_add(&(packet->node), &(iface->brdcast_recvers));