mirror of
https://github.com/torvalds/linux.git
synced 2026-05-23 14:42:08 +02:00
sd: factor out a sd_discard_mode helper
Split the logic to pick the right discard mode into a little helper to prepare for further changes. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Bart Van Assche <bvanassche@acm.org> Reviewed-by: Damien Le Moal <dlemoal@kernel.org> Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com> Link: https://lore.kernel.org/r/20240531074837.1648501-10-hch@lst.de Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
d15b9bd42c
commit
f1e8185fc1
|
|
@ -3201,6 +3201,25 @@ static void sd_read_app_tag_own(struct scsi_disk *sdkp, unsigned char *buffer)
|
|||
return;
|
||||
}
|
||||
|
||||
static unsigned int sd_discard_mode(struct scsi_disk *sdkp)
|
||||
{
|
||||
if (!sdkp->lbpvpd) {
|
||||
/* LBP VPD page not provided */
|
||||
if (sdkp->max_unmap_blocks)
|
||||
return SD_LBP_UNMAP;
|
||||
return SD_LBP_WS16;
|
||||
}
|
||||
|
||||
/* LBP VPD page tells us what to use */
|
||||
if (sdkp->lbpu && sdkp->max_unmap_blocks)
|
||||
return SD_LBP_UNMAP;
|
||||
if (sdkp->lbpws)
|
||||
return SD_LBP_WS16;
|
||||
if (sdkp->lbpws10)
|
||||
return SD_LBP_WS10;
|
||||
return SD_LBP_DISABLE;
|
||||
}
|
||||
|
||||
/**
|
||||
* sd_read_block_limits - Query disk device for preferred I/O sizes.
|
||||
* @sdkp: disk to query
|
||||
|
|
@ -3239,23 +3258,7 @@ static void sd_read_block_limits(struct scsi_disk *sdkp)
|
|||
sdkp->unmap_alignment =
|
||||
get_unaligned_be32(&vpd->data[32]) & ~(1 << 31);
|
||||
|
||||
if (!sdkp->lbpvpd) { /* LBP VPD page not provided */
|
||||
|
||||
if (sdkp->max_unmap_blocks)
|
||||
sd_config_discard(sdkp, SD_LBP_UNMAP);
|
||||
else
|
||||
sd_config_discard(sdkp, SD_LBP_WS16);
|
||||
|
||||
} 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)
|
||||
sd_config_discard(sdkp, SD_LBP_WS16);
|
||||
else if (sdkp->lbpws10)
|
||||
sd_config_discard(sdkp, SD_LBP_WS10);
|
||||
else
|
||||
sd_config_discard(sdkp, SD_LBP_DISABLE);
|
||||
}
|
||||
sd_config_discard(sdkp, sd_discard_mode(sdkp));
|
||||
}
|
||||
|
||||
out:
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user