| 
					
				 | 
			
			
				@@ -311,3 +311,115 @@ EXPORT_SYMBOL(blk_queue_max_write_same_sectors); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void blk_queue_max_segments(struct request_queue *q, unsigned short max_segments) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if (!max_segments) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		max_segments = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		printk(KERN_INFO "%s: set to minimum %d\n", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		       __func__, max_segments); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	q->limits.max_segments = max_segments; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+EXPORT_SYMBOL(blk_queue_max_segments); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * blk_queue_max_segment_size - set max segment size for blk_rq_map_sg 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @q:  the request queue for the device 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @max_size:  max size of segment in bytes 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Description: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *    Enables a low level driver to set an upper limit on the size of a 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *    coalesced segment 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ **/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void blk_queue_max_segment_size(struct request_queue *q, unsigned int max_size) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (max_size < PAGE_CACHE_SIZE) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		max_size = PAGE_CACHE_SIZE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		printk(KERN_INFO "%s: set to minimum %d\n", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		       __func__, max_size); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	q->limits.max_segment_size = max_size; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+EXPORT_SYMBOL(blk_queue_max_segment_size); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * blk_queue_logical_block_size - set logical block size for the queue 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @q:  the request queue for the device 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @size:  the logical block size, in bytes 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Description: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *   This should be set to the lowest possible block size that the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *   storage device can address.  The default of 512 covers most 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *   hardware. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ **/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void blk_queue_logical_block_size(struct request_queue *q, unsigned short size) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	q->limits.logical_block_size = size; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (q->limits.physical_block_size < size) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		q->limits.physical_block_size = size; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (q->limits.io_min < q->limits.physical_block_size) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		q->limits.io_min = q->limits.physical_block_size; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+EXPORT_SYMBOL(blk_queue_logical_block_size); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * blk_queue_physical_block_size - set physical block size for the queue 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @q:  the request queue for the device 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @size:  the physical block size, in bytes 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Description: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *   This should be set to the lowest possible sector size that the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *   hardware can operate on without reverting to read-modify-write 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *   operations. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void blk_queue_physical_block_size(struct request_queue *q, unsigned int size) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	q->limits.physical_block_size = size; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (q->limits.physical_block_size < q->limits.logical_block_size) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		q->limits.physical_block_size = q->limits.logical_block_size; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (q->limits.io_min < q->limits.physical_block_size) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		q->limits.io_min = q->limits.physical_block_size; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+EXPORT_SYMBOL(blk_queue_physical_block_size); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * blk_queue_alignment_offset - set physical block alignment offset 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @q:	the request queue for the device 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @offset: alignment offset in bytes 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Description: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *   Some devices are naturally misaligned to compensate for things like 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *   the legacy DOS partition table 63-sector offset.  Low-level drivers 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *   should call this function for devices whose first sector is not 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *   naturally aligned. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void blk_queue_alignment_offset(struct request_queue *q, unsigned int offset) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	q->limits.alignment_offset = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		offset & (q->limits.physical_block_size - 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	q->limits.misaligned = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+EXPORT_SYMBOL(blk_queue_alignment_offset); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * blk_limits_io_min - set minimum request size for a device 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @limits: the queue limits 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @min:  smallest I/O size in bytes 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Description: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *   Some devices have an internal block size bigger than the reported 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *   hardware sector size.  This function can be used to signal the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *   smallest I/O the device can perform without incurring a performance 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *   penalty. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void blk_limits_io_min(struct queue_limits *limits, unsigned int min) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	limits->io_min = min; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (limits->io_min < limits->logical_block_size) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		limits->io_min = limits->logical_block_size; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (limits->io_min < limits->physical_block_size) 
			 |