From c8cf23a9c5963c2822d717476015092a30920343 Mon Sep 17 00:00:00 2001 From: Dave Young Date: Tue, 22 Jan 2008 14:01:34 +0800 Subject: [PATCH] --- yaml --- r: 75879 b: refs/heads/master c: 9c7701088a61cc0cf8a6e1c68d1e74e3cc2ee0b7 h: refs/heads/master i: 75877: a97e4bf350ea4f530f04ade22f6c9bc4dc1554a6 75875: eb4767ea2ca9ec81139dc50a6c01b54f807e5eb9 75871: d78c6aa08a02f183e3362443ded81d4d860bc4aa v: v3 --- [refs] | 2 +- trunk/drivers/scsi/hosts.c | 24 +++++++++++++----------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/[refs] b/[refs] index 555dc96cb0f9..b33b584e2d34 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 71da890509fec13d54329485bf5e4ac16b992bb6 +refs/heads/master: 9c7701088a61cc0cf8a6e1c68d1e74e3cc2ee0b7 diff --git a/trunk/drivers/scsi/hosts.c b/trunk/drivers/scsi/hosts.c index 24271a871b8c..6325115e5b3d 100644 --- a/trunk/drivers/scsi/hosts.c +++ b/trunk/drivers/scsi/hosts.c @@ -429,6 +429,15 @@ void scsi_unregister(struct Scsi_Host *shost) } EXPORT_SYMBOL(scsi_unregister); +static int __scsi_host_match(struct class_device *cdev, void *data) +{ + struct Scsi_Host *p; + unsigned short *hostnum = (unsigned short *)data; + + p = class_to_shost(cdev); + return p->host_no == *hostnum; +} + /** * scsi_host_lookup - get a reference to a Scsi_Host by host no * @@ -439,19 +448,12 @@ EXPORT_SYMBOL(scsi_unregister); **/ struct Scsi_Host *scsi_host_lookup(unsigned short hostnum) { - struct class *class = &shost_class; struct class_device *cdev; - struct Scsi_Host *shost = ERR_PTR(-ENXIO), *p; + struct Scsi_Host *shost = ERR_PTR(-ENXIO); - down(&class->sem); - list_for_each_entry(cdev, &class->children, node) { - p = class_to_shost(cdev); - if (p->host_no == hostnum) { - shost = scsi_host_get(p); - break; - } - } - up(&class->sem); + cdev = class_find_child(&shost_class, &hostnum, __scsi_host_match); + if (cdev) + shost = scsi_host_get(class_to_shost(cdev)); return shost; }