[Parted-commits] GNU Parted Official Repository: Changes to 'master'
Jim Meyering
meyering at alioth.debian.org
Fri Apr 23 16:01:20 UTC 2010
NEWS | 3 +++
libparted/arch/linux.c | 19 +++++--------------
2 files changed, 8 insertions(+), 14 deletions(-)
New commits:
commit c605b2cea04a6c7478f5ed1254c74e02d943fb58
Author: Hans de Goede <hdegoede at redhat.com>
Date: Fri Apr 23 13:08:43 2010 +0200
linux: detect dm_task_run failure
We were checking for a return value of < 0 for dm_task_run errors, but
dm_task_run returns 0 on error (and 1 on success). Thanks to Joe Jin
for spotting this, see Red Hat bug 582907.
* libparted/arch/linux.c(_dm_remove_map_name, _dm_is_part,
_dm_remove_parts, _dm_add_partition): dm_task_run returns 0 on error.
diff --git a/NEWS b/NEWS
index c5c2182..9836738 100644
--- a/NEWS
+++ b/NEWS
@@ -23,6 +23,9 @@ GNU parted NEWS -*- outline -*-
libparted uses a more accurate heuristic to distinguish between
ext4 and ext3 partitions.
+ libparted now properly checks the return value of dm_task_run when
+ operating on devicemapper devices.
+
** Changes in behavior
libparted no longer issues an exception/warning about >512-byte
diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c
index 85cf813..d7ec2e4 100644
--- a/libparted/arch/linux.c
+++ b/libparted/arch/linux.c
@@ -2321,7 +2321,7 @@ _dm_remove_map_name(char *name)
rc = dm_task_run(task);
dm_task_update_nodes();
dm_task_destroy(task);
- if (rc < 0)
+ if (!rc)
return 1;
return 0;
@@ -2341,12 +2341,8 @@ _dm_is_part (struct dm_info *this, char *name)
return 0;
dm_task_set_name(task, name);
- rc = dm_task_run(task);
- if (rc < 0) {
- rc = 0;
+ if (!dm_task_run(task))
goto err;
- }
- rc = 0;
memset(info, '\0', sizeof *info);
dm_task_get_info(task, info);
@@ -2357,7 +2353,6 @@ _dm_is_part (struct dm_info *this, char *name)
if (!deps)
goto err;
- rc = 0;
for (i = 0; i < deps->count; i++) {
unsigned int ma = major(deps->device[i]),
mi = minor(deps->device[i]);
@@ -2389,8 +2384,7 @@ _dm_remove_parts (PedDevice* dev)
arch_specific->minor, 0))
goto err;
- rc = dm_task_run(task);
- if (rc < 0)
+ if (!dm_task_run(task))
goto err;
memset(info, '\0', sizeof *info);
@@ -2432,7 +2426,6 @@ err:
static int
_dm_add_partition (PedDisk* disk, PedPartition* part)
{
- int rc;
char* vol_name = NULL;
const char* dev_name = NULL;
char* params = NULL;
@@ -2450,8 +2443,7 @@ _dm_add_partition (PedDisk* disk, PedPartition* part)
arch_specific->minor, 0))
goto err;
- rc = dm_task_run(task);
- if (rc < 0)
+ if (!dm_task_run(task))
goto err;
dev_name = dm_task_get_name (task);
@@ -2474,8 +2466,7 @@ _dm_add_partition (PedDisk* disk, PedPartition* part)
dm_task_set_name (task, vol_name);
dm_task_add_target (task, 0, part->geom.length,
"linear", params);
- rc = dm_task_run (task);
- if (rc >= 0) {
+ if (dm_task_run (task)) {
//printf("0 %ld linear %s\n", part->geom.length, params);
dm_task_update_nodes();
dm_task_destroy(task);
More information about the Parted-commits
mailing list