vblk: Fixed the max size for discard

- Updated the max_discard_segments to 1 for
   discarding contiguous blocks.
 - Updated the max_discard_sectors to correct value
   considering the SECTOR_SIZE.

Bug 5065629

Change-Id: I6737d77f63ff5d7330d467acdbf051b8df4097af
Signed-off-by: Sanjith T D <std@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3313548
Reviewed-by: Sreenivas Velpula <svelpula@nvidia.com>
Reviewed-by: svcacv <svcacv@nvidia.com>
Reviewed-by: Vipin Kumar <vipink@nvidia.com>
This commit is contained in:
Sanjith T D
2025-03-04 17:17:56 +00:00
committed by Jon Hunter
parent 88caf7f818
commit 5ee238d258

View File

@@ -1297,10 +1297,13 @@ static void setup_device(struct vblk_dev *vblkdev)
*/ */
blk_queue_flag_set(QUEUE_FLAG_SECERASE, vblkdev->queue); blk_queue_flag_set(QUEUE_FLAG_SECERASE, vblkdev->queue);
#elif defined(NV_BLOCK_USE_QUEUE_LIMITS_SET) #elif defined(NV_BLOCK_USE_QUEUE_LIMITS_SET)
limits.max_secure_erase_sectors = vblkdev->config.blk_config.max_erase_blks_per_io; limits.max_secure_erase_sectors =
(vblkdev->config.blk_config.max_erase_blks_per_io *
vblkdev->config.blk_config.hardblk_size) / SECTOR_SIZE;
#else #else
blk_queue_max_secure_erase_sectors(vblkdev->queue, blk_queue_max_secure_erase_sectors(vblkdev->queue,
vblkdev->config.blk_config.max_erase_blks_per_io); ((vblkdev->config.blk_config.max_erase_blks_per_io *
vblkdev->config.blk_config.hardblk_size) / SECTOR_SIZE));
#endif #endif
} }
@@ -1315,11 +1318,28 @@ static void setup_device(struct vblk_dev *vblkdev)
blk_queue_flag_set(QUEUE_FLAG_DISCARD, vblkdev->queue); blk_queue_flag_set(QUEUE_FLAG_DISCARD, vblkdev->queue);
#endif #endif
#if defined(NV_BLOCK_USE_QUEUE_LIMITS_SET) #if defined(NV_BLOCK_USE_QUEUE_LIMITS_SET)
limits.max_discard_segments = vblkdev->config.blk_config.max_erase_blks_per_io; /* H/W supports single contiguous range of discard. So set max_discard_segments to 1.
*
* Ex:
* For 4KB block size(vblkdev->config.blk_config.hardblk_size)
* and 64MB(vblkdev->config.blk_config.max_erase_blks_per_io) max discard:
* Block size = 4KB = 8 sectors
* max_discard_sectors = 131072 sectors (64MB)
* max_discard_segments = 1 (one contiguous range)
*
* Segment structure:
* [Block 0] [Block 1] ... [Block 16383] = One segment
* |--8 sectors--| ... up to 131072 sectors total
*/
limits.max_discard_segments = 1;
limits.max_discard_sectors =
((vblkdev->config.blk_config.max_erase_blks_per_io *
vblkdev->config.blk_config.hardblk_size) / SECTOR_SIZE);
limits.discard_granularity = vblkdev->config.blk_config.hardblk_size; limits.discard_granularity = vblkdev->config.blk_config.hardblk_size;
#else #else
blk_queue_max_discard_sectors(vblkdev->queue, blk_queue_max_discard_sectors(vblkdev->queue,
vblkdev->config.blk_config.max_erase_blks_per_io); ((vblkdev->config.blk_config.max_erase_blks_per_io *
vblkdev->config.blk_config.hardblk_size) / SECTOR_SIZE));
vblkdev->queue->limits.discard_granularity = vblkdev->queue->limits.discard_granularity =
vblkdev->config.blk_config.hardblk_size; vblkdev->config.blk_config.hardblk_size;
#endif #endif