From 6235986d0b3630c4839b6139e28d15ca2b9f0df6 Mon Sep 17 00:00:00 2001 From: Martin K. Petersen Date: Fri, 17 Aug 2012 14:28:12 -0400 Subject: [PATCH 8/9] sd: Update sector shifts when preparing discard operations Avoid special-casing devices with a 4K logical block size and use ilog2 to shift LBA and block count. Signed-off-by: Martin K. Petersen --- drivers/scsi/sd.c | 7 ++----- 1 files changed, 2 insertions(+), 5 deletions(-) diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index ff269f5..7530296 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -624,13 +624,10 @@ static int sd_setup_discard_cmnd(struct scsi_device *sdp, struct request *rq) char *buf; struct page *page; - if (sdkp->device->sector_size == 4096) { - sector >>= 3; - nr_sectors >>= 3; - } + sector >>= ilog2(sdp->sector_size) - 9; + nr_sectors >>= ilog2(sdp->sector_size) - 9; rq->timeout = SD_TIMEOUT; - memset(rq->cmd, 0, rq->cmd_len); page = alloc_page(GFP_ATOMIC | __GFP_ZERO); -- 1.7.1