[SCSI] hpsa: fix physical device lun and target numbering problem
If a physical device exposed to the OS by hpsa is replaced (e.g. one hot plug tape drive is replaced by another, or a tape drive is placed into "OBDR" mode in which it acts like a CD-ROM device) and a rescan is initiated, the replaced device will be added to the SCSI midlayer with target and lun numbers set to -1. After that, a panic is likely to ensue. When a physical device is replaced, the lun and target number should be preserved. Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com> Cc: stable@kernel.org Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:
parent
0b0e1d6cbc
commit
01350d0553
|
@ -676,6 +676,16 @@ static void hpsa_scsi_replace_entry(struct ctlr_info *h, int hostno,
|
|||
BUG_ON(entry < 0 || entry >= HPSA_MAX_SCSI_DEVS_PER_HBA);
|
||||
removed[*nremoved] = h->dev[entry];
|
||||
(*nremoved)++;
|
||||
|
||||
/*
|
||||
* New physical devices won't have target/lun assigned yet
|
||||
* so we need to preserve the values in the slot we are replacing.
|
||||
*/
|
||||
if (new_entry->target == -1) {
|
||||
new_entry->target = h->dev[entry]->target;
|
||||
new_entry->lun = h->dev[entry]->lun;
|
||||
}
|
||||
|
||||
h->dev[entry] = new_entry;
|
||||
added[*nadded] = new_entry;
|
||||
(*nadded)++;
|
||||
|
|
Loading…
Reference in New Issue