forked from mirrors/linux
		
	dm: improve documentation and code clarity in dm_merge_bvec
These code changes do not introduce a functional change. But bio_add_page() will never attempt to build up a bio larger than queue_max_sectors(). Similarly, bio_get_nr_vecs() is also bound by queue_max_sectors(). Therefore, there is no point in allowing dm_merge_bvec() to answer "how many sectors can a bio have at this offset?" with anything larger than queue_max_sectors(). Using queue_max_sectors() rather than BIO_MAX_SECTORS serves to more accurately convey the limits that are being imposed. Also, use unlikely() to clarify the fact that the defensive code in dm_merge_bvec() relative to max_size going negative shouldn't ever happen -- if it does happen there is a bug in the block layer for requesting larger than dm_merge_bvec()'s initial response for a given offset. Also, update a comment in dm_merge_bvec() relative to max_hw_sectors_kb. And fix empty newline whitespace. Signed-off-by: Mike Snitzer <snitzer@redhat.com>
This commit is contained in:
		
							parent
							
								
									604ea90641
								
							
						
					
					
						commit
						148e51baf8
					
				
					 1 changed files with 6 additions and 6 deletions
				
			
		| 
						 | 
					@ -1607,9 +1607,9 @@ static int dm_merge_bvec(struct request_queue *q,
 | 
				
			||||||
	 * Find maximum amount of I/O that won't need splitting
 | 
						 * Find maximum amount of I/O that won't need splitting
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	max_sectors = min(max_io_len(bvm->bi_sector, ti),
 | 
						max_sectors = min(max_io_len(bvm->bi_sector, ti),
 | 
				
			||||||
			  (sector_t) BIO_MAX_SECTORS);
 | 
								  (sector_t) queue_max_sectors(q));
 | 
				
			||||||
	max_size = (max_sectors << SECTOR_SHIFT) - bvm->bi_size;
 | 
						max_size = (max_sectors << SECTOR_SHIFT) - bvm->bi_size;
 | 
				
			||||||
	if (max_size < 0)
 | 
						if (unlikely(max_size < 0)) /* this shouldn't _ever_ happen */
 | 
				
			||||||
		max_size = 0;
 | 
							max_size = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
| 
						 | 
					@ -1621,10 +1621,10 @@ static int dm_merge_bvec(struct request_queue *q,
 | 
				
			||||||
		max_size = ti->type->merge(ti, bvm, biovec, max_size);
 | 
							max_size = ti->type->merge(ti, bvm, biovec, max_size);
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
	 * If the target doesn't support merge method and some of the devices
 | 
						 * If the target doesn't support merge method and some of the devices
 | 
				
			||||||
	 * provided their merge_bvec method (we know this by looking at
 | 
						 * provided their merge_bvec method (we know this by looking for the
 | 
				
			||||||
	 * queue_max_hw_sectors), then we can't allow bios with multiple vector
 | 
						 * max_hw_sectors that dm_set_device_limits may set), then we can't
 | 
				
			||||||
	 * entries.  So always set max_size to 0, and the code below allows
 | 
						 * allow bios with multiple vector entries.  So always set max_size
 | 
				
			||||||
	 * just one page.
 | 
						 * to 0, and the code below allows just one page.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	else if (queue_max_hw_sectors(q) <= PAGE_SIZE >> 9)
 | 
						else if (queue_max_hw_sectors(q) <= PAGE_SIZE >> 9)
 | 
				
			||||||
		max_size = 0;
 | 
							max_size = 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue