@@ -977,12 +977,12 @@ static unsigned int loop_default_blocksize(struct loop_device *lo,
977977 return SECTOR_SIZE;
978978}
979979
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)
981982{
982983 struct file *file = lo->lo_backing_file;
983984 struct inode *inode = file->f_mapping->host;
984985 struct block_device *backing_bdev = NULL;
985- struct queue_limits lim;
986986 u32 granularity = 0, max_discard_sectors = 0;
987987
988988 if (S_ISBLK(inode->i_mode))
@@ -995,22 +995,20 @@ static int loop_reconfigure_limits(struct loop_device *lo, unsigned int bsize)
995995
996996 loop_get_discard_config(lo, &granularity, &max_discard_sectors);
997997
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);
10031002 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;
10051004 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;
10091008 if (max_discard_sectors)
1010- lim. discard_granularity = granularity;
1009+ lim-> discard_granularity = granularity;
10111010 else
1012- lim.discard_granularity = 0;
1013- return queue_limits_commit_update(lo->lo_queue, &lim);
1011+ lim->discard_granularity = 0;
10141012}
10151013
10161014static 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,
10191017{
10201018 struct file *file = fget(config->fd);
10211019 struct address_space *mapping;
1020+ struct queue_limits lim;
10221021 int error;
10231022 loff_t size;
10241023 bool partscan;
@@ -1090,7 +1089,9 @@ static int loop_configure(struct loop_device *lo, blk_mode_t mode,
10901089 lo->old_gfp_mask = mapping_gfp_mask(mapping);
10911090 mapping_set_gfp_mask(mapping, lo->old_gfp_mask & ~(__GFP_IO|__GFP_FS));
10921091
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);
10941095 if (error)
10951096 goto out_unlock;
10961097
@@ -1458,6 +1459,7 @@ static int loop_set_dio(struct loop_device *lo, unsigned long arg)
14581459
14591460static int loop_set_block_size(struct loop_device *lo, unsigned long arg)
14601461{
1462+ struct queue_limits lim;
14611463 int err = 0;
14621464
14631465 if (lo->lo_state != Lo_bound)
@@ -1470,7 +1472,9 @@ static int loop_set_block_size(struct loop_device *lo, unsigned long arg)
14701472 invalidate_bdev(lo->lo_device);
14711473
14721474 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);
14741478 loop_update_dio(lo);
14751479 blk_mq_unfreeze_queue(lo->lo_queue);
14761480
0 commit comments