forked from mirrors/linux
		
	dm: change max_io_len() to use blk_max_size_offset()
Using blk_max_size_offset() enables DM core's splitting to impose ti->max_io_len (via q->limits.chunk_sectors) and also fallback to respecting q->limits.max_sectors if chunk_sectors isn't set. Signed-off-by: Mike Snitzer <snitzer@redhat.com>
This commit is contained in:
		
							parent
							
								
									882ec4e609
								
							
						
					
					
						commit
						5091cdec56
					
				
					 1 changed files with 8 additions and 12 deletions
				
			
		| 
						 | 
				
			
			@ -1051,22 +1051,18 @@ static sector_t max_io_len_target_boundary(sector_t sector, struct dm_target *ti
 | 
			
		|||
static sector_t max_io_len(sector_t sector, struct dm_target *ti)
 | 
			
		||||
{
 | 
			
		||||
	sector_t len = max_io_len_target_boundary(sector, ti);
 | 
			
		||||
	sector_t offset, max_len;
 | 
			
		||||
	sector_t max_len;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * Does the target need to split even further?
 | 
			
		||||
	 * - q->limits.chunk_sectors reflects ti->max_io_len so
 | 
			
		||||
	 *   blk_max_size_offset() provides required splitting.
 | 
			
		||||
	 * - blk_max_size_offset() also respects q->limits.max_sectors
 | 
			
		||||
	 */
 | 
			
		||||
	if (ti->max_io_len) {
 | 
			
		||||
		offset = dm_target_offset(ti, sector);
 | 
			
		||||
		if (unlikely(ti->max_io_len & (ti->max_io_len - 1)))
 | 
			
		||||
			max_len = sector_div(offset, ti->max_io_len);
 | 
			
		||||
		else
 | 
			
		||||
			max_len = offset & (ti->max_io_len - 1);
 | 
			
		||||
		max_len = ti->max_io_len - max_len;
 | 
			
		||||
 | 
			
		||||
		if (len > max_len)
 | 
			
		||||
			len = max_len;
 | 
			
		||||
	}
 | 
			
		||||
	max_len = blk_max_size_offset(dm_table_get_md(ti->table)->queue,
 | 
			
		||||
				      dm_target_offset(ti, sector));
 | 
			
		||||
	if (len > max_len)
 | 
			
		||||
		len = max_len;
 | 
			
		||||
 | 
			
		||||
	return len;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue