mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-09-04 20:19:47 +08:00 
			
		
		
		
	nvme: fix interpretation of DMRSL
DMRSLl is in the unit of logical blocks, while max_discard_sectors is in the unit of "linux sector". Signed-off-by: Tom Yan <tom.ty89@gmail.com> Signed-off-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
		
							parent
							
								
									c23d47abee
								
							
						
					
					
						commit
						1a86924e4f
					
				| @ -1634,6 +1634,9 @@ static void nvme_config_discard(struct gendisk *disk, struct nvme_ns *ns) | |||||||
| 	if (queue->limits.max_discard_sectors) | 	if (queue->limits.max_discard_sectors) | ||||||
| 		return; | 		return; | ||||||
| 
 | 
 | ||||||
|  | 	if (ctrl->dmrsl && ctrl->dmrsl <= nvme_sect_to_lba(ns, UINT_MAX)) | ||||||
|  | 		ctrl->max_discard_sectors = nvme_lba_to_sect(ns, ctrl->dmrsl); | ||||||
|  | 
 | ||||||
| 	blk_queue_max_discard_sectors(queue, ctrl->max_discard_sectors); | 	blk_queue_max_discard_sectors(queue, ctrl->max_discard_sectors); | ||||||
| 	blk_queue_max_discard_segments(queue, ctrl->max_discard_segments); | 	blk_queue_max_discard_segments(queue, ctrl->max_discard_segments); | ||||||
| 
 | 
 | ||||||
| @ -2893,8 +2896,7 @@ static int nvme_init_non_mdts_limits(struct nvme_ctrl *ctrl) | |||||||
| 
 | 
 | ||||||
| 	if (id->dmrl) | 	if (id->dmrl) | ||||||
| 		ctrl->max_discard_segments = id->dmrl; | 		ctrl->max_discard_segments = id->dmrl; | ||||||
| 	if (id->dmrsl) | 	ctrl->dmrsl = le32_to_cpu(id->dmrsl); | ||||||
| 		ctrl->max_discard_sectors = le32_to_cpu(id->dmrsl); |  | ||||||
| 	if (id->wzsl) | 	if (id->wzsl) | ||||||
| 		ctrl->max_zeroes_sectors = nvme_mps_to_sectors(ctrl, id->wzsl); | 		ctrl->max_zeroes_sectors = nvme_mps_to_sectors(ctrl, id->wzsl); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -284,6 +284,7 @@ struct nvme_ctrl { | |||||||
| #endif | #endif | ||||||
| 	u16 crdt[3]; | 	u16 crdt[3]; | ||||||
| 	u16 oncs; | 	u16 oncs; | ||||||
|  | 	u32 dmrsl; | ||||||
| 	u16 oacs; | 	u16 oacs; | ||||||
| 	u16 sqsize; | 	u16 sqsize; | ||||||
| 	u32 max_namespaces; | 	u32 max_namespaces; | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Tom Yan
						Tom Yan