@@ -901,12 +901,12 @@ static unsigned int loop_default_blocksize(struct loop_device *lo,
901
901
return SECTOR_SIZE ;
902
902
}
903
903
904
- static int loop_reconfigure_limits (struct loop_device * lo , unsigned int bsize )
904
+ static void loop_update_limits (struct loop_device * lo , struct queue_limits * lim ,
905
+ unsigned int bsize )
905
906
{
906
907
struct file * file = lo -> lo_backing_file ;
907
908
struct inode * inode = file -> f_mapping -> host ;
908
909
struct block_device * backing_bdev = NULL ;
909
- struct queue_limits lim ;
910
910
u32 granularity = 0 , max_discard_sectors = 0 ;
911
911
912
912
if (S_ISBLK (inode -> i_mode ))
@@ -919,22 +919,20 @@ static int loop_reconfigure_limits(struct loop_device *lo, unsigned int bsize)
919
919
920
920
loop_get_discard_config (lo , & granularity , & max_discard_sectors );
921
921
922
- lim = queue_limits_start_update (lo -> lo_queue );
923
- lim .logical_block_size = bsize ;
924
- lim .physical_block_size = bsize ;
925
- lim .io_min = bsize ;
926
- lim .features &= ~(BLK_FEAT_WRITE_CACHE | BLK_FEAT_ROTATIONAL );
922
+ lim -> logical_block_size = bsize ;
923
+ lim -> physical_block_size = bsize ;
924
+ lim -> io_min = bsize ;
925
+ lim -> features &= ~(BLK_FEAT_WRITE_CACHE | BLK_FEAT_ROTATIONAL );
927
926
if (file -> f_op -> fsync && !(lo -> lo_flags & LO_FLAGS_READ_ONLY ))
928
- lim . features |= BLK_FEAT_WRITE_CACHE ;
927
+ lim -> features |= BLK_FEAT_WRITE_CACHE ;
929
928
if (backing_bdev && !bdev_nonrot (backing_bdev ))
930
- lim . features |= BLK_FEAT_ROTATIONAL ;
931
- lim . max_hw_discard_sectors = max_discard_sectors ;
932
- lim . max_write_zeroes_sectors = max_discard_sectors ;
929
+ lim -> features |= BLK_FEAT_ROTATIONAL ;
930
+ lim -> max_hw_discard_sectors = max_discard_sectors ;
931
+ lim -> max_write_zeroes_sectors = max_discard_sectors ;
933
932
if (max_discard_sectors )
934
- lim . discard_granularity = granularity ;
933
+ lim -> discard_granularity = granularity ;
935
934
else
936
- lim .discard_granularity = 0 ;
937
- return queue_limits_commit_update (lo -> lo_queue , & lim );
935
+ lim -> discard_granularity = 0 ;
938
936
}
939
937
940
938
static int loop_configure (struct loop_device * lo , blk_mode_t mode ,
@@ -943,6 +941,7 @@ static int loop_configure(struct loop_device *lo, blk_mode_t mode,
943
941
{
944
942
struct file * file = fget (config -> fd );
945
943
struct address_space * mapping ;
944
+ struct queue_limits lim ;
946
945
int error ;
947
946
loff_t size ;
948
947
bool partscan ;
@@ -1014,7 +1013,9 @@ static int loop_configure(struct loop_device *lo, blk_mode_t mode,
1014
1013
lo -> old_gfp_mask = mapping_gfp_mask (mapping );
1015
1014
mapping_set_gfp_mask (mapping , lo -> old_gfp_mask & ~(__GFP_IO |__GFP_FS ));
1016
1015
1017
- error = loop_reconfigure_limits (lo , config -> block_size );
1016
+ lim = queue_limits_start_update (lo -> lo_queue );
1017
+ loop_update_limits (lo , & lim , config -> block_size );
1018
+ error = queue_limits_commit_update (lo -> lo_queue , & lim );
1018
1019
if (error )
1019
1020
goto out_unlock ;
1020
1021
@@ -1382,6 +1383,7 @@ static int loop_set_dio(struct loop_device *lo, unsigned long arg)
1382
1383
1383
1384
static int loop_set_block_size (struct loop_device * lo , unsigned long arg )
1384
1385
{
1386
+ struct queue_limits lim ;
1385
1387
int err = 0 ;
1386
1388
1387
1389
if (lo -> lo_state != Lo_bound )
@@ -1394,7 +1396,9 @@ static int loop_set_block_size(struct loop_device *lo, unsigned long arg)
1394
1396
invalidate_bdev (lo -> lo_device );
1395
1397
1396
1398
blk_mq_freeze_queue (lo -> lo_queue );
1397
- err = loop_reconfigure_limits (lo , arg );
1399
+ lim = queue_limits_start_update (lo -> lo_queue );
1400
+ loop_update_limits (lo , & lim , arg );
1401
+ err = queue_limits_commit_update (lo -> lo_queue , & lim );
1398
1402
loop_update_dio (lo );
1399
1403
blk_mq_unfreeze_queue (lo -> lo_queue );
1400
1404
0 commit comments