loop: export module parameters
PATCH 1/1 loop: export module parameters
Export 'max_loop' and 'max_part' parameters to sysfs so user can know that how many devices are allowed and how many partitions are supported.
If 'max_loop' is 0, there is no restriction on the number of loop devices. User can create/use the devices as many as minor numbers available. If 'max_part' is 0, it means simply the device doesn't support partitioning.
Also note that 'max_part' can be adjusted to power of 2 minus 1 form if needed. User should check this value after the module loading if he/she want to use that number correctly (i.e. fdisk, mknod, etc.).
--- drivers/block/loop.c | 17 ++++++++++++++--- 1 files changed, 14 insertions(+), 3 deletions(-)
drivers/block/loop.c +14 -3
@@ -1540,9 +1540,9 @@ static const struct block_device_operations lo_fops = {* And now the modules code and kernel interface. */ static int max_loop; -module_param (max_loop, int,0 ); +module_param (max_loop, int,S_IRUGO );MODULE_PARM_DESC (max_loop,"Maximum number of loop devices" ); -module_param (max_part, int,0 ); +module_param (max_part, int,S_IRUGO );MODULE_PARM_DESC (max_part,"Maximum number of partitions per loop device" );MODULE_LICENSE ("GPL" );MODULE_ALIAS_BLOCKDEV_MAJOR (LOOP_MAJOR );
@@ -1688,9 +1688,20 @@ static int __init loop_init(void)*/ part_shift =0 ; -if (max_part >0 ) +if (max_part >0 ) { part_shift =fls (max_part); +/* +* Adjust max_part according to part_shift as it is exported +* to user space so that user can decide correct minor number +* if [s]he want to create more devices. +* +* Note that -1 is required because partition 0 is reserved +* for the whole disk. +*/ + max_part = (1UL << part_shift) -1 ; + } +if ((1UL << part_shift) >DISK_MAX_PARTS )return -EINVAL ;
Signature · 1 line
1.7.5.2
2011-05-25 (수), 14:44 +0900, Namhyung Kim:
Quoted 45 lines
Export '
max_loop' and 'max_part' parameters to sysfs so user can know that how many devices are allowed and how many partitions are supported.If '
max_loop' is 0, there is no restriction on the number of loop devices. User can create/use the devices as many as minor numbers available. If 'max_part' is 0, it means simply the device doesn't support partitioning.Also note that '
max_part' can be adjusted to power of 2 minus 1 form if needed. User should check this value after the module loading if he/she want to use that number correctly (i.e. fdisk, mknod, etc.).Signed-off-by Namhyung Kim <[email protected]>Cc Laurent Vivier <[email protected]>--- drivers/block/loop.c | 17 ++++++++++++++--- 1 files changed, 14 insertions(+), 3 deletions(-)drivers/block/loop.c +7
-3@@ -1540,9 +1540,9 @@ static const struct block_device_operations lo_fops = {* And now the modules code and kernel interface. */ static int max_loop; -module_param (max_loop, int,0 ); +module_param (max_loop, int,S_IRUGO );MODULE_PARM_DESC (max_loop,"Maximum number of loop devices" ); -module_param (max_part, int,0 ); +module_param (max_part, int,S_IRUGO );MODULE_PARM_DESC (max_part,"Maximum number of partitions per loop device" );MODULE_LICENSE ("GPL" );MODULE_ALIAS_BLOCKDEV_MAJOR (LOOP_MAJOR );@@ -1688,9 +1688,20 @@ static int __init loop_init(void)*/ part_shift =0 ; -if (max_part >0 ) +if (max_part >0 ) { part_shift =fls (max_part); +/* +* Adjust max_part according to part_shift as it is exported +* to user space so that user can decide correct minor number +* if [s]he want to create more devices.
drivers/block/loop.c static int __init loop_init(void) · line 1707
Quoted 10 lines
drivers/block/loop.c +7
-0+* +* Note that -1 is required because partition 0 is reserved +* for the whole disk. +*/ + max_part = (1UL << part_shift) -1 ; + } +if ((1UL << part_shift) >DISK_MAX_PARTS )return -EINVAL ;
Hi Jens,
Could you please consider applying this in your tree too? It's exactly the same thing what I did for brd series.
Thanks.
Signature · 2 lines
Regards, Namhyung Kim
Quoted 59 lines · Namhyung Kim
2011-05-25 (수), 14:44 +0900, Namhyung Kim:
Quoted 45 lines
Export '
max_loop' and 'max_part' parameters to sysfs so user can know that how many devices are allowed and how many partitions are supported.If '
max_loop' is 0, there is no restriction on the number of loop devices. User can create/use the devices as many as minor numbers available. If 'max_part' is 0, it means simply the device doesn't support partitioning.Also note that '
max_part' can be adjusted to power of 2 minus 1 form if needed. User should check this value after the module loading if he/she want to use that number correctly (i.e. fdisk, mknod, etc.).Signed-off-by Namhyung Kim <[email protected]>Cc Laurent Vivier <[email protected]>--- drivers/block/loop.c | 17 ++++++++++++++--- 1 files changed, 14 insertions(+), 3 deletions(-)drivers/block/loop.c +7
-3@@ -1540,9 +1540,9 @@ static const struct block_device_operations lo_fops = {* And now the modules code and kernel interface. */ static int max_loop; -module_param (max_loop, int,0 ); +module_param (max_loop, int,S_IRUGO );MODULE_PARM_DESC (max_loop,"Maximum number of loop devices" ); -module_param (max_part, int,0 ); +module_param (max_part, int,S_IRUGO );MODULE_PARM_DESC (max_part,"Maximum number of partitions per loop device" );MODULE_LICENSE ("GPL" );MODULE_ALIAS_BLOCKDEV_MAJOR (LOOP_MAJOR );@@ -1688,9 +1688,20 @@ static int __init loop_init(void)*/ part_shift =0 ; -if (max_part >0 ) +if (max_part >0 ) { part_shift =fls (max_part); +/* +* Adjust max_part according to part_shift as it is exported +* to user space so that user can decide correct minor number +* if [s]he want to create more devices. drivers/block/loop.c static int __init loop_init(void) · line 1707
Quoted 10 lines
drivers/block/loop.c +7
-0+* +* Note that -1 is required because partition 0 is reserved +* for the whole disk. +*/ + max_part = (1UL << part_shift) -1 ; + } +if ((1UL << part_shift) >DISK_MAX_PARTS )return -EINVAL ;Hi Jens,
Quoted 2 lines
Could you please consider applying this in your tree too? It's exactly the same thing what I did for brd series.
Applied now, missed it yesterday. Thanks!
Signature · 1 line
Jens Axboe