summaryrefslogtreecommitdiff
path: root/drivers/scsi/raid_class.c
diff options
context:
space:
mode:
authorJames Bottomley <James.Bottomley@HansenPartnership.com>2008-04-02 15:05:48 (GMT)
committerJames Bottomley <James.Bottomley@HansenPartnership.com>2008-04-07 17:19:10 (GMT)
commit2f3edc6936e3f6be3f1df1e89c141ae028fa605e (patch)
tree14198ea135c600b42e4c7416db44967a6517a2db /drivers/scsi/raid_class.c
parentfa8e36c39b00a219d2c37250e493c3421e0e67e9 (diff)
downloadlinux-2f3edc6936e3f6be3f1df1e89c141ae028fa605e.tar.xz
[SCSI] transport_class: BUG if we can't release the attribute container
Every current transport class calls transport_container_release but ignores the return value. This is catastrophic if it returns an error because the containers are part of a global list and the next action of almost every transport class is to free the memory used by the container. Fix this by making transport_container_release a void, but making it BUG if attribute_container_release returns an error ... this catches the root cause of a system panic much earlier. If we don't do this, we get an eventual BUG when the attribute container list notices the corruption caused by the freed memory it's still referencing. Also made attribute_container_release __must_check as a reminder. Cc: Greg KH <greg@kroah.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'drivers/scsi/raid_class.c')
-rw-r--r--drivers/scsi/raid_class.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/scsi/raid_class.c b/drivers/scsi/raid_class.c
index 86e1318..52182a7 100644
--- a/drivers/scsi/raid_class.c
+++ b/drivers/scsi/raid_class.c
@@ -289,7 +289,7 @@ raid_class_release(struct raid_template *r)
{
struct raid_internal *i = to_raid_internal(r);
- attribute_container_unregister(&i->r.raid_attrs.ac);
+ BUG_ON(attribute_container_unregister(&i->r.raid_attrs.ac));
kfree(i);
}