Skip to contentSkip to conversation

cciss: bug fix, prevent cciss from loading in kdump kernel

PATCH In review Mike Miller 2 participants 5 messages Apr 15, 2013 – Apr 18, 2013

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 cciss: bug fix, prevent cciss from loading in kdump kernel

Patch 1/1

If hpsa is selected as the Smart Array driver cciss may try to load in the kdump kernel. When this happens kdump fails and a core file cannot be created. This patch prevents cciss from trying to load in this scenario. This effects primarily older Smart Array controllers.

From: Mike Miller <[email protected]>

---
 drivers/block/cciss.c |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)
drivers/block/cciss.c +6 -0
index 1c1b8e5..a6c0973 100644
@@ -4960,6 +4960,12 @@ static int cciss_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
 	ctlr_info_t *h;
 	unsigned long flags;
 
+	/*
+	 * if this is the kdump kernel and the user has set the flags to
+	 * use hpsa rather than cciss just bail
+	 */
+	if ((reset_devices) && (cciss_allow_hpsa == 1))
+		return -ENODEV;
 	rc = cciss_init_reset_devices(pdev);
 	if (rc) {
 		if (rc != -ENOTSUPP)
#1 lore raw
Quoted 7 lines · On Mon, 15 Apr 2013 12:59:06 -0500 Mike Miller <[email protected]> wrote:

Patch 1/1

If hpsa is selected as the Smart Array driver cciss may try to load in the kdump kernel. When this happens kdump fails and a core file cannot be created. This patch prevents cciss from trying to load in this scenario. This effects primarily older Smart Array controllers.

OK, this is weird. kdump and scsi drivers are pretty darn remote things and I've never heard of such an interaction. Can you tell us a bit more about how and why this happened? Is there something special about cciss, or can we expect similar kdump interactions with other device drivers?

#2 lore raw
Quoted 10 lines · Andrew Morton
Quoted 7 lines · On Mon, 15 Apr 2013 12:59:06 -0500 Mike Miller <[email protected]> wrote:

Patch 1/1

If hpsa is selected as the Smart Array driver cciss may try to load in the kdump kernel. When this happens kdump fails and a core file cannot be created. This patch prevents cciss from trying to load in this scenario. This effects primarily older Smart Array controllers.

Quoted 4 lines

OK, this is weird. kdump and scsi drivers are pretty darn remote things and I've never heard of such an interaction. Can you tell us a bit more about how and why this happened? Is there something special about cciss, or can we expect similar kdump interactions with other device drivers?

I thought it was weird, too. I've never seen this happen before and it was very hard to duplicate this in the lab. I think the reason it did happen was twofold. The cciss driver was being loaded first from the kdump initramfs image and the driver load sequence is now different than it used to be. We used to call cciss_pci_init as one the first things we did from our probe function, cciss_init_one. Now if reset_devices is true we immediately call into cciss_hard_reset controller and we do not check to see if cciss_allow_hpsa is set. Sorry, that's the best explanation I have.
Offhand, I don't know of any of any other hardware devices that have 2 distinctly different drivers, one block and one scsi. So I don't _think_ this would happen with other drivers/devices.

-- mikem

Quoted 2 lines
#3 lore raw
In reply to Mike Miller
Quoted 12 lines · On Mon, 15 Apr 2013 12:59:06 -0500 Mike Miller <[email protected]> wrote:

Patch 1/1

If hpsa is selected as the Smart Array driver cciss may try to load in the kdump kernel. When this happens kdump fails and a core file cannot be created. This patch prevents cciss from trying to load in this scenario. This effects primarily older Smart Array controllers.

...

drivers/block/cciss.c static int cciss_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) · line 4968

Quoted 9 lines
drivers/block/cciss.c +6 -0
@@ -4960,6 +4960,12 @@ static int cciss_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
 	ctlr_info_t *h;
 	unsigned long flags;
 
+	/*
+	 * if this is the kdump kernel and the user has set the flags to
+	 * use hpsa rather than cciss just bail
+	 */
+	if ((reset_devices) && (cciss_allow_hpsa == 1))
+		return -ENODEV;

OK, wazzup. That's the only occurrence of the symbol "cciss_allow_hpsa" in Linux and needless to say, the compiler laughed at me.

#4 lore raw
Quoted 17 lines · Andrew Morton
Quoted 15 lines · On Mon, 15 Apr 2013 12:59:06 -0500 Mike Miller <[email protected]> wrote:

Patch 1/1

If hpsa is selected as the Smart Array driver cciss may try to load in the kdump kernel. When this happens kdump fails and a core file cannot be created. This patch prevents cciss from trying to load in this scenario. This effects primarily older Smart Array controllers.

...

drivers/block/cciss.c +0 -0
@@ -4960,6 +4960,12 @@ static int cciss_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
 	ctlr_info_t *h;
 	unsigned long flags;
 
Quoted 10 lines

drivers/block/cciss.c static int cciss_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) · line 4968

Quoted 6 lines
drivers/block/cciss.c +6 -0
+	/*
+	 * if this is the kdump kernel and the user has set the flags to
+	 * use hpsa rather than cciss just bail
+	 */
+	if ((reset_devices) && (cciss_allow_hpsa == 1))
+		return -ENODEV;

OK, wazzup. That's the only occurrence of the symbol "cciss_allow_hpsa" in Linux and needless to say, the compiler laughed at me.

Argh. Sorry about that. I could have sworn I tested that on rc7. I'll have another patch ready in a bit to add the flag.

Quoted 1 line