Mark Haney wrote:
I just rebooted one of my SAN hosts, running FC6, and had it boot into the latest FC6 kernel 2.6.22-9. After the boot, the primary SAN partitions it mounts weren't available. A check through /var/log/messages revealed this little nugget:
Nov 9 10:01:04 blowingrock kernel: QLogic Fibre Channel HBA Driver Nov 9 10:01:04 blowingrock kernel: e1000: eth0: e1000_probe: Intel(R) PRO/1000 Network Connection Nov 9 10:01:04 blowingrock kernel: ACPI: PCI Interrupt 0000:01:01.0[A] -> GSI 28 (level, low) -> IRQ 28 Nov 9 10:01:04 blowingrock kernel: qla2xxx 0000:01:01.0: Found an ISP2300, irq 28, iobase 0xffffc20001438000 Nov 9 10:01:04 blowingrock kernel: qla2xxx 0000:01:01.0: Configuring PCI space... Nov 9 10:01:04 blowingrock kernel: qla2xxx 0000:01:01.0: Configure NVRAM parameters... Nov 9 10:01:04 blowingrock kernel: qla2xxx 0000:01:01.0: Verifying loaded RISC code... Nov 9 10:01:04 blowingrock kernel: ACPI: PCI Interrupt 0000:02:04.1[B] -> GSI 26 (level, low) -> IRQ 26 Nov 9 10:01:04 blowingrock kernel: e1000: 0000:02:04.1: e1000_probe: (PCI:33MHz:64-bit) 00:04:23:a8:96:d7 Nov 9 10:01:04 blowingrock kernel: Floppy drive(s): fd0 is 1.44M Nov 9 10:01:04 blowingrock kernel: FDC 0 is a post-1991 82077 Nov 9 10:01:04 blowingrock kernel: e1000: eth1: e1000_probe: Intel(R) PRO/1000 Network Connection Nov 9 10:01:04 blowingrock kernel: qla2xxx 0000:01:01.0: Firmware image unavailable. Nov 9 10:01:04 blowingrock kernel: qla2xxx 0000:01:01.0: Firmware images can be retrieved from: ftp://ftp.qlogic.com/outgoing/linux/firmware/. Nov 9 10:01:04 blowingrock kernel: qla2xxx 0000:01:01.0: Failed to initialize adapter
So, in my panic, I reset grub to point back to the existing .20 kernel and all came up just fine:
Nov 9 10:31:06 blowingrock kernel: qla2xxx 0000:01:01.0: Found an ISP2300, irq 28, iobase 0xffffc20000022000 Nov 9 10:31:06 blowingrock kernel: qla2xxx 0000:01:01.0: Configuring PCI space... Nov 9 10:31:06 blowingrock kernel: qla2xxx 0000:01:01.0: Configure NVRAM parameters... Nov 9 10:31:06 blowingrock kernel: qla2xxx 0000:01:01.0: Verifying loaded RISC code... Nov 9 10:31:06 blowingrock kernel: Intel(R) PRO/1000 Network Driver - version 7.3.15-k2-NAPI Nov 9 10:31:06 blowingrock kernel: Copyright (c) 1999-2006 Intel Corporation. Nov 9 10:31:06 blowingrock kernel: input: PC Speaker as /class/input/input3 Nov 9 10:31:06 blowingrock kernel: qla2xxx 0000:01:01.0: Allocated (412 KB) for firmware dump... Nov 9 10:31:06 blowingrock kernel: scsi2 : qla2xxx Nov 9 10:31:06 blowingrock kernel: hdc: ATAPI 52X CD-ROM drive, 128kB Cache, UDMA(33) Nov 9 10:31:06 blowingrock kernel: Uniform CD-ROM driver Revision: 3.20 Nov 9 10:31:06 blowingrock kernel: Floppy drive(s): fd0 is 1.44M Nov 9 10:31:06 blowingrock kernel: FDC 0 is a post-1991 82077 Nov 9 10:31:06 blowingrock kernel: qla2xxx 0000:01:01.0: LOOP UP detected (2 Gbps).
So my question, WTH is going on here? I've obviously missed a memo or something.
Well.. what's going on is that the kernel is trying to load the firmware for the qla2xxx driver from the initrd, but it cannot find it. It seems that the firmware is not inside the initrd (unlike your other kernel, which does have this firmware in its initrd).
Why this is happening is unclear to me, because the firmware should be present inside the initrd, however you can create an initrd yourself for the new kernel (initrd-2.6.22.7-57.fc6.img should be replaced by your initrd of the new kernel): mkdir /root/new_initrd cp /boot/initrd-2.6.22.7-57.fc6.img /root/new_initrd/initrd-2.6.22.7-57.fc6.img.gz cd /root/new_initrd gunzip initrd-2.6.22.7-57.fc6.img.gz mkdir img cd img cat ../initrd-2.6.22.7-57.fc6.img | cpio -iv
You should now have the contents of the initrd in the directory /root/new_initrd/img/ You can get the firmware from the website, which is located inside your logfiles or use one you might already have in /lib/firmware/. Now let's put the firmware into the initrd and put it back together:
mkdir /root/new_initrd/img/lib/firmware cp the-firmware /root/new_initrd/img/lib/firmware cd /root/new_initrd/img/ find . -depth -print | cpio -oc > ../initrd-2.6.22.7-57.fc6.fixed.img ; cd .. ; gzip initrd-2.6.22.7-57.fc6.fixed.img cd .. mv initrd-2.6.22.7-57.fc6.fixed.img.gz initrd-2.6.22.7-57.fc6.fixed.img cp initrd-2.6.22.7-57.fc6.fixed.img /boot/
You should now have a new initrd with the correct firmware. It's a bit of a hassle, and there should be a better solution to this problem, but it *is* a solution :) After changing your initrd in /etc/grub.conf, it should work again.
Hope it all works out.