Merge branch 'for-linus' of git://git.kernel.dk/linux-block
[pandora-kernel.git] / drivers / target / loopback / tcm_loop.c
index aed4e46..70c2e7f 100644 (file)
@@ -31,7 +31,7 @@
 #include <scsi/scsi_host.h>
 #include <scsi/scsi_device.h>
 #include <scsi/scsi_cmnd.h>
-#include <scsi/libsas.h> /* For TASK_ATTR_* */
+#include <scsi/scsi_tcq.h>
 
 #include <target/target_core_base.h>
 #include <target/target_core_transport.h>
@@ -95,17 +95,17 @@ static struct se_cmd *tcm_loop_allocate_core_cmd(
        if (sc->device->tagged_supported) {
                switch (sc->tag) {
                case HEAD_OF_QUEUE_TAG:
-                       sam_task_attr = TASK_ATTR_HOQ;
+                       sam_task_attr = MSG_HEAD_TAG;
                        break;
                case ORDERED_QUEUE_TAG:
-                       sam_task_attr = TASK_ATTR_ORDERED;
+                       sam_task_attr = MSG_ORDERED_TAG;
                        break;
                default:
-                       sam_task_attr = TASK_ATTR_SIMPLE;
+                       sam_task_attr = MSG_SIMPLE_TAG;
                        break;
                }
        } else
-               sam_task_attr = TASK_ATTR_SIMPLE;
+               sam_task_attr = MSG_SIMPLE_TAG;
 
        /*
         * Initialize struct se_cmd descriptor from target_core_mod infrastructure
@@ -379,14 +379,14 @@ static int tcm_loop_device_reset(struct scsi_cmnd *sc)
         * Initialize struct se_cmd descriptor from target_core_mod infrastructure
         */
        transport_init_se_cmd(se_cmd, se_tpg->se_tpg_tfo, se_sess, 0,
-                               DMA_NONE, TASK_ATTR_SIMPLE,
+                               DMA_NONE, MSG_SIMPLE_TAG,
                                &tl_cmd->tl_sense_buf[0]);
        /*
         * Allocate the LUN_RESET TMR
         */
        se_cmd->se_tmr_req = core_tmr_alloc_req(se_cmd, (void *)tl_tmr,
                                TMR_LUN_RESET);
-       if (!se_cmd->se_tmr_req)
+       if (IS_ERR(se_cmd->se_tmr_req))
                goto release;
        /*
         * Locate the underlying TCM struct se_lun from sc->device->lun
@@ -939,18 +939,6 @@ static u16 tcm_loop_get_fabric_sense_len(void)
        return 0;
 }
 
-static u64 tcm_loop_pack_lun(unsigned int lun)
-{
-       u64 result;
-
-       /* LSB of lun into byte 1 big-endian */
-       result = ((lun & 0xff) << 8);
-       /* use flat space addressing method */
-       result |= 0x40 | ((lun >> 8) & 0x3f);
-
-       return cpu_to_le64(result);
-}
-
 static char *tcm_loop_dump_proto_id(struct tcm_loop_hba *tl_hba)
 {
        switch (tl_hba->tl_proto_id) {
@@ -1029,6 +1017,7 @@ static int tcm_loop_make_nexus(
        struct se_portal_group *se_tpg;
        struct tcm_loop_hba *tl_hba = tl_tpg->tl_hba;
        struct tcm_loop_nexus *tl_nexus;
+       int ret = -ENOMEM;
 
        if (tl_tpg->tl_hba->tl_nexus) {
                printk(KERN_INFO "tl_tpg->tl_hba->tl_nexus already exists\n");
@@ -1045,8 +1034,10 @@ static int tcm_loop_make_nexus(
         * Initialize the struct se_session pointer
         */
        tl_nexus->se_sess = transport_init_session();
-       if (!tl_nexus->se_sess)
+       if (IS_ERR(tl_nexus->se_sess)) {
+               ret = PTR_ERR(tl_nexus->se_sess);
                goto out;
+       }
        /*
         * Since we are running in 'demo mode' this call with generate a
         * struct se_node_acl for the tcm_loop struct se_portal_group with the SCSI
@@ -1072,7 +1063,7 @@ static int tcm_loop_make_nexus(
 
 out:
        kfree(tl_nexus);
-       return -ENOMEM;
+       return ret;
 }
 
 static int tcm_loop_drop_nexus(
@@ -1152,7 +1143,7 @@ static ssize_t tcm_loop_tpg_store_nexus(
         * the fabric protocol_id set in tcm_loop_make_scsi_hba(), and call
         * tcm_loop_make_nexus()
         */
-       if (strlen(page) > TL_WWN_ADDR_LEN) {
+       if (strlen(page) >= TL_WWN_ADDR_LEN) {
                printk(KERN_ERR "Emulated NAA Sas Address: %s, exceeds"
                                " max: %d\n", page, TL_WWN_ADDR_LEN);
                return -EINVAL;
@@ -1333,7 +1324,7 @@ struct se_wwn *tcm_loop_make_scsi_hba(
        return ERR_PTR(-EINVAL);
 
 check_len:
-       if (strlen(name) > TL_WWN_ADDR_LEN) {
+       if (strlen(name) >= TL_WWN_ADDR_LEN) {
                printk(KERN_ERR "Emulated NAA %s Address: %s, exceeds"
                        " max: %d\n", name, tcm_loop_dump_proto_id(tl_hba),
                        TL_WWN_ADDR_LEN);
@@ -1481,7 +1472,6 @@ static int tcm_loop_register_configfs(void)
        fabric->tf_ops.set_fabric_sense_len = &tcm_loop_set_fabric_sense_len;
        fabric->tf_ops.get_fabric_sense_len = &tcm_loop_get_fabric_sense_len;
        fabric->tf_ops.is_state_remove = &tcm_loop_is_state_remove;
-       fabric->tf_ops.pack_lun = &tcm_loop_pack_lun;
 
        tf_cg = &fabric->tf_group;
        /*