On Mon, 2011-11-07 at 17:24 +1100, Stephen Rothwell wrote:
WARNING: at drivers/scsi/scsi_lib.c:1704
I get lots more of these. The obvious commit to point the finger at
is 3308511c93e6 ("[SCSI] Make scsi_free_queue() kill pending SCSI
commands") but the root cause may be something different.
Actually, I don't think it's anything to do with this: it's Anton's
fault
commit f7c9c6bb14f3104608a3a83cadea10a6943d2804
Author: Anton Blanchard<anton@xxxxxxxxx>
Date: Thu Nov 3 08:56:22 2011 +1100
[SCSI] Fix block queue and elevator memory leak in scsi_alloc_sdev
Doesn't completely do the teardown. The true fix is to do a proper
teardown instead of hand rolling it. Does this fix it for you?
James
---
diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c
index 72273a0..b3c6d95 100644
--- a/drivers/scsi/scsi_scan.c
+++ b/drivers/scsi/scsi_scan.c
@@ -319,11 +319,7 @@ static struct scsi_device *scsi_alloc_sdev(struct scsi_target *starget,
return sdev;
out_device_destroy:
- scsi_device_set_state(sdev, SDEV_DEL);
- transport_destroy_device(&sdev->sdev_gendev);
- put_device(&sdev->sdev_dev);
- scsi_free_queue(sdev->request_queue);
- put_device(&sdev->sdev_gendev);
+ __scsi_remove_device(sdev);
out:
if (display_failure_msg)
printk(ALLOC_FAILURE_MSG, __func__);