[parted-devel] [PATCH 1/3] Remove loop_get_partition_range
Petr Uzel
petr.uzel at suse.cz
Fri Dec 2 09:07:14 UTC 2011
On Thu, Dec 01, 2011 at 04:28:10PM -0500, Phillip Susi wrote:
> Commit 1eb0cc30 added support for loop devices to be partitioned,
> but it only enabled that support if the kernel parameter max_part
> was non zero. This parameter just reserves minor numbers for
> partitions in the traditional sequence that hard disks used.
> When it is zero, it is still possible to add partitions, they
> just will get minor numbers from another pool. Removing this
> check allows partitions to be used on loop devices even when the
> loop module was not loaded with the max_part argument.
If you load loop module without max_part argument, the loop devices
will have their ext_range sysfs attributes == 1 (here on kernel-3.1),
so parted won't attempt to inform the kernel about the partitions. Do
I miss something?
>
> Signed-off-by: Phillip Susi <psusi at cfl.rr.com>
> ---
> libparted/arch/linux.c | 43 +++++--------------------------------------
> 1 files changed, 5 insertions(+), 38 deletions(-)
>
> diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c
> index 1da3343..aab2dd8 100644
> --- a/libparted/arch/linux.c
> +++ b/libparted/arch/linux.c
> @@ -2450,38 +2450,6 @@ _sysfs_int_entry_from_dev(PedDevice const* dev, const char *entry, int *val)
> return ok;
> }
>
> -/* Return the maximum number of partitions that the loopback device can hold.
> - First, check the loop-module-exported max_part parameter (since linux-3.0).
> - If that is not available, fall back to checking ext_range, which seems to
> - have (for some reason) different semantics compared to other devices;
> - specifically, ext_range <= 1 means that the loopback device does
> - not support partitions. */
> -static unsigned int
> -_loop_get_partition_range(PedDevice const* dev)
> -{
> - int max_part;
> - bool ok = false;
> -
> - /* max_part module param is exported since kernel 3.0 */
> - FILE *fp = fopen("/sys/module/loop/parameters/max_part", "r");
> - if (fp) {
> - ok = fscanf(fp, "%d", &max_part) == 1;
> - fclose(fp);
> - }
> -
> - if (ok)
> - return max_part > 0 ? max_part : 0;
> -
> - /*
> - * max_part is not exported - check ext_range;
> - * device supports partitions if ext_range > 1
> - */
> - int range;
> - ok = _sysfs_int_entry_from_dev(dev, "range", &range);
> -
> - return ok && range > 1 ? range : 0;
> -}
> -
> /*
> * The number of partitions that a device can have depends on the kernel.
> * If we don't find this value in /sys/block/DEV/ext_range, we will use our own
> @@ -2490,14 +2458,13 @@ _loop_get_partition_range(PedDevice const* dev)
> static unsigned int
> _device_get_partition_range(PedDevice const* dev)
> {
> - /* loop handling is special */
> - if (dev->type == PED_DEVICE_LOOP)
> - return _loop_get_partition_range(dev);
> -
> int range;
> bool ok = _sysfs_int_entry_from_dev(dev, "ext_range", &range);
> -
> - return ok && range > 0 ? range : MAX_NUM_PARTS;
> +
> + if (!ok)
> + return MAX_NUM_PARTS;
> + /* both 0 and 1 mean no partitions */
> + return range > 1 ? range : 0;
> }
>
> /*
> --
> 1.7.5.4
>
>
Petr
--
Petr Uzel
IRC: ptr_uzl @ freenode
More information about the parted-devel
mailing list