[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 2/3] xen-blkfront: introduce blkif_set_queue_limits()
On 07/21/2016 04:29 PM, Roger Pau Monné wrote: > On Fri, Jul 15, 2016 at 05:31:48PM +0800, Bob Liu wrote: >> blk_mq_update_nr_hw_queues() reset all queue limits to default which it's not >> as xen-blkfront expected, introducing blkif_set_queue_limits() to reset >> limits >> with initial correct values. > > Hm, great, and as usual in Linux there isn't even a comment in the function > that explains what it is supposed to do, or what are the side-effects of > calling blk_mq_update_nr_hw_queues. > >> Signed-off-by: Bob Liu <bob.liu@xxxxxxxxxx> >> >> drivers/block/xen-blkfront.c | 91 >> ++++++++++++++++++++++++-------------------- >> 1 file changed, 50 insertions(+), 41 deletions(-) >> >> diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c >> index 032fc94..10f46a8 100644 >> --- a/drivers/block/xen-blkfront.c >> +++ b/drivers/block/xen-blkfront.c >> @@ -189,6 +189,8 @@ struct blkfront_info >> struct mutex mutex; >> struct xenbus_device *xbdev; >> struct gendisk *gd; >> + u16 sector_size; >> + unsigned int physical_sector_size; >> int vdevice; >> blkif_vdev_t handle; >> enum blkif_state connected; >> @@ -913,9 +915,45 @@ static struct blk_mq_ops blkfront_mq_ops = { >> .map_queue = blk_mq_map_queue, >> }; >> >> +static void blkif_set_queue_limits(struct blkfront_info *info) >> +{ >> + struct request_queue *rq = info->rq; >> + struct gendisk *gd = info->gd; >> + unsigned int segments = info->max_indirect_segments ? : >> + BLKIF_MAX_SEGMENTS_PER_REQUEST; >> + >> + queue_flag_set_unlocked(QUEUE_FLAG_VIRT, rq); >> + >> + if (info->feature_discard) { >> + queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, rq); >> + blk_queue_max_discard_sectors(rq, get_capacity(gd)); >> + rq->limits.discard_granularity = info->discard_granularity; >> + rq->limits.discard_alignment = info->discard_alignment; >> + if (info->feature_secdiscard) >> + queue_flag_set_unlocked(QUEUE_FLAG_SECDISCARD, rq); >> + } > > AFAICT, at the point this function is called (in blkfront_resume), the > value of info->feature_discard is still from the old backend, maybe this > should be called from blkif_recover after blkfront_gather_backend_features? > Thank you for pointing out, will be fixed. -- Regards, -Bob _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |