loop.c (3eb0930a425b086bdab38156aa4708427479a201) loop.c (5db470e229e22b7eda6e23b5566e532c96fb5bc3)
1/*
2 * linux/drivers/block/loop.c
3 *
4 * Written by Theodore Ts'o, 3/29/93
5 *
6 * Copyright 1993 by Theodore Ts'o. Redistribution of this file is
7 * permitted under the GNU General Public License.
8 *

--- 1176 unchanged lines hidden (view full) ---

1185 err = -ENXIO;
1186 goto out_unlock;
1187 }
1188 if ((unsigned int) info->lo_encrypt_key_size > LO_KEY_SIZE) {
1189 err = -EINVAL;
1190 goto out_unlock;
1191 }
1192
1/*
2 * linux/drivers/block/loop.c
3 *
4 * Written by Theodore Ts'o, 3/29/93
5 *
6 * Copyright 1993 by Theodore Ts'o. Redistribution of this file is
7 * permitted under the GNU General Public License.
8 *

--- 1176 unchanged lines hidden (view full) ---

1185 err = -ENXIO;
1186 goto out_unlock;
1187 }
1188 if ((unsigned int) info->lo_encrypt_key_size > LO_KEY_SIZE) {
1189 err = -EINVAL;
1190 goto out_unlock;
1191 }
1192
1193 if (lo->lo_offset != info->lo_offset ||
1194 lo->lo_sizelimit != info->lo_sizelimit) {
1195 sync_blockdev(lo->lo_device);
1196 kill_bdev(lo->lo_device);
1197 }
1198
1193 /* I/O need to be drained during transfer transition */
1194 blk_mq_freeze_queue(lo->lo_queue);
1195
1196 err = loop_release_xfer(lo);
1197 if (err)
1198 goto out_unfreeze;
1199
1200 if (info->lo_encrypt_type) {

--- 12 unchanged lines hidden (view full) ---

1213 xfer = NULL;
1214
1215 err = loop_init_xfer(lo, xfer, info);
1216 if (err)
1217 goto out_unfreeze;
1218
1219 if (lo->lo_offset != info->lo_offset ||
1220 lo->lo_sizelimit != info->lo_sizelimit) {
1199 /* I/O need to be drained during transfer transition */
1200 blk_mq_freeze_queue(lo->lo_queue);
1201
1202 err = loop_release_xfer(lo);
1203 if (err)
1204 goto out_unfreeze;
1205
1206 if (info->lo_encrypt_type) {

--- 12 unchanged lines hidden (view full) ---

1219 xfer = NULL;
1220
1221 err = loop_init_xfer(lo, xfer, info);
1222 if (err)
1223 goto out_unfreeze;
1224
1225 if (lo->lo_offset != info->lo_offset ||
1226 lo->lo_sizelimit != info->lo_sizelimit) {
1227 /* kill_bdev should have truncated all the pages */
1228 if (lo->lo_device->bd_inode->i_mapping->nrpages) {
1229 err = -EAGAIN;
1230 pr_warn("%s: loop%d (%s) has still dirty pages (nrpages=%lu)\n",
1231 __func__, lo->lo_number, lo->lo_file_name,
1232 lo->lo_device->bd_inode->i_mapping->nrpages);
1233 goto out_unfreeze;
1234 }
1221 if (figure_loop_size(lo, info->lo_offset, info->lo_sizelimit)) {
1222 err = -EFBIG;
1223 goto out_unfreeze;
1224 }
1225 }
1226
1227 loop_config_discard(lo);
1228

--- 209 unchanged lines hidden (view full) ---

1438 return 0;
1439 error = -EINVAL;
1440 out:
1441 return error;
1442}
1443
1444static int loop_set_block_size(struct loop_device *lo, unsigned long arg)
1445{
1235 if (figure_loop_size(lo, info->lo_offset, info->lo_sizelimit)) {
1236 err = -EFBIG;
1237 goto out_unfreeze;
1238 }
1239 }
1240
1241 loop_config_discard(lo);
1242

--- 209 unchanged lines hidden (view full) ---

1452 return 0;
1453 error = -EINVAL;
1454 out:
1455 return error;
1456}
1457
1458static int loop_set_block_size(struct loop_device *lo, unsigned long arg)
1459{
1460 int err = 0;
1461
1446 if (lo->lo_state != Lo_bound)
1447 return -ENXIO;
1448
1449 if (arg < 512 || arg > PAGE_SIZE || !is_power_of_2(arg))
1450 return -EINVAL;
1451
1462 if (lo->lo_state != Lo_bound)
1463 return -ENXIO;
1464
1465 if (arg < 512 || arg > PAGE_SIZE || !is_power_of_2(arg))
1466 return -EINVAL;
1467
1468 if (lo->lo_queue->limits.logical_block_size != arg) {
1469 sync_blockdev(lo->lo_device);
1470 kill_bdev(lo->lo_device);
1471 }
1472
1452 blk_mq_freeze_queue(lo->lo_queue);
1453
1473 blk_mq_freeze_queue(lo->lo_queue);
1474
1475 /* kill_bdev should have truncated all the pages */
1476 if (lo->lo_queue->limits.logical_block_size != arg &&
1477 lo->lo_device->bd_inode->i_mapping->nrpages) {
1478 err = -EAGAIN;
1479 pr_warn("%s: loop%d (%s) has still dirty pages (nrpages=%lu)\n",
1480 __func__, lo->lo_number, lo->lo_file_name,
1481 lo->lo_device->bd_inode->i_mapping->nrpages);
1482 goto out_unfreeze;
1483 }
1484
1454 blk_queue_logical_block_size(lo->lo_queue, arg);
1455 blk_queue_physical_block_size(lo->lo_queue, arg);
1456 blk_queue_io_min(lo->lo_queue, arg);
1457 loop_update_dio(lo);
1485 blk_queue_logical_block_size(lo->lo_queue, arg);
1486 blk_queue_physical_block_size(lo->lo_queue, arg);
1487 blk_queue_io_min(lo->lo_queue, arg);
1488 loop_update_dio(lo);
1458
1489out_unfreeze:
1459 blk_mq_unfreeze_queue(lo->lo_queue);
1460
1490 blk_mq_unfreeze_queue(lo->lo_queue);
1491
1461 return 0;
1492 return err;
1462}
1463
1464static int lo_simple_ioctl(struct loop_device *lo, unsigned int cmd,
1465 unsigned long arg)
1466{
1467 int err;
1468
1469 err = mutex_lock_killable(&loop_ctl_mutex);

--- 756 unchanged lines hidden ---
1493}
1494
1495static int lo_simple_ioctl(struct loop_device *lo, unsigned int cmd,
1496 unsigned long arg)
1497{
1498 int err;
1499
1500 err = mutex_lock_killable(&loop_ctl_mutex);

--- 756 unchanged lines hidden ---