cciss: Fix excessive gendisk freeing bug on driver unload.
Fix bug that free_hba was calling put_disk for all gendisk[] pointers -- all 1024 of them -- regardless of whether the were used or not (NULL). This bug could cause rmmod to oops if logical drives had been deleted during the driver's lifetime. Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
This commit is contained in:
parent
2d11d9931f
commit
2c935593ac
|
@ -3893,15 +3893,16 @@ Enomem:
|
|||
return -1;
|
||||
}
|
||||
|
||||
static void free_hba(int i)
|
||||
static void free_hba(int n)
|
||||
{
|
||||
ctlr_info_t *p = hba[i];
|
||||
int n;
|
||||
ctlr_info_t *h = hba[n];
|
||||
int i;
|
||||
|
||||
hba[i] = NULL;
|
||||
for (n = 0; n < CISS_MAX_LUN; n++)
|
||||
put_disk(p->gendisk[n]);
|
||||
kfree(p);
|
||||
hba[n] = NULL;
|
||||
for (i = 0; i < h->highest_lun + 1; i++)
|
||||
if (h->gendisk[i] != NULL)
|
||||
put_disk(h->gendisk[i]);
|
||||
kfree(h);
|
||||
}
|
||||
|
||||
/* Send a message CDB to the firmware. */
|
||||
|
|
Loading…
Reference in New Issue