Merge ../scsi-misc-2.6
[linux-3.10.git] / drivers / infiniband / ulp / iser / iscsi_iser.c
index b2c033edb03cea828eedddfdacb852f54151da04..34b0da5cfa0a73a6a40cef09f69b6bff6679ad59 100644 (file)
@@ -437,159 +437,50 @@ iscsi_iser_session_create(struct iscsi_transport *iscsit,
 }
 
 static int
-iscsi_iser_conn_set_param(struct iscsi_cls_conn *cls_conn,
-                         enum iscsi_param param, uint32_t value)
+iscsi_iser_set_param(struct iscsi_cls_conn *cls_conn,
+                    enum iscsi_param param, char *buf, int buflen)
 {
-       struct iscsi_conn *conn = cls_conn->dd_data;
-       struct iscsi_session *session = conn->session;
-
-       spin_lock_bh(&session->lock);
-       if (conn->c_stage != ISCSI_CONN_INITIAL_STAGE &&
-           conn->stop_stage != STOP_CONN_RECOVER) {
-               printk(KERN_ERR "iscsi_iser: can not change parameter [%d]\n",
-                      param);
-               spin_unlock_bh(&session->lock);
-               return 0;
-       }
-       spin_unlock_bh(&session->lock);
+       int value;
 
        switch (param) {
        case ISCSI_PARAM_MAX_RECV_DLENGTH:
                /* TBD */
                break;
-       case ISCSI_PARAM_MAX_XMIT_DLENGTH:
-               conn->max_xmit_dlength =  value;
-               break;
        case ISCSI_PARAM_HDRDGST_EN:
+               sscanf(buf, "%d", &value);
                if (value) {
                        printk(KERN_ERR "DataDigest wasn't negotiated to None");
                        return -EPROTO;
                }
                break;
        case ISCSI_PARAM_DATADGST_EN:
+               sscanf(buf, "%d", &value);
                if (value) {
                        printk(KERN_ERR "DataDigest wasn't negotiated to None");
                        return -EPROTO;
                }
                break;
-       case ISCSI_PARAM_INITIAL_R2T_EN:
-               session->initial_r2t_en = value;
-               break;
-       case ISCSI_PARAM_IMM_DATA_EN:
-               session->imm_data_en = value;
-               break;
-       case ISCSI_PARAM_FIRST_BURST:
-               session->first_burst = value;
-               break;
-       case ISCSI_PARAM_MAX_BURST:
-               session->max_burst = value;
-               break;
-       case ISCSI_PARAM_PDU_INORDER_EN:
-               session->pdu_inorder_en = value;
-               break;
-       case ISCSI_PARAM_DATASEQ_INORDER_EN:
-               session->dataseq_inorder_en = value;
-               break;
-       case ISCSI_PARAM_ERL:
-               session->erl = value;
-               break;
        case ISCSI_PARAM_IFMARKER_EN:
+               sscanf(buf, "%d", &value);
                if (value) {
                        printk(KERN_ERR "IFMarker wasn't negotiated to No");
                        return -EPROTO;
                }
                break;
        case ISCSI_PARAM_OFMARKER_EN:
+               sscanf(buf, "%d", &value);
                if (value) {
                        printk(KERN_ERR "OFMarker wasn't negotiated to No");
                        return -EPROTO;
                }
                break;
        default:
-               break;
-       }
-
-       return 0;
-}
-
-static int
-iscsi_iser_session_get_param(struct iscsi_cls_session *cls_session,
-                            enum iscsi_param param, uint32_t *value)
-{
-       struct Scsi_Host *shost = iscsi_session_to_shost(cls_session);
-       struct iscsi_session *session = iscsi_hostdata(shost->hostdata);
-
-       switch (param) {
-       case ISCSI_PARAM_INITIAL_R2T_EN:
-               *value = session->initial_r2t_en;
-               break;
-       case ISCSI_PARAM_MAX_R2T:
-               *value = session->max_r2t;
-               break;
-       case ISCSI_PARAM_IMM_DATA_EN:
-               *value = session->imm_data_en;
-               break;
-       case ISCSI_PARAM_FIRST_BURST:
-               *value = session->first_burst;
-               break;
-       case ISCSI_PARAM_MAX_BURST:
-               *value = session->max_burst;
-               break;
-       case ISCSI_PARAM_PDU_INORDER_EN:
-               *value = session->pdu_inorder_en;
-               break;
-       case ISCSI_PARAM_DATASEQ_INORDER_EN:
-               *value = session->dataseq_inorder_en;
-               break;
-       case ISCSI_PARAM_ERL:
-               *value = session->erl;
-               break;
-       case ISCSI_PARAM_IFMARKER_EN:
-               *value = 0;
-               break;
-       case ISCSI_PARAM_OFMARKER_EN:
-               *value = 0;
-               break;
-       default:
-               return ISCSI_ERR_PARAM_NOT_FOUND;
-       }
-
-       return 0;
-}
-
-static int
-iscsi_iser_conn_get_param(struct iscsi_cls_conn *cls_conn,
-                         enum iscsi_param param, uint32_t *value)
-{
-       struct iscsi_conn *conn = cls_conn->dd_data;
-
-       switch(param) {
-       case ISCSI_PARAM_MAX_RECV_DLENGTH:
-               *value = conn->max_recv_dlength;
-               break;
-       case ISCSI_PARAM_MAX_XMIT_DLENGTH:
-               *value = conn->max_xmit_dlength;
-               break;
-       case ISCSI_PARAM_HDRDGST_EN:
-               *value = 0;
-               break;
-       case ISCSI_PARAM_DATADGST_EN:
-               *value = 0;
-               break;
-       /*case ISCSI_PARAM_TARGET_RECV_DLENGTH:
-               *value = conn->target_recv_dlength;
-               break;
-       case ISCSI_PARAM_INITIATOR_RECV_DLENGTH:
-               *value = conn->initiator_recv_dlength;
-               break;*/
-       default:
-               return ISCSI_ERR_PARAM_NOT_FOUND;
+               return iscsi_set_param(cls_conn, param, buf, buflen);
        }
 
        return 0;
 }
 
