mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-27 22:24:11 +08:00
35e9a9f939
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 Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: James Bottomley <JBottomley@Odin.com>
42 lines
2.3 KiB
C
42 lines
2.3 KiB
C
#ifndef _SCSI_SCSI_DEVINFO_H
|
|
#define _SCSI_SCSI_DEVINFO_H
|
|
/*
|
|
* Flags for SCSI devices that need special treatment
|
|
*/
|
|
#define BLIST_NOLUN 0x001 /* Only scan LUN 0 */
|
|
#define BLIST_FORCELUN 0x002 /* Known to have LUNs, force scanning,
|
|
deprecated: Use max_luns=N */
|
|
#define BLIST_BORKEN 0x004 /* Flag for broken handshaking */
|
|
#define BLIST_KEY 0x008 /* unlock by special command */
|
|
#define BLIST_SINGLELUN 0x010 /* Do not use LUNs in parallel */
|
|
#define BLIST_NOTQ 0x020 /* Buggy Tagged Command Queuing */
|
|
#define BLIST_SPARSELUN 0x040 /* Non consecutive LUN numbering */
|
|
#define BLIST_MAX5LUN 0x080 /* Avoid LUNS >= 5 */
|
|
#define BLIST_ISROM 0x100 /* Treat as (removable) CD-ROM */
|
|
#define BLIST_LARGELUN 0x200 /* LUNs past 7 on a SCSI-2 device */
|
|
#define BLIST_INQUIRY_36 0x400 /* override additional length field */
|
|
#define BLIST_INQUIRY_58 0x800 /* ... for broken inquiry responses */
|
|
#define BLIST_NOSTARTONADD 0x1000 /* do not do automatic start on add */
|
|
#define BLIST_MS_SKIP_PAGE_08 0x2000 /* do not send ms page 0x08 */
|
|
#define BLIST_MS_SKIP_PAGE_3F 0x4000 /* do not send ms page 0x3f */
|
|
#define BLIST_USE_10_BYTE_MS 0x8000 /* use 10 byte ms before 6 byte ms */
|
|
#define BLIST_MS_192_BYTES_FOR_3F 0x10000 /* 192 byte ms page 0x3f request */
|
|
#define BLIST_REPORTLUN2 0x20000 /* try REPORT_LUNS even for SCSI-2 devs
|
|
(if HBA supports more than 8 LUNs) */
|
|
#define BLIST_NOREPORTLUN 0x40000 /* don't try REPORT_LUNS scan (SCSI-3 devs) */
|
|
#define BLIST_NOT_LOCKABLE 0x80000 /* don't use PREVENT-ALLOW commands */
|
|
#define BLIST_NO_ULD_ATTACH 0x100000 /* device is actually for RAID config */
|
|
#define BLIST_SELECT_NO_ATN 0x200000 /* select without ATN */
|
|
#define BLIST_RETRY_HWERROR 0x400000 /* retry HARDWARE_ERROR */
|
|
#define BLIST_MAX_512 0x800000 /* maximum 512 sector cdb length */
|
|
#define BLIST_ATTACH_PQ3 0x1000000 /* Scan: Attach to PQ3 devices */
|
|
#define BLIST_NO_DIF 0x2000000 /* Disable T10 PI (DIF) */
|
|
#define BLIST_SKIP_VPD_PAGES 0x4000000 /* Ignore SBC-3 VPD pages */
|
|
#define BLIST_SCSI3LUN 0x8000000 /* Scan more than 256 LUNs
|
|
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
|