[SCSI] zfcp: Simplify get_adapter_by_busid
Swen Schillig [Wed, 1 Oct 2008 10:42:19 +0000 (12:42 +0200)]
Call the helper function from cio instead looping through all zfcp
adapters.

Signed-off-by: Swen Schillig <swen@vnet.ibm.com>
Signed-off-by: Christof Schmitt <christof.schmitt@de.ibm.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>

drivers/s390/scsi/zfcp_aux.c
drivers/s390/scsi/zfcp_ccw.c
drivers/s390/scsi/zfcp_ext.h

index 811ce8a..6397de0 100644 (file)
@@ -106,19 +106,6 @@ static int __init zfcp_device_setup(char *devstr)
        return 0;
 }
 
-static struct zfcp_adapter *zfcp_get_adapter_by_busid(char *bus_id)
-{
-       struct zfcp_adapter *adapter;
-
-       list_for_each_entry(adapter, &zfcp_data.adapter_list_head, list)
-               if ((strncmp(bus_id, adapter->ccw_device->dev.bus_id,
-                            BUS_ID_SIZE) == 0) &&
-                   !(atomic_read(&adapter->status) &
-                     ZFCP_STATUS_COMMON_REMOVE))
-                   return adapter;
-       return NULL;
-}
-
 static void __init zfcp_init_device_configure(void)
 {
        struct zfcp_adapter *adapter;
index 0e1a42f..3a9bd54 100644 (file)
@@ -224,3 +224,20 @@ int __init zfcp_ccw_register(void)
 {
        return ccw_driver_register(&zfcp_ccw_driver);
 }
+
+/**
+ * zfcp_get_adapter_by_busid - find zfcp_adapter struct
+ * @busid: bus id string of zfcp adapter to find
+ */
+struct zfcp_adapter *zfcp_get_adapter_by_busid(char *busid)
+{
+       struct ccw_device *ccw_device;
+       struct zfcp_adapter *adapter = NULL;
+
+       ccw_device = get_ccwdev_by_busid(&zfcp_ccw_driver, busid);
+       if (ccw_device) {
+               adapter = dev_get_drvdata(&ccw_device->dev);
+               put_device(&ccw_device->dev);
+       }
+       return adapter;
+}
index ca1db97..b8c5c37 100644 (file)
@@ -27,6 +27,7 @@ extern int zfcp_sg_setup_table(struct scatterlist *, int);
 
 /* zfcp_ccw.c */
 extern int zfcp_ccw_register(void);
+extern struct zfcp_adapter *zfcp_get_adapter_by_busid(char *);
 
 /* zfcp_cfdc.c */
 extern struct miscdevice zfcp_cfdc_misc;