-
 static void
 iscsi_iser_conn_get_stats(struct iscsi_cls_conn *cls_conn, struct iscsi_stats *stats)
 {
@@ -701,7 +592,12 @@ static struct iscsi_transport iscsi_iser_transport = {
                                  ISCSI_FIRST_BURST |
                                  ISCSI_MAX_BURST |
                                  ISCSI_PDU_INORDER_EN |
-                                 ISCSI_DATASEQ_INORDER_EN,
+                                 ISCSI_DATASEQ_INORDER_EN |
+                                 ISCSI_EXP_STATSN |
+                                 ISCSI_PERSISTENT_PORT |
+                                 ISCSI_PERSISTENT_ADDRESS |
+                                 ISCSI_TARGET_NAME |
+                                 ISCSI_TPGT,
        .host_template          = &iscsi_iser_sht,
        .conndata_size          = sizeof(struct iscsi_conn),
        .max_lun                = ISCSI_ISER_MAX_LUN,
@@ -713,9 +609,9 @@ static struct iscsi_transport iscsi_iser_transport = {
        .create_conn            = iscsi_iser_conn_create,
        .bind_conn              = iscsi_iser_conn_bind,
        .destroy_conn           = iscsi_iser_conn_destroy,
-       .set_param              = iscsi_iser_conn_set_param,
-       .get_conn_param         = iscsi_iser_conn_get_param,
-       .get_session_param      = iscsi_iser_session_get_param,
+       .set_param              = iscsi_iser_set_param,
+       .get_conn_param         = iscsi_conn_get_param,
+       .get_session_param      = iscsi_session_get_param,
        .start_conn             = iscsi_iser_conn_start,
        .stop_conn              = iscsi_conn_stop,
        /* these are called as part of conn recovery */