aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKay Sievers <kay.sievers@vrfy.org>2011-07-31 16:08:04 -0400
committerJens Axboe <jaxboe@fusionio.com>2011-07-31 16:08:04 -0400
commitd134b00b9acca3fb054d7c88a5f5d562ecbb42d1 (patch)
treeccc63647ec8a551289f26866ec86091e44266bad
parent770fe30a46a12b6fb6b63fbe1737654d28e84844 (diff)
loop: add BLK_DEV_LOOP_MIN_COUNT=%i to allow distros 0 pre-allocated loop devices
Instead of unconditionally creating a fixed number of dead loop devices which need to be investigated by storage handling services, even when they are never used, we allow distros start with 0 loop devices and have losetup(8) and similar switch to the dynamic /dev/loop-control interface instead of searching /dev/loop%i for free devices. Signed-off-by: Kay Sievers <kay.sievers@vrfy.org> Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
-rw-r--r--Documentation/kernel-parameters.txt9
-rw-r--r--drivers/block/Kconfig15
-rw-r--r--drivers/block/loop.c27
3 files changed, 31 insertions, 20 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index 4ca93898fbd3..c32851131646 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -1340,9 +1340,12 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
1340 it is equivalent to "nosmp", which also disables 1340 it is equivalent to "nosmp", which also disables
1341 the IO APIC. 1341 the IO APIC.
1342 1342
1343 max_loop= [LOOP] Maximum number of loopback devices that can 1343 max_loop= [LOOP] The number of loop block devices that get
1344 be mounted 1344 (loop.max_loop) unconditionally pre-created at init time. The default
1345 Format: <1-256> 1345 number is configured by BLK_DEV_LOOP_MIN_COUNT. Instead
1346 of statically allocating a predefined number, loop
1347 devices can be requested on-demand with the
1348 /dev/loop-control interface.
1346 1349
1347 mcatest= [IA-64] 1350 mcatest= [IA-64]
1348 1351
diff --git a/drivers/block/Kconfig b/drivers/block/Kconfig
index 717d6e4e18d3..57212c5235e2 100644
--- a/drivers/block/Kconfig
+++ b/drivers/block/Kconfig
@@ -256,6 +256,21 @@ config BLK_DEV_LOOP
256 256
257 Most users will answer N here. 257 Most users will answer N here.
258 258
259config BLK_DEV_LOOP_MIN_COUNT
260 int "Number of loop devices to pre-create at init time"
261 depends on BLK_DEV_LOOP
262 default 8
263 help
264 Static number of loop devices to be unconditionally pre-created
265 at init time.
266
267 This default value can be overwritten on the kernel command
268 line or with module-parameter loop.max_loop.
269
270 The historic default is 8. If a late 2011 version of losetup(8)
271 is used, it can be set to 0, since needed loop devices can be
272 dynamically allocated with the /dev/loop-control interface.
273
259config BLK_DEV_CRYPTOLOOP 274config BLK_DEV_CRYPTOLOOP
260 tristate "Cryptoloop Support" 275 tristate "Cryptoloop Support"
261 select CRYPTO 276 select CRYPTO
diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index 5c9edf944879..3defc52f060c 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -1793,21 +1793,6 @@ static int __init loop_init(void)
1793 struct loop_device *lo; 1793 struct loop_device *lo;
1794 int err; 1794 int err;
1795 1795
1796 /*
1797 * loop module now has a feature to instantiate underlying device
1798 * structure on-demand, provided that there is an access dev node.
1799 * However, this will not work well with user space tool that doesn't
1800 * know about such "feature". In order to not break any existing
1801 * tool, we do the following:
1802 *
1803 * (1) if max_loop is specified, create that many upfront, and this
1804 * also becomes a hard limit.
1805 * (2) if max_loop is not specified, create 8 loop device on module
1806 * load, user can further extend loop device by create dev node
1807 * themselves and have kernel automatically instantiate actual
1808 * device on-demand.
1809 */
1810
1811 err = misc_register(&loop_misc); 1796 err = misc_register(&loop_misc);
1812 if (err < 0) 1797 if (err < 0)
1813 return err; 1798 return err;
@@ -1833,11 +1818,19 @@ static int __init loop_init(void)
1833 if (max_loop > 1UL << (MINORBITS - part_shift)) 1818 if (max_loop > 1UL << (MINORBITS - part_shift))
1834 return -EINVAL; 1819 return -EINVAL;
1835 1820
1821 /*
1822 * If max_loop is specified, create that many devices upfront.
1823 * This also becomes a hard limit. If max_loop is not specified,
1824 * create CONFIG_BLK_DEV_LOOP_MIN_COUNT loop devices at module
1825 * init time. Loop devices can be requested on-demand with the
1826 * /dev/loop-control interface, or be instantiated by accessing
1827 * a 'dead' device node.
1828 */
1836 if (max_loop) { 1829 if (max_loop) {
1837 nr = max_loop; 1830 nr = max_loop;
1838 range = max_loop << part_shift; 1831 range = max_loop << part_shift;
1839 } else { 1832 } else {
1840 nr = 8; 1833 nr = CONFIG_BLK_DEV_LOOP_MIN_COUNT;
1841 range = 1UL << MINORBITS; 1834 range = 1UL << MINORBITS;
1842 } 1835 }
1843 1836
@@ -1847,7 +1840,7 @@ static int __init loop_init(void)
1847 blk_register_region(MKDEV(LOOP_MAJOR, 0), range, 1840 blk_register_region(MKDEV(LOOP_MAJOR, 0), range,
1848 THIS_MODULE, loop_probe, NULL, NULL); 1841 THIS_MODULE, loop_probe, NULL, NULL);
1849 1842
1850 /* pre-create number devices of devices given by config or max_loop */ 1843 /* pre-create number of devices given by config or max_loop */
1851 mutex_lock(&loop_index_mutex); 1844 mutex_lock(&loop_index_mutex);
1852 for (i = 0; i < nr; i++) 1845 for (i = 0; i < nr; i++)
1853 loop_add(&lo, i); 1846 loop_add(&lo, i);