[parted-devel] [PATCH] fix handling of disks that can't be partitioned

Joel Granados jgranado at redhat.com
Mon Feb 9 16:13:29 UTC 2009


This is not necessary IMO.  parted (master) correctly creates a partition on a device (its a mapped device, but a device none the less).  additionally you can create a filesystem on top of this partition and mount it and use it as if it were a normal device.

If the issue is related to the partition being available after boot this might be an issue that is solvable with tools like mkinitrd where the partitions must be activated with commands like kpartx for them to be available as /home or swap or whatever.

Taking this into account, I don't think this patch is of any relevance

regards.
----- "Colin Watson" <cjwatson at ubuntu.com> wrote:

> Don't try to call BLKPG ioctls or tell device-mapper to create
> partitions on disks that can't be partitioned. This fixes the
> creation
> of bogus "/dev/mapper/vg-lvp1"-type devices for LVM logical volumes.
> 
> Signed-off-by: Colin Watson <cjwatson at ubuntu.com>
> 
> diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c
> index 83e24c8..a2af223 100644
> --- a/libparted/arch/linux.c
> +++ b/libparted/arch/linux.c
> @@ -2166,6 +2166,18 @@ linux_partition_is_busy (const PedPartition*
> part)
>  }
>  
>  static int
> +_has_partitions (const PedDisk* disk)
> +{
> +        PED_ASSERT(disk != NULL, return 0);
> +
> +        /* Some devices can't be partitioned. */
> +        if (!strcmp (disk->type->name, "loop"))
> +                return 0;
> +
> +        return 1;
> +}
> +
> +static int
>  _blkpg_part_command (PedDevice* dev, struct blkpg_partition* part,
> int op)
>  {
>          LinuxSpecific*          arch_specific = LINUX_SPECIFIC
> (dev);
> @@ -2190,6 +2202,9 @@ _blkpg_add_partition (PedDisk* disk, const
> PedPartition *part)
>          PED_ASSERT(disk->dev->sector_size % PED_SECTOR_SIZE_DEFAULT
> == 0,
>                     return 0);
>  
> +        if (!_has_partitions (disk))
> +                return 0;
> +
>          if (ped_disk_type_check_feature (disk->type,
>                                          
> PED_DISK_TYPE_PARTITION_NAME))
>                  vol_name = ped_partition_get_name (part);
> @@ -2238,6 +2253,9 @@ _blkpg_remove_partition (PedDisk* disk, int n)
>  {
>          struct blkpg_partition  linux_part;
>  
> +        if (!_has_partitions (disk))
> +                return 0;
> +
>          memset (&linux_part, 0, sizeof (linux_part));
>          linux_part.pno = n;
>          return _blkpg_part_command (disk->dev, &linux_part,
> @@ -2421,6 +2439,9 @@ _dm_add_partition (PedDisk* disk, PedPartition*
> part)
>          char*           dev_name = NULL;
>          char*           params = NULL;
>  
> +        if (!_has_partitions(disk))
> +                return 0;
> +
>          dev_name = _device_get_part_path (disk->dev, part->num);
>          if (!dev_name)
>                  return 0;
> 
> -- 
> Colin Watson                                      
> [cjwatson at ubuntu.com]
> 
> _______________________________________________
> parted-devel mailing list
> parted-devel at lists.alioth.debian.org
> http://lists.alioth.debian.org/mailman/listinfo/parted-devel

-- 
Joel Andres Granados
Red Hat / Brno Czech Republic



More information about the parted-devel mailing list