@@ -977,12 +977,12 @@ static unsigned int loop_default_blocksize(struct loop_device *lo,
977
977
return SECTOR_SIZE ;
978
978
}
979
979
980
- static int loop_reconfigure_limits (struct loop_device * lo , unsigned int bsize )
980
+ static void loop_update_limits (struct loop_device * lo , struct queue_limits * lim ,
981
+ unsigned int bsize )
981
982
{
982
983
struct file * file = lo -> lo_backing_file ;
983
984
struct inode * inode = file -> f_mapping -> host ;
984
985
struct block_device * backing_bdev = NULL ;
985
- struct queue_limits lim ;
986
986
u32 granularity = 0 , max_discard_sectors = 0 ;
987
987
988
988
if (S_ISBLK (inode -> i_mode ))
@@ -995,22 +995,20 @@ static int loop_reconfigure_limits(struct loop_device *lo, unsigned int bsize)
995
995
996
996
loop_get_discard_config (lo , & granularity , & max_discard_sectors );
997
997
998
- lim = queue_limits_start_update (lo -> lo_queue );
999
- lim .logical_block_size = bsize ;
1000
- lim .physical_block_size = bsize ;
1001
- lim .io_min = bsize ;
1002
- lim .features &= ~(BLK_FEAT_WRITE_CACHE | BLK_FEAT_ROTATIONAL );
998
+ lim -> logical_block_size = bsize ;
999
+ lim -> physical_block_size = bsize ;
1000
+ lim -> io_min = bsize ;
1001
+ lim -> features &= ~(BLK_FEAT_WRITE_CACHE | BLK_FEAT_ROTATIONAL );
1003
1002
if (file -> f_op -> fsync && !(lo -> lo_flags & LO_FLAGS_READ_ONLY ))
1004
- lim . features |= BLK_FEAT_WRITE_CACHE ;
1003
+ lim -> features |= BLK_FEAT_WRITE_CACHE ;
1005
1004
if (backing_bdev && !bdev_nonrot (backing_bdev ))
1006
- lim . features |= BLK_FEAT_ROTATIONAL ;
1007
- lim . max_hw_discard_sectors = max_discard_sectors ;
1008
- lim . max_write_zeroes_sectors = max_discard_sectors ;
1005
+ lim -> features |= BLK_FEAT_ROTATIONAL ;
1006
+ lim -> max_hw_discard_sectors = max_discard_sectors ;
1007
+ lim -> max_write_zeroes_sectors = max_discard_sectors ;
1009
1008
if (max_discard_sectors )
1010
- lim . discard_granularity = granularity ;
1009
+ lim -> discard_granularity = granularity ;
1011
1010
else
1012
- lim .discard_granularity = 0 ;
1013
- return queue_limits_commit_update (lo -> lo_queue , & lim );
1011
+ lim -> discard_granularity = 0 ;
1014
1012
}
1015
1013
1016
1014
static int loop_configure (struct loop_device * lo , blk_mode_t mode ,
@@ -1019,6 +1017,7 @@ static int loop_configure(struct loop_device *lo, blk_mode_t mode,
1019
1017
{
1020
1018
struct file * file = fget (config -> fd );
1021
1019
struct address_space * mapping ;
1020
+ struct queue_limits lim ;
1022
1021
int error ;
1023
1022
loff_t size ;
1024
1023
bool partscan ;
@@ -1090,7 +1089,9 @@ static int loop_configure(struct loop_device *lo, blk_mode_t mode,
1090
1089
lo -> old_gfp_mask = mapping_gfp_mask (mapping );
1091
1090
mapping_set_gfp_mask (mapping , lo -> old_gfp_mask & ~(__GFP_IO |__GFP_FS ));
1092
1091
1093
- error = loop_reconfigure_limits (lo , config -> block_size );
1092
+ lim = queue_limits_start_update (lo -> lo_queue );
1093
+ loop_update_limits (lo , & lim , config -> block_size );
1094
+ error = queue_limits_commit_update (lo -> lo_queue , & lim );
1094
1095
if (error )
1095
1096
goto out_unlock ;
1096
1097
@@ -1458,6 +1459,7 @@ static int loop_set_dio(struct loop_device *lo, unsigned long arg)
1458
1459
1459
1460
static int loop_set_block_size (struct loop_device * lo , unsigned long arg )
1460
1461
{
1462
+ struct queue_limits lim ;
1461
1463
int err = 0 ;
1462
1464
1463
1465
if (lo -> lo_state != Lo_bound )
@@ -1470,7 +1472,9 @@ static int loop_set_block_size(struct loop_device *lo, unsigned long arg)
1470
1472
invalidate_bdev (lo -> lo_device );
1471
1473
1472
1474
blk_mq_freeze_queue (lo -> lo_queue );
1473
- err = loop_reconfigure_limits (lo , arg );
1475
+ lim = queue_limits_start_update (lo -> lo_queue );
1476
+ loop_update_limits (lo , & lim , arg );
1477
+ err = queue_limits_commit_update (lo -> lo_queue , & lim );
1474
1478
loop_update_dio (lo );
1475
1479
blk_mq_unfreeze_queue (lo -> lo_queue );
1476
1480
0 commit comments