diff options
author | dmitry_yus <dmitry_yus@d7303112-9cec-0310-bdd2-e83a94d6c2b6> | 2005-05-25 04:24:10 +0000 |
---|---|---|
committer | dmitry_yus <dmitry_yus@d7303112-9cec-0310-bdd2-e83a94d6c2b6> | 2005-05-25 04:24:10 +0000 |
commit | 6b895adf3d35004eac9ef130587114a5e9336cb0 (patch) | |
tree | a3d100b8dcec7b4f6273fa1669da257faecdff57 | |
parent | 0abb777ceacdd3dea5fee4200c7cd5ba29275690 (diff) | |
download | open-iscsi-6b895adf3d35004eac9ef130587114a5e9336cb0.tar.gz |
trans_list() event brings per-transport caps_mask. daemon respects those bits.
git-svn-id: svn://svn.berlios.de/open-iscsi@342 d7303112-9cec-0310-bdd2-e83a94d6c2b6
-rw-r--r-- | include/iscsi_if.h | 2 | ||||
-rw-r--r-- | kernel/iscsi_tcp.c | 6 | ||||
-rw-r--r-- | kernel/scsi_transport_iscsi.c | 7 | ||||
-rwxr-xr-x | test/regression.sh | 2 | ||||
-rw-r--r-- | usr/initiator.c | 3 | ||||
-rw-r--r-- | usr/initiator.h | 1 | ||||
-rw-r--r-- | usr/iscsid.c | 2 |
7 files changed, 17 insertions, 6 deletions
diff --git a/include/iscsi_if.h b/include/iscsi_if.h index 65b86a6..b85bac4 100644 --- a/include/iscsi_if.h +++ b/include/iscsi_if.h @@ -121,6 +121,8 @@ struct iscsi_uevent { struct msg_trans_list { struct { uint64_t trans_handle; + uint32_t caps_mask; + uint32_t unused; char name[ISCSI_TRANSPORT_NAME_MAXLEN]; } elements[ISCSI_TRANSPORT_MAX]; } t_list; diff --git a/kernel/iscsi_tcp.c b/kernel/iscsi_tcp.c index 614049f..d8afd8a 100644 --- a/kernel/iscsi_tcp.c +++ b/kernel/iscsi_tcp.c @@ -2975,9 +2975,7 @@ iscsi_conn_set_param(iscsi_connh_t connh, enum iscsi_param param, } break; case ISCSI_PARAM_DATADGST_EN: - /* FIXME: DataDigest is not implemented yet */ - if (value) /* != ISCSI_DIGEST_NONE) */ - return -EPERM; + BUG_ON(value); /* not implemented yet */ conn->datadgst_en = value; break; case ISCSI_PARAM_INITIAL_R2T_EN: @@ -3012,9 +3010,11 @@ iscsi_conn_set_param(iscsi_connh_t connh, enum iscsi_param param, session->erl = value; break; case ISCSI_PARAM_IFMARKER_EN: + BUG_ON(value); session->ifmarker_en = value; break; case ISCSI_PARAM_OFMARKER_EN: + BUG_ON(value); session->ifmarker_en = value; break; default: diff --git a/kernel/scsi_transport_iscsi.c b/kernel/scsi_transport_iscsi.c index d24cd42..7cb6410 100644 --- a/kernel/scsi_transport_iscsi.c +++ b/kernel/scsi_transport_iscsi.c @@ -756,6 +756,7 @@ iscsi_if_recv_msg(struct sk_buff *skb, struct nlmsghdr *nlh) switch (nlh->nlmsg_type) { case ISCSI_UEVENT_TRANS_LIST: { unsigned long flags; + int i = 0; /* * this will always succeed for now since there @@ -765,11 +766,13 @@ iscsi_if_recv_msg(struct sk_buff *skb, struct nlmsghdr *nlh) */ spin_lock_irqsave(&iscsi_transport_lock, flags); list_for_each_entry(priv, &iscsi_transports, list) { - ev->r.t_list.elements[0].trans_handle = + ev->r.t_list.elements[i].trans_handle = iscsi_handle(priv->iscsi_transport); - strncpy(ev->r.t_list.elements[0].name, + strncpy(ev->r.t_list.elements[i].name, priv->iscsi_transport->name, ISCSI_TRANSPORT_NAME_MAXLEN); + ev->r.t_list.elements[i].caps_mask = priv->param_mask; + i++; } spin_unlock_irqrestore(&iscsi_transport_lock, flags); diff --git a/test/regression.sh b/test/regression.sh index 58730fa..8033ba4 100755 --- a/test/regression.sh +++ b/test/regression.sh @@ -77,7 +77,7 @@ function disktest_run() { } function fdisk_run() { - echo "fdisk $device: " + echo -n "fdisk $device: " if ! echo " p d diff --git a/usr/initiator.c b/usr/initiator.c index 1a82fc9..d9554ff 100644 --- a/usr/initiator.c +++ b/usr/initiator.c @@ -754,6 +754,9 @@ __session_conn_recv_pdu(queue_item_t *item) for (i = 0; i < ISCSI_PARAM_MAX; i++) { if (conn->id != 0 && !conntbl[i].conn_only) continue; + if (!(provider[0].caps_mask & + (1 << conntbl[i].param))) + continue; if (ipc->set_param( session->transport_handle, conn->handle, conntbl[i].param, diff --git a/usr/initiator.h b/usr/initiator.h index 2799b16..78e7ca8 100644 --- a/usr/initiator.h +++ b/usr/initiator.h @@ -271,6 +271,7 @@ typedef enum iscsi_provider_status_e { /* represents data path provider */ typedef struct iscsi_provider_t { uint64_t handle; + uint32_t caps_mask; iscsi_provider_status_e status; char name[ISCSI_TRANSPORT_NAME_MAXLEN]; struct qelem sessions; diff --git a/usr/iscsid.c b/usr/iscsid.c index 21be1fa..0dc2b5c 100644 --- a/usr/iscsid.c +++ b/usr/iscsid.c @@ -133,6 +133,8 @@ int trans_sync(void) ev.r.t_list.elements[i].trans_handle; strncpy(provider[i].name, ev.r.t_list.elements[i].name, ISCSI_TRANSPORT_NAME_MAXLEN); + provider[i].caps_mask = + ev.r.t_list.elements[i].caps_mask; /* FIXME: implement session/connection sync up logic */ provider[i].sessions.q_forw = &provider[i].sessions; |