summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorMike Christie <michaelc@cs.wisc.edu>2008-04-20 12:51:20 -0500
committerMike Christie <michaelc@cs.wisc.edu>2008-04-20 14:36:05 -0500
commitb14f05d07ebb01ff6e871ea93e5f40b9f9c047d3 (patch)
treea467dacf49b82bfba74c35ab952e166cb9bc5da8 /kernel
parent04be6f64c3f96daccbef93c2d316d7cb63cf6ef3 (diff)
downloadopen-iscsi-b14f05d07ebb01ff6e871ea93e5f40b9f9c047d3.tar.gz
iscsi class/if kernel: add ifacename attr
This adds a attr that userspace can use to set a id for the session similar to setting a network inteface's name. It is used for binding hba and port attrs to a session. Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/iscsi_tcp.c3
-rw-r--r--kernel/libiscsi.c9
-rw-r--r--kernel/libiscsi.h1
-rw-r--r--kernel/scsi_transport_iscsi.c4
4 files changed, 14 insertions, 3 deletions
diff --git a/kernel/iscsi_tcp.c b/kernel/iscsi_tcp.c
index 0d21d87..daabd46 100644
--- a/kernel/iscsi_tcp.c
+++ b/kernel/iscsi_tcp.c
@@ -1968,7 +1968,8 @@ static struct iscsi_transport iscsi_tcp_transport = {
ISCSI_USERNAME_IN | ISCSI_PASSWORD_IN |
ISCSI_FAST_ABORT | ISCSI_ABORT_TMO |
ISCSI_LU_RESET_TMO |
- ISCSI_PING_TMO | ISCSI_RECV_TMO,
+ ISCSI_PING_TMO | ISCSI_RECV_TMO |
+ ISCSI_IFACE_NAME,
.host_param_mask = ISCSI_HOST_HWADDRESS | ISCSI_HOST_IPADDRESS |
ISCSI_HOST_INITIATOR_NAME |
ISCSI_HOST_NETDEV_NAME,
diff --git a/kernel/libiscsi.c b/kernel/libiscsi.c
index 31b6477..30ea61a 100644
--- a/kernel/libiscsi.c
+++ b/kernel/libiscsi.c
@@ -1840,6 +1840,7 @@ void iscsi_session_teardown(struct iscsi_cls_session *cls_session)
kfree(session->netdev);
kfree(session->hwaddress);
kfree(session->initiatorname);
+ kfree(session->ifacename);
iscsi_free_session(cls_session);
scsi_host_put(shost);
@@ -2298,6 +2299,10 @@ int iscsi_set_param(struct iscsi_cls_conn *cls_conn,
if (!conn->persistent_address)
return -ENOMEM;
break;
+ case ISCSI_PARAM_IFACE_NAME:
+ if (!session->ifacename)
+ session->ifacename = kstrdup(buf, GFP_KERNEL);
+ break;
default:
return -ENOSYS;
}
@@ -2365,6 +2370,9 @@ int iscsi_session_get_param(struct iscsi_cls_session *cls_session,
case ISCSI_PARAM_PASSWORD_IN:
len = sprintf(buf, "%s\n", session->password_in);
break;
+ case ISCSI_PARAM_IFACE_NAME:
+ len = sprintf(buf, "%s\n", session->ifacename);
+ break;
default:
return -ENOSYS;
}
@@ -2446,7 +2454,6 @@ int iscsi_host_get_param(struct Scsi_Host *shost, enum iscsi_host_param param,
else
len = sprintf(buf, "%s\n", session->initiatorname);
break;
-
default:
return -ENOSYS;
}
diff --git a/kernel/libiscsi.h b/kernel/libiscsi.h
index 6f10518..a409e3a 100644
--- a/kernel/libiscsi.h
+++ b/kernel/libiscsi.h
@@ -284,6 +284,7 @@ struct iscsi_session {
/* hw address or netdev iscsi connection is bound to */
char *hwaddress;
char *netdev;
+ char *ifacename;
/* control data */
struct iscsi_transport *tt;
struct Scsi_Host *host;
diff --git a/kernel/scsi_transport_iscsi.c b/kernel/scsi_transport_iscsi.c
index e8f8cf1..1b232ee 100644
--- a/kernel/scsi_transport_iscsi.c
+++ b/kernel/scsi_transport_iscsi.c
@@ -30,7 +30,7 @@
#include "scsi_transport_iscsi.h"
#include "iscsi_if.h"
-#define ISCSI_SESSION_ATTRS 19
+#define ISCSI_SESSION_ATTRS 20
#define ISCSI_CONN_ATTRS 13
#define ISCSI_HOST_ATTRS 4
#define ISCSI_TRANSPORT_VERSION "2.0-869"
@@ -1415,6 +1415,7 @@ iscsi_session_attr(password_in, ISCSI_PARAM_PASSWORD_IN, 1);
iscsi_session_attr(fast_abort, ISCSI_PARAM_FAST_ABORT, 0);
iscsi_session_attr(abort_tmo, ISCSI_PARAM_ABORT_TMO, 0);
iscsi_session_attr(lu_reset_tmo, ISCSI_PARAM_LU_RESET_TMO, 0);
+iscsi_session_attr(ifacename, ISCSI_PARAM_IFACE_NAME, 0);
static ssize_t
show_priv_session_state(struct class_device *cdev, char *buf)
@@ -1650,6 +1651,7 @@ iscsi_register_transport(struct iscsi_transport *tt)
SETUP_SESSION_RD_ATTR(fast_abort, ISCSI_FAST_ABORT);
SETUP_SESSION_RD_ATTR(abort_tmo, ISCSI_ABORT_TMO);
SETUP_SESSION_RD_ATTR(lu_reset_tmo,ISCSI_LU_RESET_TMO);
+ SETUP_SESSION_RD_ATTR(ifacename, ISCSI_IFACE_NAME);
SETUP_PRIV_SESSION_RD_ATTR(recovery_tmo);
SETUP_PRIV_SESSION_RD_ATTR(state);