|
@@ -656,7 +656,7 @@ static void sd_config_discard(struct scsi_disk *sdkp, unsigned int mode)
|
|
|
unsigned int logical_block_size = sdkp->device->sector_size;
|
|
|
unsigned int max_blocks = 0;
|
|
|
|
|
|
- q->limits.discard_zeroes_data = sdkp->lbprz;
|
|
|
+ q->limits.discard_zeroes_data = 0;
|
|
|
q->limits.discard_alignment = sdkp->unmap_alignment *
|
|
|
logical_block_size;
|
|
|
q->limits.discard_granularity =
|
|
@@ -680,11 +680,13 @@ static void sd_config_discard(struct scsi_disk *sdkp, unsigned int mode)
|
|
|
case SD_LBP_WS16:
|
|
|
max_blocks = min_not_zero(sdkp->max_ws_blocks,
|
|
|
(u32)SD_MAX_WS16_BLOCKS);
|
|
|
+ q->limits.discard_zeroes_data = sdkp->lbprz;
|
|
|
break;
|
|
|
|
|
|
case SD_LBP_WS10:
|
|
|
max_blocks = min_not_zero(sdkp->max_ws_blocks,
|
|
|
(u32)SD_MAX_WS10_BLOCKS);
|
|
|
+ q->limits.discard_zeroes_data = sdkp->lbprz;
|
|
|
break;
|
|
|
|
|
|
case SD_LBP_ZERO:
|
|
@@ -2622,12 +2624,12 @@ static void sd_read_block_limits(struct scsi_disk *sdkp)
|
|
|
|
|
|
} else { /* LBP VPD page tells us what to use */
|
|
|
|
|
|
- if (sdkp->lbpu && sdkp->max_unmap_blocks)
|
|
|
- sd_config_discard(sdkp, SD_LBP_UNMAP);
|
|
|
- else if (sdkp->lbpws)
|
|
|
+ if (sdkp->lbpws)
|
|
|
sd_config_discard(sdkp, SD_LBP_WS16);
|
|
|
else if (sdkp->lbpws10)
|
|
|
sd_config_discard(sdkp, SD_LBP_WS10);
|
|
|
+ else if (sdkp->lbpu && sdkp->max_unmap_blocks)
|
|
|
+ sd_config_discard(sdkp, SD_LBP_UNMAP);
|
|
|
else
|
|
|
sd_config_discard(sdkp, SD_LBP_DISABLE);
|
|
|
}
|