--- mkinitrd.orig	2009-12-18 13:34:39.000000000 +0000
+++ mkinitrd	2009-12-18 15:30:29.000000000 +0000
@@ -540,11 +540,6 @@
     result=${result##* = }
 }
 
-ibft_get_rec_val() {
-    result=$(/sbin/iscsiadm -m fw 2>/dev/null | grep "^${1} = ")
-    result=${result##* = }
-}
-
 iscsi_set_parameters() {
     path=$1
     vecho setting iscsi parameters
@@ -621,16 +616,24 @@
     fi
 }
 
+ibft_done=""
 emit_iscsi_device() {
     dev=${1##iscsi_device_}
-    emit "echo Attaching to iSCSI storage"
 
     inst /sbin/iscsistart "$MNTIMAGE/sbin/iscsistart"
     if iscsi_is_ibft $dev ; then
-        emit "/bin/iscsistart -b"
+	if [ -z "$ibft_done" ] ; then
+	    emit "echo Bringing up NICs in iBFT"
+	    emit -e "$ibft_prenetwork"
+            emit "/bin/iscsistart -n"
+	    emit "echo Attaching iSCSI LUNs in iBFT"
+            emit "/bin/iscsistart -b"
+	    ibft_done=true
+	fi
     else
         iscsi_set_parameters $dev
         # recid is not really used, just use 0 for it
+        emit "echo Attaching to iSCSI storage"
         emit "/bin/iscsistart -t ${tgt_name} -i ${nit_name} \
             -g ${tpgt} -a ${tgt_ipaddr} ${chap} ${chap_pw} \
             ${chap_in} ${chap_in_pw}"
@@ -646,6 +649,7 @@
     fi
 }
 
+ibft_prenetwork=""
 handleiscsi() {
     vecho "Found iscsi component $1"
     findmodule iscsi_tcp
@@ -657,9 +661,16 @@
     if iscsi_is_ibft $1 ; then
 	findmodule iscsi_ibft
 	for mac in $(cat /sys/firmware/ibft/ethernet*/mac) ; do
-	    netdev=$(/sbin/ip -o link list | grep $mac | \
+	    dev=$(/sbin/ip -o link list | grep $mac | \
 		sed 's/^[^ ]\+ \([^ ]\+\): .*$/\1/g')
-            addnetdev $netdev
+	    # Make sure the driver is loaded for this device
+	    # but the configuration is determined from the iBFT at
+	    # runtime
+	    vecho "Adding network device $dev"
+	    findnetdriver $dev
+	    if [ -n "$dev" -a "$dev" != lo ] ; then 
+		ibft_prenetwork="$ibft_prenetwork\nnetname $mac $dev"
+	    fi
         done
     else
         iscsi_set_parameters $1
@@ -840,10 +851,10 @@
             IPSTR="$IPSTR --dns $DNS1"
         fi
     fi
-    prenetwork=""
-    if [ -n "$HWADDR" ]; then
-	prenetwork="netname $HWADDR $dev"
+    if [ -z "$HWADDR" ]; then
+	HWADDR=`cat /sys/class/net/$dev/address`
     fi
+    prenetwork="netname $HWADDR $dev"
     network="network --device $dev --bootproto $BOOTPROTO $IPSTR"
     if [ "$BOOTPROTO" = "dhcp" ]; then
         postnetwork="rename /var/lib/dhclient/dhclient.leases /var/lib/dhclient/dhclient-$dev.leases"
@@ -1834,6 +1845,7 @@
 mknod /dev/console c 5 1
 mknod /dev/ptmx c 5 2
 mknod /dev/rtc c 10 135
+mknod /dev/mem c 1 1
 EOF
 if [ "$(uname -m)" == "ia64" ]; then
     emit "mknod /dev/efirtc c 10 136"
