mirror of
https://github.com/torvalds/linux.git
synced 2024-12-29 06:12:08 +00:00
ieee1394: sbp2: fix sbp2_remove_device for error cases
Bug found by Olaf Hering <olh@suse.de>: sbp2util_remove_command_orb_pool requires a valid lu->hi pointer. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
This commit is contained in:
parent
d1caeb02b1
commit
a2ee3f9bbb
@ -513,9 +513,9 @@ static int sbp2util_create_command_orb_pool(struct sbp2_lu *lu)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void sbp2util_remove_command_orb_pool(struct sbp2_lu *lu)
|
||||
static void sbp2util_remove_command_orb_pool(struct sbp2_lu *lu,
|
||||
struct hpsb_host *host)
|
||||
{
|
||||
struct hpsb_host *host = lu->hi->host;
|
||||
struct list_head *lh, *next;
|
||||
struct sbp2_command_info *cmd;
|
||||
unsigned long flags;
|
||||
@ -922,15 +922,16 @@ static void sbp2_remove_device(struct sbp2_lu *lu)
|
||||
|
||||
if (!lu)
|
||||
return;
|
||||
|
||||
hi = lu->hi;
|
||||
if (!hi)
|
||||
goto no_hi;
|
||||
|
||||
if (lu->shost) {
|
||||
scsi_remove_host(lu->shost);
|
||||
scsi_host_put(lu->shost);
|
||||
}
|
||||
flush_scheduled_work();
|
||||
sbp2util_remove_command_orb_pool(lu);
|
||||
sbp2util_remove_command_orb_pool(lu, hi->host);
|
||||
|
||||
list_del(&lu->lu_list);
|
||||
|
||||
@ -971,9 +972,8 @@ static void sbp2_remove_device(struct sbp2_lu *lu)
|
||||
|
||||
lu->ud->device.driver_data = NULL;
|
||||
|
||||
if (hi)
|
||||
module_put(hi->host->driver->owner);
|
||||
|
||||
module_put(hi->host->driver->owner);
|
||||
no_hi:
|
||||
kfree(lu);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user