Commit 9772f14f authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi

Pull SCSI fix from James Bottomley:
 "One small fix to SCSI Enclosure Services to fix a regression caused by
  another recent fix"

* tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
  scsi: ses: Handle enclosure with just a primary component gracefully
parents cdcc6696 c8e22b7a
...@@ -509,9 +509,6 @@ static int ses_enclosure_find_by_addr(struct enclosure_device *edev, ...@@ -509,9 +509,6 @@ static int ses_enclosure_find_by_addr(struct enclosure_device *edev,
int i; int i;
struct ses_component *scomp; struct ses_component *scomp;
if (!edev->component[0].scratch)
return 0;
for (i = 0; i < edev->components; i++) { for (i = 0; i < edev->components; i++) {
scomp = edev->component[i].scratch; scomp = edev->component[i].scratch;
if (scomp->addr != efd->addr) if (scomp->addr != efd->addr)
...@@ -602,8 +599,10 @@ static void ses_enclosure_data_process(struct enclosure_device *edev, ...@@ -602,8 +599,10 @@ static void ses_enclosure_data_process(struct enclosure_device *edev,
components++, components++,
type_ptr[0], type_ptr[0],
name); name);
else else if (components < edev->components)
ecomp = &edev->component[components++]; ecomp = &edev->component[components++];
else
ecomp = ERR_PTR(-EINVAL);
if (!IS_ERR(ecomp)) { if (!IS_ERR(ecomp)) {
if (addl_desc_ptr) { if (addl_desc_ptr) {
...@@ -734,11 +733,6 @@ static int ses_intf_add(struct device *cdev, ...@@ -734,11 +733,6 @@ static int ses_intf_add(struct device *cdev,
components += type_ptr[1]; components += type_ptr[1];
} }
if (components == 0) {
sdev_printk(KERN_WARNING, sdev, "enclosure has no enumerated components\n");
goto err_free;
}
ses_dev->page1 = buf; ses_dev->page1 = buf;
ses_dev->page1_len = len; ses_dev->page1_len = len;
buf = NULL; buf = NULL;
...@@ -780,9 +774,11 @@ static int ses_intf_add(struct device *cdev, ...@@ -780,9 +774,11 @@ static int ses_intf_add(struct device *cdev,
buf = NULL; buf = NULL;
} }
page2_not_supported: page2_not_supported:
if (components > 0) {
scomp = kcalloc(components, sizeof(struct ses_component), GFP_KERNEL); scomp = kcalloc(components, sizeof(struct ses_component), GFP_KERNEL);
if (!scomp) if (!scomp)
goto err_free; goto err_free;
}
edev = enclosure_register(cdev->parent, dev_name(&sdev->sdev_gendev), edev = enclosure_register(cdev->parent, dev_name(&sdev->sdev_gendev),
components, &ses_enclosure_callbacks); components, &ses_enclosure_callbacks);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment