loop.c (5c34202b8bf942da411b6599668a76b07449bbfd) loop.c (07002e995638b83a6987180f43722a0eb39d4932)
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 *

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

1312 err = -ENOIOCTLCMD;
1313 break;
1314 }
1315 unlock_kernel();
1316 return err;
1317}
1318#endif
1319
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 *

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

1312 err = -ENOIOCTLCMD;
1313 break;
1314 }
1315 unlock_kernel();
1316 return err;
1317}
1318#endif
1319
1320static struct loop_device *loop_find_dev(int number)
1321{
1322 struct loop_device *lo;
1323
1324 list_for_each_entry(lo, &loop_devices, lo_list) {
1325 if (lo->lo_number == number)
1326 return lo;
1327 }
1328 return NULL;
1329}
1330
1331static struct loop_device *loop_init_one(int i);
1332static int lo_open(struct inode *inode, struct file *file)
1333{
1334 struct loop_device *lo = inode->i_bdev->bd_disk->private_data;
1335
1336 mutex_lock(&lo->lo_ctl_mutex);
1337 lo->lo_refcnt++;
1338 mutex_unlock(&lo->lo_ctl_mutex);
1339
1320static int lo_open(struct inode *inode, struct file *file)
1321{
1322 struct loop_device *lo = inode->i_bdev->bd_disk->private_data;
1323
1324 mutex_lock(&lo->lo_ctl_mutex);
1325 lo->lo_refcnt++;
1326 mutex_unlock(&lo->lo_ctl_mutex);
1327
1340 mutex_lock(&loop_devices_mutex);
1341 if (!loop_find_dev(lo->lo_number + 1))
1342 loop_init_one(lo->lo_number + 1);
1343 mutex_unlock(&loop_devices_mutex);
1344
1345 return 0;
1346}
1347
1348static int lo_release(struct inode *inode, struct file *file)
1349{
1350 struct loop_device *lo = inode->i_bdev->bd_disk->private_data;
1351
1352 mutex_lock(&lo->lo_ctl_mutex);

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

1443 list_add_tail(&lo->lo_list, &loop_devices);
1444 return lo;
1445
1446out_free_queue:
1447 blk_cleanup_queue(lo->lo_queue);
1448out_free_dev:
1449 kfree(lo);
1450out:
1328 return 0;
1329}
1330
1331static int lo_release(struct inode *inode, struct file *file)
1332{
1333 struct loop_device *lo = inode->i_bdev->bd_disk->private_data;
1334
1335 mutex_lock(&lo->lo_ctl_mutex);

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

1426 list_add_tail(&lo->lo_list, &loop_devices);
1427 return lo;
1428
1429out_free_queue:
1430 blk_cleanup_queue(lo->lo_queue);
1431out_free_dev:
1432 kfree(lo);
1433out:
1451 return ERR_PTR(-ENOMEM);
1434 return NULL;
1452}
1453
1454static void loop_del_one(struct loop_device *lo)
1455{
1456 del_gendisk(lo->lo_disk);
1457 blk_cleanup_queue(lo->lo_queue);
1458 put_disk(lo->lo_disk);
1459 list_del(&lo->lo_list);
1460 kfree(lo);
1461}
1462
1435}
1436
1437static void loop_del_one(struct loop_device *lo)
1438{
1439 del_gendisk(lo->lo_disk);
1440 blk_cleanup_queue(lo->lo_queue);
1441 put_disk(lo->lo_disk);
1442 list_del(&lo->lo_list);
1443 kfree(lo);
1444}
1445
1446static int loop_lock(dev_t dev, void *data)
1447{
1448 mutex_lock(&loop_devices_mutex);
1449 return 0;
1450}
1451
1463static struct kobject *loop_probe(dev_t dev, int *part, void *data)
1464{
1452static struct kobject *loop_probe(dev_t dev, int *part, void *data)
1453{
1465 unsigned int number = dev & MINORMASK;
1466 struct loop_device *lo;
1454 struct loop_device *lo = loop_init_one(dev & MINORMASK);
1455 struct kobject *kobj;
1467
1456
1468 mutex_lock(&loop_devices_mutex);
1469 lo = loop_find_dev(number);
1470 if (lo == NULL)
1471 lo = loop_init_one(number);
1457 kobj = lo ? get_disk(lo->lo_disk) : ERR_PTR(-ENOMEM);
1472 mutex_unlock(&loop_devices_mutex);
1473
1474 *part = 0;
1458 mutex_unlock(&loop_devices_mutex);
1459
1460 *part = 0;
1475 if (IS_ERR(lo))
1476 return (void *)lo;
1477 else
1478 return &lo->lo_disk->kobj;
1461 return kobj;
1479}
1480
1481static int __init loop_init(void)
1482{
1462}
1463
1464static int __init loop_init(void)
1465{
1483 struct loop_device *lo;
1484
1485 if (register_blkdev(LOOP_MAJOR, "loop"))
1486 return -EIO;
1487 blk_register_region(MKDEV(LOOP_MAJOR, 0), 1UL << MINORBITS,
1466 if (register_blkdev(LOOP_MAJOR, "loop"))
1467 return -EIO;
1468 blk_register_region(MKDEV(LOOP_MAJOR, 0), 1UL << MINORBITS,
1488 THIS_MODULE, loop_probe, NULL, NULL);
1469 THIS_MODULE, loop_probe, loop_lock, NULL);
1489
1470
1490 lo = loop_init_one(0);
1491 if (IS_ERR(lo))
1492 goto out;
1493
1494 if (max_loop) {
1495 printk(KERN_INFO "loop: the max_loop option is obsolete "
1496 "and will be removed in March 2008\n");
1497
1498 }
1499 printk(KERN_INFO "loop: module loaded\n");
1500 return 0;
1471 if (max_loop) {
1472 printk(KERN_INFO "loop: the max_loop option is obsolete "
1473 "and will be removed in March 2008\n");
1474
1475 }
1476 printk(KERN_INFO "loop: module loaded\n");
1477 return 0;
1501
1502out:
1503 unregister_blkdev(LOOP_MAJOR, "loop");
1504 printk(KERN_ERR "loop: ran out of memory\n");
1505 return -ENOMEM;
1506}
1507
1508static void __exit loop_exit(void)
1509{
1510 struct loop_device *lo, *next;
1511
1512 list_for_each_entry_safe(lo, next, &loop_devices, lo_list)
1513 loop_del_one(lo);

--- 18 unchanged lines hidden ---
1478}
1479
1480static void __exit loop_exit(void)
1481{
1482 struct loop_device *lo, *next;
1483
1484 list_for_each_entry_safe(lo, next, &loop_devices, lo_list)
1485 loop_del_one(lo);

--- 18 unchanged lines hidden ---