]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - drivers/scsi/iscsi_tcp.c
libertas: make lbs_ibss_join_existing() return error code on rates overflow
[mirror_ubuntu-bionic-kernel.git] / drivers / scsi / iscsi_tcp.c
index 4d934d6c3e13adb26a91fec4dc665ed1f3f45bcb..7e3a77d3c6f018d62a2fd5b196c1373155bf0f33 100644 (file)
@@ -37,6 +37,7 @@
 #include <linux/kfifo.h>
 #include <linux/scatterlist.h>
 #include <linux/module.h>
+#include <linux/backing-dev.h>
 #include <net/tcp.h>
 #include <scsi/scsi_cmnd.h>
 #include <scsi/scsi_device.h>
@@ -371,8 +372,16 @@ static int iscsi_sw_tcp_pdu_xmit(struct iscsi_task *task)
 {
        struct iscsi_conn *conn = task->conn;
        unsigned int noreclaim_flag;
+       struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
+       struct iscsi_sw_tcp_conn *tcp_sw_conn = tcp_conn->dd_data;
        int rc = 0;
 
+       if (!tcp_sw_conn->sock) {
+               iscsi_conn_printk(KERN_ERR, conn,
+                                 "Transport not bound to socket!\n");
+               return -EINVAL;
+       }
+
        noreclaim_flag = memalloc_noreclaim_save();
 
        while (iscsi_sw_tcp_xmit_qlen(conn)) {
@@ -797,7 +806,8 @@ static int iscsi_sw_tcp_host_get_param(struct Scsi_Host *shost,
                        return rc;
 
                return iscsi_conn_get_addr_param((struct sockaddr_storage *)
-                                                &addr, param, buf);
+                                                &addr,
+                                                (enum iscsi_param)param, buf);
        default:
                return iscsi_host_get_param(shost, param, buf);
        }
@@ -952,6 +962,13 @@ static int iscsi_sw_tcp_slave_alloc(struct scsi_device *sdev)
 
 static int iscsi_sw_tcp_slave_configure(struct scsi_device *sdev)
 {
+       struct iscsi_sw_tcp_host *tcp_sw_host = iscsi_host_priv(sdev->host);
+       struct iscsi_session *session = tcp_sw_host->session;
+       struct iscsi_conn *conn = session->leadconn;
+
+       if (conn->datadgst_en)
+               sdev->request_queue->backing_dev_info->capabilities
+                       |= BDI_CAP_STABLE_WRITES;
        blk_queue_bounce_limit(sdev->request_queue, BLK_BOUNCE_ANY);
        blk_queue_dma_alignment(sdev->request_queue, 0);
        return 0;