Fix iscsi with QNAP devices (rhbz 1208999)
This commit is contained in:
parent
3a153ad929
commit
015762cdf4
95
SCSI-add-1024-max-sectors-black-list-flag.patch
Normal file
95
SCSI-add-1024-max-sectors-black-list-flag.patch
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
From: Mike Christie <michaelc@cs.wisc.edu>
|
||||||
|
Date: Tue, 21 Apr 2015 03:42:24 -0400
|
||||||
|
Subject: [PATCH] SCSI: add 1024 max sectors black list flag
|
||||||
|
|
||||||
|
This works around a issue with qnap iscsi targets not handling large IOs
|
||||||
|
very well.
|
||||||
|
|
||||||
|
The target returns:
|
||||||
|
|
||||||
|
VPD INQUIRY: Block limits page (SBC)
|
||||||
|
Maximum compare and write length: 1 blocks
|
||||||
|
Optimal transfer length granularity: 1 blocks
|
||||||
|
Maximum transfer length: 4294967295 blocks
|
||||||
|
Optimal transfer length: 4294967295 blocks
|
||||||
|
Maximum prefetch, xdread, xdwrite transfer length: 0 blocks
|
||||||
|
Maximum unmap LBA count: 8388607
|
||||||
|
Maximum unmap block descriptor count: 1
|
||||||
|
Optimal unmap granularity: 16383
|
||||||
|
Unmap granularity alignment valid: 0
|
||||||
|
Unmap granularity alignment: 0
|
||||||
|
Maximum write same length: 0xffffffff blocks
|
||||||
|
Maximum atomic transfer length: 0
|
||||||
|
Atomic alignment: 0
|
||||||
|
Atomic transfer length granularity: 0
|
||||||
|
|
||||||
|
and it is *sometimes* able to handle at least one IO of size up to 8 MB. We
|
||||||
|
have seen in traces where it will sometimes work, but other times it
|
||||||
|
looks like it fails and it looks like it returns failures if we send
|
||||||
|
multiple large IOs sometimes. Also it looks like it can return 2 different
|
||||||
|
errors. It will sometimes send iscsi reject errors indicating out of
|
||||||
|
resources or it will send invalid cdb illegal requests check conditions.
|
||||||
|
And then when it sends iscsi rejects it does not seem to handle retries
|
||||||
|
when there are command sequence holes, so I could not just add code to
|
||||||
|
try and gracefully handle that error code.
|
||||||
|
|
||||||
|
The problem is that we do not have a good contact for the company,
|
||||||
|
so we are not able to determine under what conditions it returns
|
||||||
|
which error and why it sometimes works.
|
||||||
|
|
||||||
|
So, this patch just adds a new black list flag to set targets like this to
|
||||||
|
the old max safe sectors of 1024. The max_hw_sectors changes added in 3.19
|
||||||
|
caused this regression, so I also ccing stable.
|
||||||
|
|
||||||
|
Reported-by: Christian Hesse <list@eworm.de>
|
||||||
|
Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
|
||||||
|
Cc: stable@vger.kernel.org
|
||||||
|
---
|
||||||
|
drivers/scsi/scsi_devinfo.c | 1 +
|
||||||
|
drivers/scsi/scsi_scan.c | 6 ++++++
|
||||||
|
include/scsi/scsi_devinfo.h | 1 +
|
||||||
|
3 files changed, 8 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/drivers/scsi/scsi_devinfo.c b/drivers/scsi/scsi_devinfo.c
|
||||||
|
index 262ab837a704..9f77d23239a2 100644
|
||||||
|
--- a/drivers/scsi/scsi_devinfo.c
|
||||||
|
+++ b/drivers/scsi/scsi_devinfo.c
|
||||||
|
@@ -226,6 +226,7 @@ static struct {
|
||||||
|
{"PIONEER", "CD-ROM DRM-624X", NULL, BLIST_FORCELUN | BLIST_SINGLELUN},
|
||||||
|
{"Promise", "VTrak E610f", NULL, BLIST_SPARSELUN | BLIST_NO_RSOC},
|
||||||
|
{"Promise", "", NULL, BLIST_SPARSELUN},
|
||||||
|
+ {"QNAP", "iSCSI Storage", NULL, BLIST_MAX_1024},
|
||||||
|
{"QUANTUM", "XP34301", "1071", BLIST_NOTQ},
|
||||||
|
{"REGAL", "CDC-4X", NULL, BLIST_MAX5LUN | BLIST_SINGLELUN},
|
||||||
|
{"SanDisk", "ImageMate CF-SD1", NULL, BLIST_FORCELUN},
|
||||||
|
diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c
|
||||||
|
index 60aae01caa89..6efab1c455e1 100644
|
||||||
|
--- a/drivers/scsi/scsi_scan.c
|
||||||
|
+++ b/drivers/scsi/scsi_scan.c
|
||||||
|
@@ -897,6 +897,12 @@ static int scsi_add_lun(struct scsi_device *sdev, unsigned char *inq_result,
|
||||||
|
*/
|
||||||
|
if (*bflags & BLIST_MAX_512)
|
||||||
|
blk_queue_max_hw_sectors(sdev->request_queue, 512);
|
||||||
|
+ /*
|
||||||
|
+ * Max 1024 sector transfer length for targets that report incorrect
|
||||||
|
+ * max/optimal lengths and relied on the old block layer safe default
|
||||||
|
+ */
|
||||||
|
+ else if (*bflags & BLIST_MAX_1024)
|
||||||
|
+ blk_queue_max_hw_sectors(sdev->request_queue, 1024);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Some devices may not want to have a start command automatically
|
||||||
|
diff --git a/include/scsi/scsi_devinfo.h b/include/scsi/scsi_devinfo.h
|
||||||
|
index 183eaab7c380..96e3f56519e7 100644
|
||||||
|
--- a/include/scsi/scsi_devinfo.h
|
||||||
|
+++ b/include/scsi/scsi_devinfo.h
|
||||||
|
@@ -36,5 +36,6 @@
|
||||||
|
for sequential scan */
|
||||||
|
#define BLIST_TRY_VPD_PAGES 0x10000000 /* Attempt to read VPD pages */
|
||||||
|
#define BLIST_NO_RSOC 0x20000000 /* don't try to issue RSOC */
|
||||||
|
+#define BLIST_MAX_1024 0x40000000 /* maximum 1024 sector cdb length */
|
||||||
|
|
||||||
|
#endif
|
||||||
|
--
|
||||||
|
2.1.0
|
||||||
|
|
@ -611,6 +611,9 @@ Patch26175: xen-pciback-Don-t-disable-PCI_COMMAND-on-PCI-device-.patch
|
|||||||
#rhbz 1212230
|
#rhbz 1212230
|
||||||
Patch26176: Input-synaptics-pin-3-touches-when-the-firmware-repo.patch
|
Patch26176: Input-synaptics-pin-3-touches-when-the-firmware-repo.patch
|
||||||
|
|
||||||
|
#rhbz 1208999
|
||||||
|
Patch26177: SCSI-add-1024-max-sectors-black-list-flag.patch
|
||||||
|
|
||||||
# END OF PATCH DEFINITIONS
|
# END OF PATCH DEFINITIONS
|
||||||
|
|
||||||
%endif
|
%endif
|
||||||
@ -1337,6 +1340,9 @@ ApplyPatch xen-pciback-Don-t-disable-PCI_COMMAND-on-PCI-device-.patch
|
|||||||
#rhbz 1212230
|
#rhbz 1212230
|
||||||
ApplyPatch Input-synaptics-pin-3-touches-when-the-firmware-repo.patch
|
ApplyPatch Input-synaptics-pin-3-touches-when-the-firmware-repo.patch
|
||||||
|
|
||||||
|
#rhbz 1208999
|
||||||
|
ApplyPatch SCSI-add-1024-max-sectors-black-list-flag.patch
|
||||||
|
|
||||||
# END OF PATCH APPLICATIONS
|
# END OF PATCH APPLICATIONS
|
||||||
|
|
||||||
%endif
|
%endif
|
||||||
@ -2187,6 +2193,9 @@ fi
|
|||||||
#
|
#
|
||||||
#
|
#
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Apr 24 2015 Josh Boyer <jwboyer@fedoraproject.org>
|
||||||
|
- Fix iscsi with QNAP devices (rhbz 1208999)
|
||||||
|
|
||||||
* Thu Apr 23 2015 Josh Boyer <jwboyer@fedoraproject.org> - 4.1.0-0.rc0.git13.1
|
* Thu Apr 23 2015 Josh Boyer <jwboyer@fedoraproject.org> - 4.1.0-0.rc0.git13.1
|
||||||
- Linux v4.0-10710-g27cf3a16b253
|
- Linux v4.0-10710-g27cf3a16b253
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user