Merge tag 'mips_fixes_5.1_1' of git://git.kernel.org/pub/scm/linux/kernel/git/mips...
[linux-2.6-microblaze.git] / drivers / target / iscsi / iscsi_target.c
index bd15a56..5ce6e2a 100644 (file)
@@ -308,9 +308,6 @@ bool iscsit_check_np_match(
        return false;
 }
 
-/*
- * Called with mutex np_lock held
- */
 static struct iscsi_np *iscsit_get_np(
        struct sockaddr_storage *sockaddr,
        int network_transport)
@@ -318,6 +315,8 @@ static struct iscsi_np *iscsit_get_np(
        struct iscsi_np *np;
        bool match;
 
+       lockdep_assert_held(&np_lock);
+
        list_for_each_entry(np, &g_np_list, np_list) {
                spin_lock_bh(&np->np_thread_lock);
                if (np->np_thread_state != ISCSI_NP_THREAD_ACTIVE) {
@@ -1195,7 +1194,7 @@ attach_cmd:
 }
 EXPORT_SYMBOL(iscsit_setup_scsi_cmd);
 
-void iscsit_set_unsoliticed_dataout(struct iscsi_cmd *cmd)
+void iscsit_set_unsolicited_dataout(struct iscsi_cmd *cmd)
 {
        iscsit_set_dataout_sequence_values(cmd);
 
@@ -1203,7 +1202,7 @@ void iscsit_set_unsoliticed_dataout(struct iscsi_cmd *cmd)
        iscsit_start_dataout_timer(cmd, cmd->conn);
        spin_unlock_bh(&cmd->dataout_timeout_lock);
 }
-EXPORT_SYMBOL(iscsit_set_unsoliticed_dataout);
+EXPORT_SYMBOL(iscsit_set_unsolicited_dataout);
 
 int iscsit_process_scsi_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd,
                            struct iscsi_scsi_req *hdr)
@@ -1237,7 +1236,7 @@ int iscsit_process_scsi_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd,
         */
        if (!cmd->immediate_data) {
                if (!cmd->sense_reason && cmd->unsolicited_data)
-                       iscsit_set_unsoliticed_dataout(cmd);
+                       iscsit_set_unsolicited_dataout(cmd);
                if (!cmd->sense_reason)
                        return 0;
 
@@ -1309,7 +1308,7 @@ after_immediate_data:
                        target_put_sess_cmd(&cmd->se_cmd);
                        return rc;
                } else if (cmd->unsolicited_data)
-                       iscsit_set_unsoliticed_dataout(cmd);
+                       iscsit_set_unsolicited_dataout(cmd);
 
        } else if (immed_ret == IMMEDIATE_DATA_ERL1_CRC_FAILURE) {
                /*
@@ -2241,28 +2240,25 @@ iscsit_handle_text_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd,
        rx_size = payload_length;
        if (payload_length) {
                u32 checksum = 0, data_crc = 0;
-               u32 padding = 0, pad_bytes = 0;
+               u32 padding = 0;
                int niov = 0, rx_got;
-               struct kvec iov[3];
+               struct kvec iov[2];
 
-               text_in = kzalloc(payload_length, GFP_KERNEL);
+               rx_size = ALIGN(payload_length, 4);
+               text_in = kzalloc(rx_size, GFP_KERNEL);
                if (!text_in)
                        goto reject;
 
                cmd->text_in_ptr = text_in;
 
-               memset(iov, 0, 3 * sizeof(struct kvec));
+               memset(iov, 0, sizeof(iov));
                iov[niov].iov_base      = text_in;
-               iov[niov++].iov_len     = payload_length;
+               iov[niov++].iov_len     = rx_size;
 
-               padding = ((-payload_length) & 3);
-               if (padding != 0) {
-                       iov[niov].iov_base = &pad_bytes;
-                       iov[niov++].iov_len  = padding;
-                       rx_size += padding;
+               padding = rx_size - payload_length;
+               if (padding)
                        pr_debug("Receiving %u additional bytes"
                                        " for padding.\n", padding);
-               }
                if (conn->conn_ops->DataDigest) {
                        iov[niov].iov_base      = &checksum;
                        iov[niov++].iov_len     = ISCSI_CRC_LEN;
@@ -2274,9 +2270,9 @@ iscsit_handle_text_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd,
                        goto reject;
 
                if (conn->conn_ops->DataDigest) {
-                       iscsit_do_crypto_hash_buf(conn->conn_rx_hash, text_in,
-                                                 payload_length, padding,
-                                                 &pad_bytes, &data_crc);
+                       iscsit_do_crypto_hash_buf(conn->conn_rx_hash,
+                                                 text_in, rx_size, 0, NULL,
+                                                 &data_crc);
 
                        if (checksum != data_crc) {
                                pr_err("Text data CRC32C DataDigest"
@@ -2655,9 +2651,6 @@ static int iscsit_handle_immediate_data(
        return IMMEDIATE_DATA_NORMAL_OPERATION;
 }
 
-/*
- *     Called with sess->conn_lock held.
- */
 /* #warning iscsi_build_conn_drop_async_message() only sends out on connections
        with active network interface */
 static void iscsit_build_conn_drop_async_message(struct iscsi_conn *conn)
@@ -2666,6 +2659,8 @@ static void iscsit_build_conn_drop_async_message(struct iscsi_conn *conn)
        struct iscsi_conn *conn_p;
        bool found = false;
 
+       lockdep_assert_held(&conn->sess->conn_lock);
+
        /*
         * Only send a Asynchronous Message on connections whos network
         * interface is still functional.
@@ -4040,9 +4035,9 @@ static void iscsit_release_commands_from_conn(struct iscsi_conn *conn)
                struct se_cmd *se_cmd = &cmd->se_cmd;
 
                if (se_cmd->se_tfo != NULL) {
-                       spin_lock(&se_cmd->t_state_lock);
+                       spin_lock_irq(&se_cmd->t_state_lock);
                        se_cmd->transport_state |= CMD_T_FABRIC_STOP;
-                       spin_unlock(&se_cmd->t_state_lock);
+                       spin_unlock_irq(&se_cmd->t_state_lock);
                }
        }
        spin_unlock_bh(&conn->cmd_lock);