loop.c (2e5ab5f379f96a6207c45be40c357ebb1beb8ef3) loop.c (ab1cb278bc7027663adbfb0b81404f8398437e11)
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 *

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

1223static int loop_set_capacity(struct loop_device *lo, struct block_device *bdev)
1224{
1225 if (unlikely(lo->lo_state != Lo_bound))
1226 return -ENXIO;
1227
1228 return figure_loop_size(lo, lo->lo_offset, lo->lo_sizelimit);
1229}
1230
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 *

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

1223static int loop_set_capacity(struct loop_device *lo, struct block_device *bdev)
1224{
1225 if (unlikely(lo->lo_state != Lo_bound))
1226 return -ENXIO;
1227
1228 return figure_loop_size(lo, lo->lo_offset, lo->lo_sizelimit);
1229}
1230
1231static int loop_set_dio(struct loop_device *lo, unsigned long arg)
1232{
1233 int error = -ENXIO;
1234 if (lo->lo_state != Lo_bound)
1235 goto out;
1236
1237 __loop_update_dio(lo, !!arg);
1238 if (lo->use_dio == !!arg)
1239 return 0;
1240 error = -EINVAL;
1241 out:
1242 return error;
1243}
1244
1231static int lo_ioctl(struct block_device *bdev, fmode_t mode,
1232 unsigned int cmd, unsigned long arg)
1233{
1234 struct loop_device *lo = bdev->bd_disk->private_data;
1235 int err;
1236
1237 mutex_lock_nested(&lo->lo_ctl_mutex, 1);
1238 switch (cmd) {

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

1266 case LOOP_GET_STATUS64:
1267 err = loop_get_status64(lo, (struct loop_info64 __user *) arg);
1268 break;
1269 case LOOP_SET_CAPACITY:
1270 err = -EPERM;
1271 if ((mode & FMODE_WRITE) || capable(CAP_SYS_ADMIN))
1272 err = loop_set_capacity(lo, bdev);
1273 break;
1245static int lo_ioctl(struct block_device *bdev, fmode_t mode,
1246 unsigned int cmd, unsigned long arg)
1247{
1248 struct loop_device *lo = bdev->bd_disk->private_data;
1249 int err;
1250
1251 mutex_lock_nested(&lo->lo_ctl_mutex, 1);
1252 switch (cmd) {

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

1280 case LOOP_GET_STATUS64:
1281 err = loop_get_status64(lo, (struct loop_info64 __user *) arg);
1282 break;
1283 case LOOP_SET_CAPACITY:
1284 err = -EPERM;
1285 if ((mode & FMODE_WRITE) || capable(CAP_SYS_ADMIN))
1286 err = loop_set_capacity(lo, bdev);
1287 break;
1288 case LOOP_SET_DIRECT_IO:
1289 err = -EPERM;
1290 if ((mode & FMODE_WRITE) || capable(CAP_SYS_ADMIN))
1291 err = loop_set_dio(lo, arg);
1292 break;
1274 default:
1275 err = lo->ioctl ? lo->ioctl(lo, cmd, arg) : -EINVAL;
1276 }
1277 mutex_unlock(&lo->lo_ctl_mutex);
1278
1279out_unlocked:
1280 return err;
1281}

--- 662 unchanged lines hidden ---
1293 default:
1294 err = lo->ioctl ? lo->ioctl(lo, cmd, arg) : -EINVAL;
1295 }
1296 mutex_unlock(&lo->lo_ctl_mutex);
1297
1298out_unlocked:
1299 return err;
1300}

--- 662 unchanged lines hidden ---