Skip to content

Commit 9772f14

Browse files
committed
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
2 parents cdcc669 + c8e22b7 commit 9772f14

1 file changed

Lines changed: 8 additions & 12 deletions

File tree

drivers/scsi/ses.c

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -509,9 +509,6 @@ static int ses_enclosure_find_by_addr(struct enclosure_device *edev,
509509
int i;
510510
struct ses_component *scomp;
511511

512-
if (!edev->component[0].scratch)
513-
return 0;
514-
515512
for (i = 0; i < edev->components; i++) {
516513
scomp = edev->component[i].scratch;
517514
if (scomp->addr != efd->addr)
@@ -602,8 +599,10 @@ static void ses_enclosure_data_process(struct enclosure_device *edev,
602599
components++,
603600
type_ptr[0],
604601
name);
605-
else
602+
else if (components < edev->components)
606603
ecomp = &edev->component[components++];
604+
else
605+
ecomp = ERR_PTR(-EINVAL);
607606

608607
if (!IS_ERR(ecomp)) {
609608
if (addl_desc_ptr) {
@@ -734,11 +733,6 @@ static int ses_intf_add(struct device *cdev,
734733
components += type_ptr[1];
735734
}
736735

737-
if (components == 0) {
738-
sdev_printk(KERN_WARNING, sdev, "enclosure has no enumerated components\n");
739-
goto err_free;
740-
}
741-
742736
ses_dev->page1 = buf;
743737
ses_dev->page1_len = len;
744738
buf = NULL;
@@ -780,9 +774,11 @@ static int ses_intf_add(struct device *cdev,
780774
buf = NULL;
781775
}
782776
page2_not_supported:
783-
scomp = kcalloc(components, sizeof(struct ses_component), GFP_KERNEL);
784-
if (!scomp)
785-
goto err_free;
777+
if (components > 0) {
778+
scomp = kcalloc(components, sizeof(struct ses_component), GFP_KERNEL);
779+
if (!scomp)
780+
goto err_free;
781+
}
786782

787783
edev = enclosure_register(cdev->parent, dev_name(&sdev->sdev_gendev),
788784
components, &ses_enclosure_callbacks);

0 commit comments

Comments
 (0)