浏览代码

libata: make EH fail gracefully if no reset method is available

When no reset method is available, libata currently oopses.  Although
the condition can't happen unless there's a bug in a low level driver,
oopsing isn't the best way to report the error condition.  Complain,
dump stack and fail reset instead.

Signed-off-by: Tejun Heo <htejun@gmail.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Tejun Heo 17 年之前
父节点
当前提交
4f7faa3f2b
共有 1 个文件被更改,包括 6 次插入1 次删除
  1. 6 1
      drivers/ata/libata-eh.c

+ 6 - 1
drivers/ata/libata-eh.c

@@ -2137,9 +2137,14 @@ int ata_eh_reset(struct ata_link *link, int classify,
 	if (hardreset) {
 	if (hardreset) {
 		reset = hardreset;
 		reset = hardreset;
 		ehc->i.action = ATA_EH_HARDRESET;
 		ehc->i.action = ATA_EH_HARDRESET;
-	} else {
+	} else if (softreset) {
 		reset = softreset;
 		reset = softreset;
 		ehc->i.action = ATA_EH_SOFTRESET;
 		ehc->i.action = ATA_EH_SOFTRESET;
+	} else {
+		ata_link_printk(link, KERN_ERR, "BUG: no reset method, "
+				"please report to linux-ide@vger.kernel.org\n");
+		dump_stack();
+		return -EINVAL;
 	}
 	}
 
 
 	if (prereset) {
 	if (prereset) {