xen-blkfront: move negotiate_mq to cover all cases of new VBDs
negotiate_mq should happen in all cases of a new VBD being discovered by xen-blkfront, whether called through _probe() or a hot-attached new VBD from dom-0 via xenstore. Otherwise, hot-attached new VBDs are left configured without multi-queue. Signed-off-by: Bhavesh Davda <bhavesh.davda@oracle.com> Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
This commit is contained in:
		
							parent
							
								
									bebc6082da
								
							
						
					
					
						commit
						7ed8ce1c5f
					
				| @ -262,6 +262,7 @@ static DEFINE_SPINLOCK(minor_lock); | ||||
| 
 | ||||
| static int blkfront_setup_indirect(struct blkfront_ring_info *rinfo); | ||||
| static void blkfront_gather_backend_features(struct blkfront_info *info); | ||||
| static int negotiate_mq(struct blkfront_info *info); | ||||
| 
 | ||||
| static int get_id_from_freelist(struct blkfront_ring_info *rinfo) | ||||
| { | ||||
| @ -1774,11 +1775,18 @@ static int talk_to_blkback(struct xenbus_device *dev, | ||||
| 	unsigned int i, max_page_order; | ||||
| 	unsigned int ring_page_order; | ||||
| 
 | ||||
| 	if (!info) | ||||
| 		return -ENODEV; | ||||
| 
 | ||||
| 	max_page_order = xenbus_read_unsigned(info->xbdev->otherend, | ||||
| 					      "max-ring-page-order", 0); | ||||
| 	ring_page_order = min(xen_blkif_max_ring_order, max_page_order); | ||||
| 	info->nr_ring_pages = 1 << ring_page_order; | ||||
| 
 | ||||
| 	err = negotiate_mq(info); | ||||
| 	if (err) | ||||
| 		goto destroy_blkring; | ||||
| 
 | ||||
| 	for (i = 0; i < info->nr_rings; i++) { | ||||
| 		struct blkfront_ring_info *rinfo = &info->rinfo[i]; | ||||
| 
 | ||||
| @ -1978,11 +1986,6 @@ static int blkfront_probe(struct xenbus_device *dev, | ||||
| 	} | ||||
| 
 | ||||
| 	info->xbdev = dev; | ||||
| 	err = negotiate_mq(info); | ||||
| 	if (err) { | ||||
| 		kfree(info); | ||||
| 		return err; | ||||
| 	} | ||||
| 
 | ||||
| 	mutex_init(&info->mutex); | ||||
| 	info->vdevice = vdevice; | ||||
| @ -2099,10 +2102,6 @@ static int blkfront_resume(struct xenbus_device *dev) | ||||
| 
 | ||||
| 	blkif_free(info, info->connected == BLKIF_STATE_CONNECTED); | ||||
| 
 | ||||
| 	err = negotiate_mq(info); | ||||
| 	if (err) | ||||
| 		return err; | ||||
| 
 | ||||
| 	err = talk_to_blkback(dev, info); | ||||
| 	if (!err) | ||||
| 		blk_mq_update_nr_hw_queues(&info->tag_set, info->nr_rings); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user