diff options
Diffstat (limited to 'drivers/scsi/ses.c')
-rw-r--r-- | drivers/scsi/ses.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/scsi/ses.c b/drivers/scsi/ses.c index 4f618f487356..e1b8c828f03a 100644 --- a/drivers/scsi/ses.c +++ b/drivers/scsi/ses.c | |||
@@ -413,10 +413,11 @@ static int ses_intf_add(struct device *cdev, | |||
413 | 413 | ||
414 | if (!scsi_device_enclosure(sdev)) { | 414 | if (!scsi_device_enclosure(sdev)) { |
415 | /* not an enclosure, but might be in one */ | 415 | /* not an enclosure, but might be in one */ |
416 | edev = enclosure_find(&sdev->host->shost_gendev); | 416 | struct enclosure_device *prev = NULL; |
417 | if (edev) { | 417 | |
418 | while ((edev = enclosure_find(&sdev->host->shost_gendev, prev)) != NULL) { | ||
418 | ses_match_to_enclosure(edev, sdev); | 419 | ses_match_to_enclosure(edev, sdev); |
419 | put_device(&edev->edev); | 420 | prev = edev; |
420 | } | 421 | } |
421 | return -ENODEV; | 422 | return -ENODEV; |
422 | } | 423 | } |
@@ -625,7 +626,8 @@ static void ses_intf_remove(struct device *cdev, | |||
625 | if (!scsi_device_enclosure(sdev)) | 626 | if (!scsi_device_enclosure(sdev)) |
626 | return; | 627 | return; |
627 | 628 | ||
628 | edev = enclosure_find(cdev->parent); | 629 | /* exact match to this enclosure */ |
630 | edev = enclosure_find(cdev->parent, NULL); | ||
629 | if (!edev) | 631 | if (!edev) |
630 | return; | 632 | return; |
631 | 633 | ||