[Parted-maintainers] Bug#684713: support for partitioned linux md devices

Miquel van Smoorenburg miquels at debian.org
Fri Aug 24 12:21:02 UTC 2012


Package: parted
Version: 2.3-10
Severity: serious
Tags: patch wheezy sid

Background: I have added support to the debian installer for 
installation on Intel Matrix Raid (imsm) arrays as supported by mdadm 
(I'll be submitting patches to debian-boot soon).

When installing on such an array, partitions are created directly on the 
array (e.g. /dev/md0). Before kernel 2.6.28, partitionable md arrays 
were seperate from 'normal' md arrays (different dev_t's), but since 
2.6.28 that has been consolidated.

At the same time a new sysfs key that indicates the max number of 
partitions has been introduced- the old key is called "range" and for md 
devices is always set to "1". The new key is called "ext_range" and 
contains the correct value. libparted should use the new key, otherwise 
it cannot partition md devices.

Upstream has already changed to use the "ext_range" key instead of "range":

 
http://anonscm.debian.org/gitweb/?p=parted/parted.git;a=commitdiff;h=ca97da905bd21f2a4371f4717f7c46a936af6b2c

commit ca97da905bd21f2a4371f4717f7c46a936af6b2c
Author: Petr Uzel <petr.uzel at suse.cz>
Date:   Sat Nov 26 15:45:08 2011 +0100

     libparted: use ext_range to find out largest possible partition

     Parted uses /sys/block/DEV/range file to find out how many partitions
     can the blockdevice hold and uses this number in its algorithm
     for informing the kernel about modified partitions. This works
     fine for most devices, however, it fails on partitionable MD arrays,
     because these have 1 in range file. Using ext_range should be safer
     and work for all devices.

     * libparted/arch/linux.c (_device_get_partition_range): Use
     /sys/block/DEV/ext_range instead of range sysfs file
     * NEWS: Mention the change.

     Addresses: http://bugzilla.novell.com/567652

Attached is a backport of the patch to the version in wheezy/unstable.

Please consider this patch for wheezy.

Suggested changelog entry:

   * backport md-partitions.patch: libparted/arch/linux.c
     (_device_get_partition_range): Use /sys/block/DEV/ext_range instead
     of range sysfs file
-------------- next part --------------

    http://anonscm.debian.org/gitweb/?p=parted/parted.git;a=commitdiff;h=ca97da905bd21f2a4371f4717f7c46a936af6b2c

commit ca97da905bd21f2a4371f4717f7c46a936af6b2c
Author: Petr Uzel <petr.uzel at suse.cz>
Date:   Sat Nov 26 15:45:08 2011 +0100

    libparted: use ext_range to find out largest possible partition

    Parted uses /sys/block/DEV/range file to find out how many partitions
    can the blockdevice hold and uses this number in its algorithm
    for informing the kernel about modified partitions. This works
    fine for most devices, however, it fails on partitionable MD arrays,
    because these have 1 in range file. Using ext_range should be safer
    and work for all devices.

    * libparted/arch/linux.c (_device_get_partition_range): Use
    /sys/block/DEV/ext_range instead of range sysfs file

    Addresses: http://bugzilla.novell.com/567652

diff -u a/libparted/arch/linux.c b/libparted/arch/linux.c
--- a/libparted/arch/linux.c	2012-08-24 12:06:18.000000000 +0000
+++ b/libparted/arch/linux.c	2012-08-24 12:10:31.176877539 +0000
@@ -2403,7 +2403,7 @@
 
 /*
  * The number of partitions that a device can have depends on the kernel.
- * If we don't find this value in /sys/block/DEV/range, we will use our own
+ * If we don't find this value in /sys/block/DEV/ext_range, we will use our own
  * value.
  */
 static unsigned int
@@ -2414,7 +2414,7 @@
         FILE*       fp;
         bool        ok;
 
-        r = snprintf(path, sizeof(path), "/sys/block/%s/range",
+        r = snprintf(path, sizeof(path), "/sys/block/%s/ext_range",
                      last_component(dev->path));
         if (r < 0 || r >= sizeof(path))
                 return MAX_NUM_PARTS;


More information about the Parted-maintainers mailing list