FAILED: patch "[PATCH] sd: Fix rw_max for devices that report an optimal xfer size" failed to apply to 4.4-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
6b7e9cde49691e04314342b7dce90c67ad567fccMon Sep 17 00:00:00 2001
From: "Martin K. Petersen" <[email protected]>
Date: Thu, 12 May 2016 22:17:34 -0400
Subject: [PATCH] sd: Fix rw_max for devices that report an optimal xfer size
For historic reasons, io_opt is in bytes and max_sectors in block layer sectors. This interface inconsistency is error prone and should be fixed. But for 4.4--4.7 let's make the unit difference explicit via a wrapper function.
drivers/scsi/sd.c +4 -4
@@ -2867,10 +2867,10 @@ static int sd_revalidate_disk(struct gendisk *disk)if (sdkp->opt_xfer_blocks && sdkp->opt_xfer_blocks <= dev_max && sdkp->opt_xfer_blocks <=SD_DEF_XFER_BLOCKS && - sdkp->opt_xfer_blocks * sdp->sector_size >=PAGE_SIZE ) - rw_max = q->limits.io_opt = - sdkp->opt_xfer_blocks * sdp->sector_size; -else +logical_to_bytes (sdp, sdkp->opt_xfer_blocks) >=PAGE_SIZE ) { + q->limits.io_opt =logical_to_bytes (sdp, sdkp->opt_xfer_blocks); + rw_max =logical_to_sectors (sdp, sdkp->opt_xfer_blocks); + }else rw_max =BLK_DEF_MAX_SECTORS ;/* Combine with controller limits */
drivers/scsi/sd.h +5 -0
@@ -151,6 +151,11 @@ static inline sector_t logical_to_sectors(struct scsi_device *sdev, sector_t bloreturn blocks << (ilog2 (sdev->sector_size) -9 ); } +static inline unsigned int logical_to_bytes (struct scsi_device *sdev,sector_t blocks) +{ +return blocks * sdev->sector_size; +} +/* * A DIF-capable target device can be formatted with different * protection schemes. Currently 0 through 3 are defined: