@@ -1541,6 +1541,7 @@ static int disk_update_zone_resources(struct gendisk *disk,
1541
1541
unsigned int nr_seq_zones , nr_conv_zones = 0 ;
1542
1542
unsigned int pool_size ;
1543
1543
struct queue_limits lim ;
1544
+ int ret ;
1544
1545
1545
1546
disk -> nr_zones = args -> nr_zones ;
1546
1547
disk -> zone_capacity = args -> zone_capacity ;
@@ -1593,7 +1594,11 @@ static int disk_update_zone_resources(struct gendisk *disk,
1593
1594
}
1594
1595
1595
1596
commit :
1596
- return queue_limits_commit_update (q , & lim );
1597
+ blk_mq_freeze_queue (q );
1598
+ ret = queue_limits_commit_update (q , & lim );
1599
+ blk_mq_unfreeze_queue (q );
1600
+
1601
+ return ret ;
1597
1602
}
1598
1603
1599
1604
static int blk_revalidate_conv_zone (struct blk_zone * zone , unsigned int idx ,
@@ -1814,14 +1819,15 @@ int blk_revalidate_disk_zones(struct gendisk *disk)
1814
1819
* Set the new disk zone parameters only once the queue is frozen and
1815
1820
* all I/Os are completed.
1816
1821
*/
1817
- blk_mq_freeze_queue (q );
1818
1822
if (ret > 0 )
1819
1823
ret = disk_update_zone_resources (disk , & args );
1820
1824
else
1821
1825
pr_warn ("%s: failed to revalidate zones\n" , disk -> disk_name );
1822
- if (ret )
1826
+ if (ret ) {
1827
+ blk_mq_freeze_queue (q );
1823
1828
disk_free_zone_resources (disk );
1824
- blk_mq_unfreeze_queue (q );
1829
+ blk_mq_unfreeze_queue (q );
1830
+ }
1825
1831
1826
1832
kfree (args .conv_zones_bitmap );
1827
1833
0 commit comments