[parted-devel] [PATCH 1/5] Remove loop_get_partition_range

Phillip Susi psusi at cfl.rr.com
Sat Dec 17 03:40:04 UTC 2011


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.

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 e7166a8..1a532e0 100644
--- a/libparted/arch/linux.c
+++ b/libparted/arch/linux.c
@@ -2449,38 +2449,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
@@ -2489,14 +2457,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




More information about the parted-devel mailing list