From: Phillip Susi Date: Sat, 17 Dec 2011 03:40:04 +0000 (-0500) Subject: libparted: remove _loop_get_partition_range X-Git-Tag: android-x86-4.4-r1~70 X-Git-Url: http://git.osdn.net/view?p=android-x86%2Fexternal-parted.git;a=commitdiff_plain;h=11316315f99e61e875eef2964ae3b227a6088db1 libparted: remove _loop_get_partition_range 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. * libparted/arch/linux.c (_loop_get_partition_range): Remove function and all uses. --- diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c index 07fc97c..5c22276 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; } /*