mirror of
https://github.com/torvalds/linux.git
synced 2026-06-09 07:03:37 +02:00
sd name space exhaustion causes system hang
commit 1a03ae0f55 upstream.
Following a site power outage which re-enabled all the ports on my FC
switches, my system subsequently booted with far too many luns! I had
let it run hoping it would make multi-user. It didn't. :( It hung solid
after exhausting the last sd device, sdzzz, and attempting to create sdaaaa
and beyond. I was unable to get a dump.
Discovered using a 2.6.32.13 based system.
correct this by detecting when the last index is utilized and failing
the sd probe of the device. Patch applies to scsi-misc-2.6.
Signed-off-by: Michael Reed <mdr@sgi.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
85e8a7b93d
commit
2c69098395
|
|
@ -2252,11 +2252,10 @@ static void sd_probe_async(void *data, async_cookie_t cookie)
|
|||
index = sdkp->index;
|
||||
dev = &sdp->sdev_gendev;
|
||||
|
||||
if (index < SD_MAX_DISKS) {
|
||||
gd->major = sd_major((index & 0xf0) >> 4);
|
||||
gd->first_minor = ((index & 0xf) << 4) | (index & 0xfff00);
|
||||
gd->minors = SD_MINORS;
|
||||
}
|
||||
gd->major = sd_major((index & 0xf0) >> 4);
|
||||
gd->first_minor = ((index & 0xf) << 4) | (index & 0xfff00);
|
||||
gd->minors = SD_MINORS;
|
||||
|
||||
gd->fops = &sd_fops;
|
||||
gd->private_data = &sdkp->driver;
|
||||
gd->queue = sdkp->device->request_queue;
|
||||
|
|
@ -2346,6 +2345,12 @@ static int sd_probe(struct device *dev)
|
|||
if (error)
|
||||
goto out_put;
|
||||
|
||||
if (index >= SD_MAX_DISKS) {
|
||||
error = -ENODEV;
|
||||
sdev_printk(KERN_WARNING, sdp, "SCSI disk (sd) name space exhausted.\n");
|
||||
goto out_free_index;
|
||||
}
|
||||
|
||||
error = sd_format_disk_name("sd", index, gd->disk_name, DISK_NAME_LEN);
|
||||
if (error)
|
||||
goto out_free_index;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user