[PATCH] scsi: iscsi_tcp: set BDI_CAP_STABLE_WRITES when data digest enabled

15 views
Skip to first unread message

Jianchao Wang

unread,
Mar 9, 2018, 2:23:56 PM3/9/18
to ldu...@suse.com, cle...@redhat.com, je...@linux.vnet.ibm.com, martin....@oracle.com, open-...@googlegroups.com, linux...@vger.kernel.org, linux-...@vger.kernel.org
iscsi tcp will first send out data, then calculate and send data
digest. If we don't have BDI_CAP_STABLE_WRITES, the page cache will
be written in spite of the on going writeback. Consequently, wrong
digest will be got and sent to target.

To fix this, set BDI_CAP_STABLE_WRITES when data digest is enabled
in iscsi_tcp .slave_configure callback.

Signed-off-by: Jianchao Wang <jiancha...@oracle.com>
---
drivers/scsi/iscsi_tcp.c | 7 +++++++
1 file changed, 7 insertions(+)

diff --git a/drivers/scsi/iscsi_tcp.c b/drivers/scsi/iscsi_tcp.c
index 6198559..261c686 100644
--- a/drivers/scsi/iscsi_tcp.c
+++ b/drivers/scsi/iscsi_tcp.c
@@ -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>
@@ -954,6 +955,12 @@ 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;
--
2.7.4

The Lee-Man

unread,
Mar 10, 2018, 11:26:00 AM3/10/18
to open-iscsi

Signed-off-by: Lee Duncan <ldu...@suse.com>

jianchao.wang

unread,
Mar 14, 2018, 3:00:20 AM3/14/18
to ldu...@suse.com, cle...@redhat.com, je...@linux.vnet.ibm.com, martin....@oracle.com, open-...@googlegroups.com, linux...@vger.kernel.org, linux-...@vger.kernel.org
Would anyone please take a review at this patch ?

Thanks in advace
Jianchao

Martin K. Petersen

unread,
Mar 15, 2018, 12:11:53 AM3/15/18
to ldu...@suse.com, cle...@redhat.com, Jianchao Wang, je...@linux.vnet.ibm.com, martin....@oracle.com, open-...@googlegroups.com, linux...@vger.kernel.org, linux-...@vger.kernel.org

> iscsi tcp will first send out data, then calculate and send data
> digest. If we don't have BDI_CAP_STABLE_WRITES, the page cache will
> be written in spite of the on going writeback. Consequently, wrong
> digest will be got and sent to target.
>
> To fix this, set BDI_CAP_STABLE_WRITES when data digest is enabled
> in iscsi_tcp .slave_configure callback.

Lee, Chris: Please review!

--
Martin K. Petersen Oracle Linux Engineering

Lee Duncan

unread,
Mar 15, 2018, 6:37:30 AM3/15/18
to open-...@googlegroups.com, ldu...@suse.com, cle...@redhat.com, Jianchao Wang, je...@linux.vnet.ibm.com, martin....@oracle.com, linux...@vger.kernel.org, linux-...@vger.kernel.org
I reviewed this several days before but mistakenly replied only to the open-iscsi list.

Signed-off-by: Lee Duncan <ldu...@suse.com>

--
Lee-Man Duncan
Sent from my iPhone, dude
> --
> You received this message because you are subscribed to a topic in the Google Groups "open-iscsi" group.
> To unsubscribe from this topic, visit https://groups.google.com/d/topic/open-iscsi/owLIZAXfgoA/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to open-iscsi+...@googlegroups.com.
> To post to this group, send email to open-...@googlegroups.com.
> Visit this group at https://groups.google.com/group/open-iscsi.
> For more options, visit https://groups.google.com/d/optout.

Chris Leech

unread,
Mar 15, 2018, 2:05:33 PM3/15/18
to Jianchao Wang, ldu...@suse.com, je...@linux.vnet.ibm.com, martin....@oracle.com, open-...@googlegroups.com, linux...@vger.kernel.org, linux-...@vger.kernel.org
Thanks for fixing this issue with data digests!

Signed-off-by: Chris Leech <cle...@redhat.com>

Martin K. Petersen

unread,
Mar 19, 2018, 11:26:32 PM3/19/18
to Jianchao Wang, ldu...@suse.com, cle...@redhat.com, je...@linux.vnet.ibm.com, martin....@oracle.com, open-...@googlegroups.com, linux...@vger.kernel.org, linux-...@vger.kernel.org

Jianchao,

> iscsi tcp will first send out data, then calculate and send data
> digest. If we don't have BDI_CAP_STABLE_WRITES, the page cache will
> be written in spite of the on going writeback. Consequently, wrong
> digest will be got and sent to target.
>
> To fix this, set BDI_CAP_STABLE_WRITES when data digest is enabled
> in iscsi_tcp .slave_configure callback.

Applied to 4.16/scsi-fixes. Thanks!
Reply all
Reply to author
Forward
0 new messages