[SCSI] iscsi class, qla4xxx, iscsi_tcp, ib_iser: export/set initiator name
authorMike Christie <michaelc@cs.wisc.edu>
Wed, 30 May 2007 17:57:13 +0000 (12:57 -0500)
committerJames Bottomley <jejb@mulgrave.(none)>
Fri, 1 Jun 2007 16:56:40 +0000 (12:56 -0400)
For iscsi root boot, software iscsi needs to know what the BIOS/OF
initiator used for the initiator name so this puts it in sysfs
for userspace to be able to pick up.

For hw iscsi, it is nice to see what the card is using.

This patch adds the new param, and hooks in qla4xxx, iscsi_tcp, and ib_iser.

Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Cc: Roland Dreier <rdreier@cisco.com>
Cc: David C Somayajulu <david.somayajulu@qlogic.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
drivers/infiniband/ulp/iser/iscsi_iser.c
drivers/scsi/iscsi_tcp.c
drivers/scsi/libiscsi.c
drivers/scsi/qla4xxx/ql4_os.c
drivers/scsi/scsi_transport_iscsi.c
include/scsi/iscsi_if.h
include/scsi/libiscsi.h

index 2a99b7b6c9065baad329999c12f733bb9720d663..e39d9a07bc5d2cdd403cd840c202311c85db3a05 100644 (file)
@@ -576,7 +576,8 @@ static struct iscsi_transport iscsi_iser_transport = {
                                  ISCSI_PERSISTENT_ADDRESS |
                                  ISCSI_TARGET_NAME |
                                  ISCSI_TPGT,
-       .host_param_mask        = ISCSI_HOST_HWADDRESS,
+       .host_param_mask        = ISCSI_HOST_HWADDRESS |
+                                 ISCSI_HOST_INITIATOR_NAME,
        .host_template          = &iscsi_iser_sht,
        .conndata_size          = sizeof(struct iscsi_conn),
        .max_lun                = ISCSI_ISER_MAX_LUN,
index 9a42fc074b76d9bc4f4bab44be0c790e69ba9494..8201e6c4d8a961c0a755b61b02f49116a0ee8756 100644 (file)
@@ -2181,7 +2181,8 @@ static struct iscsi_transport iscsi_tcp_transport = {
                                  ISCSI_PERSISTENT_ADDRESS |
                                  ISCSI_TARGET_NAME |
                                  ISCSI_TPGT,
-       .host_param_mask        = ISCSI_HOST_HWADDRESS,
+       .host_param_mask        = ISCSI_HOST_HWADDRESS |
+                                 ISCSI_HOST_INITIATOR_NAME,
        .host_template          = &iscsi_sht,
        .conndata_size          = sizeof(struct iscsi_conn),
        .max_conn               = 1,
index d430e227e9b7d21f13df413526ba219300728024..5e6a42429c39ee9b1bde05717f46bb02cfd5b16b 100644 (file)
@@ -1463,6 +1463,7 @@ void iscsi_session_teardown(struct iscsi_cls_session *cls_session)
 
        kfree(session->targetname);
        kfree(session->hwaddress);
+       kfree(session->initiatorname);
 
        iscsi_destroy_session(cls_session);
        scsi_host_put(shost);
@@ -2004,6 +2005,13 @@ int iscsi_host_get_param(struct Scsi_Host *shost, enum iscsi_host_param param,
                else
                        len = sprintf(buf, "%s\n", session->hwaddress);
                break;
+       case ISCSI_HOST_PARAM_INITIATOR_NAME:
+               if (!session->initiatorname)
+                       len = sprintf(buf, "%s\n", "unknown");
+               else
+                       len = sprintf(buf, "%s\n", session->initiatorname);
+               break;
+
        default:
                return -ENOSYS;
        }
@@ -2022,6 +2030,10 @@ int iscsi_host_set_param(struct Scsi_Host *shost, enum iscsi_host_param param,
                if (!session->hwaddress)
                        session->hwaddress = kstrdup(buf, GFP_KERNEL);
                break;
+       case ISCSI_HOST_PARAM_INITIATOR_NAME:
+               if (!session->initiatorname)
+                       session->initiatorname = kstrdup(buf, GFP_KERNEL);
+               break;
        default:
                return -ENOSYS;
        }
index 29cd4b90ebed8b4a10c19717ba6697d09e952c3f..7502bb4808d6df4a5dc35b8827c060a7f034f2e7 100644 (file)
@@ -104,7 +104,8 @@ static struct iscsi_transport qla4xxx_iscsi_transport = {
        .name                   = DRIVER_NAME,
        .param_mask             = ISCSI_CONN_PORT | ISCSI_CONN_ADDRESS |
                                  ISCSI_TARGET_NAME | ISCSI_TPGT,
-       .host_param_mask        = ISCSI_HOST_HWADDRESS,
+       .host_param_mask        = ISCSI_HOST_HWADDRESS |
+                                 ISCSI_HOST_INITIATOR_NAME,
        .sessiondata_size       = sizeof(struct ddb_entry),
        .host_template          = &qla4xxx_driver_template,
 
@@ -190,6 +191,9 @@ static int qla4xxx_host_get_param(struct Scsi_Host *shost,
        case ISCSI_HOST_PARAM_HWADDRESS:
                len = format_addr(buf, ha->my_mac, MAC_ADDR_LEN);
                break;
+       case ISCSI_HOST_PARAM_INITIATOR_NAME:
+               len = sprintf(buf, ha->name_string);
+               break;
        default:
                return -ENOSYS;
        }
index 3fd2da451fe1728546529e95ae271fda9de3e95e..5ec2fbea8937abdf81bd7f137ac4e1b287161d42 100644 (file)
@@ -32,7 +32,7 @@
 
 #define ISCSI_SESSION_ATTRS 11
 #define ISCSI_CONN_ATTRS 11
-#define ISCSI_HOST_ATTRS 1
+#define ISCSI_HOST_ATTRS 2
 #define ISCSI_TRANSPORT_VERSION "2.0-724"
 
 struct iscsi_internal {
@@ -1253,6 +1253,7 @@ static ISCSI_CLASS_ATTR(host, field, S_IRUGO, show_host_param_##param,    \
                        NULL);
 
 iscsi_host_attr(hwaddress, ISCSI_HOST_PARAM_HWADDRESS);
+iscsi_host_attr(initiatorname, ISCSI_HOST_PARAM_INITIATOR_NAME);
 
 #define SETUP_PRIV_SESSION_RD_ATTR(field)                              \
 do {                                                                   \
@@ -1389,6 +1390,7 @@ iscsi_register_transport(struct iscsi_transport *tt)
        transport_container_register(&priv->t.host_attrs);
 
        SETUP_HOST_RD_ATTR(hwaddress, ISCSI_HOST_HWADDRESS);
+       SETUP_HOST_RD_ATTR(initiatorname, ISCSI_HOST_INITIATOR_NAME);
        BUG_ON(count > ISCSI_HOST_ATTRS);
        priv->host_attrs[count] = NULL;
        count = 0;
index 3d0372e30ca1d2c6ce6ee2956f22864985e354e2..e057c5d3703d2b27dcc7ab82912f0c427c07f1f5 100644 (file)
@@ -259,10 +259,12 @@ enum iscsi_param {
 /* iSCSI HBA params */
 enum iscsi_host_param {
        ISCSI_HOST_PARAM_HWADDRESS,
+       ISCSI_HOST_PARAM_INITIATOR_NAME,
        ISCSI_HOST_PARAM_MAX,
 };
 
 #define ISCSI_HOST_HWADDRESS           (1 << ISCSI_HOST_PARAM_HWADDRESS)
+#define ISCSI_HOST_INITIATOR_NAME      (1 << ISCSI_HOST_PARAM_INITIATOR_NAME)
 
 #define iscsi_ptr(_handle) ((void*)(unsigned long)_handle)
 #define iscsi_handle(_ptr) ((uint64_t)(unsigned long)_ptr)
index e202cc00c8e781c78e9446c8c2b06bdd4c7ce582..deae90a56a0dee661b20315c20876952a7acde85 100644 (file)
@@ -224,6 +224,7 @@ struct iscsi_session {
        int                     erl;
        int                     tpgt;
        char                    *targetname;
+       char                    *initiatorname;
        /* hw address being used for iscsi connection */
        char                    *hwaddress;
        /* control data */