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