From: Phillip Susi <[email protected]> Description: All partitions on dmraid disks and partition numbers >= 16 on regular scsi disks were not being detected as in use. This was because assumptions were being made about the dev node major/minor numbers and how they relate to the partition number. These assumptions break entirely on dmraid devices, and on normal disks with >= 16 partitions. Removed _partition_get_part_dev() and rewrote _partition_is_mounted() to use _partition_is_mounted_by_path() instead of _by_dev. Forwarded: yes Last-Update: 2011-05-04
Index: b/libparted/arch/linux.c
===================================================================
--- a/libparted/arch/linux.c
+++ b/libparted/arch/linux.c
@@ -2229,19 +2229,6 @@
return _device_get_part_path (part->disk->dev, part->num);
}
-static dev_t
-_partition_get_part_dev (const PedPartition* part)
-{
- struct stat dev_stat;
- int dev_major, dev_minor;
-
- if (stat (part->disk->dev->path, &dev_stat))
- return (dev_t)0;
- dev_major = major (dev_stat.st_rdev);
- dev_minor = minor (dev_stat.st_rdev);
- return (dev_t)makedev (dev_major, dev_minor + part->num);
-}
-
static int
_mount_table_search (const char* file_name, dev_t dev)
{
@@ -2288,13 +2275,18 @@
static int
_partition_is_mounted (const PedPartition *part)
{
- dev_t dev;
+ char *part_name;
+ int status;
if (!ped_partition_is_active (part))
return 0;
- dev = _partition_get_part_dev (part);
- if (!dev)
- return 0;
- return _partition_is_mounted_by_dev (dev);
+ part_name = _device_get_part_path (part->disk->dev, part->num);
+ if (!part_name)
+ return 1;
+ status = _partition_is_mounted_by_path (part_name);
+ free (part_name);
+ if (status)
+ return 1;
+ return 0;
}
static int
signature.asc
Description: OpenPGP digital signature
_______________________________________________ parted-devel mailing list [email protected] http://lists.alioth.debian.org/mailman/listinfo/parted-devel

