Jim Meyering wrote:

> Petr Uzel wrote:
>> When partprobe does not detect any partition table on the device,
>> it should tell kernel to drop partitions on that device, but it
>> does not. Fix it.
>>
>> * parted/partprobe.c (process_dev): Drop partitions even if no
>> partition table has been detected on the disk.
>>
>> Addresses: https://bugzilla.novell.com/783419
>>
>> Signed-off-by: Petr Uzel <[email protected]>
>
> Thanks for the patch.
> I appreciate the BZ reference.
> Normally I would require a test case addition, but
> since this is partprobe (which these days is rarely needed)
> it's probably not worth the trouble.
>
> I like the separate summary and ChangeLog entry, but found the
> ChangeLog entry to be a near duplicate of the summary, so converted
> it to be a little more implementation-related.
>
> Subject: [PATCH] partprobe: remove partitions when there is no PT
>
> When partprobe detects no partition table on a device, it should
> tell the kernel to drop partitions on that device, but it did not.
> * parted/partprobe.c (process_dev): When ped_disk_probe fails,
> create a dummy (empty) partition table and use that.
> Addresses: https://bugzilla.novell.com/783419

Oh!  I nearly forgot: your commit fixes a bug, so it must have a NEWS entry.
I've just added one for you and adjusted the log.  I also changed
the one-line subject s/PT/partition table/.


>From 2d763bff3f873f5714345d5c2a1b37456b6c5801 Mon Sep 17 00:00:00 2001
From: Petr Uzel <[email protected]>
Date: Mon, 15 Oct 2012 10:31:52 +0200
Subject: [PATCH] partprobe: remove partitions when there is no partition
 table

When partprobe detects no partition table on a device, it should
tell the kernel to drop partitions on that device, but it did not.
* parted/partprobe.c (process_dev): When ped_disk_probe fails,
create a dummy (empty) partition table and use that.
* NEWS (Bug fixes): Mention it.
Addresses: https://bugzilla.novell.com/783419
---
 partprobe/partprobe.c | 21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

diff --git a/partprobe/partprobe.c b/partprobe/partprobe.c
index b8dca5e..0919d3f 100644
--- a/partprobe/partprobe.c
+++ b/partprobe/partprobe.c
@@ -106,12 +106,23 @@ process_dev (PedDevice* dev)
        PedDisk*        disk;

        disk_type = ped_disk_probe (dev);
-       if (!disk_type || !strcmp (disk_type->name, "loop"))
+       if (disk_type && !strcmp (disk_type->name, "loop"))
                return 1;
-
-       disk = ped_disk_new (dev);
-       if (!disk)
-               goto error;
+       else if (!disk_type) {
+               /* Partition table not found, so create dummy,
+                  empty one */
+               disk_type = ped_disk_type_get("msdos");
+               if (!disk_type)
+                       goto error;
+
+               disk = ped_disk_new_fresh (dev, disk_type);
+               if (!disk)
+                       goto error_destroy_disk;
+       } else {
+               disk = ped_disk_new (dev);
+               if (!disk)
+                       goto error;
+       }
        if (!opt_no_inform) {
                if (!ped_disk_commit_to_os (disk))
                        goto error_destroy_disk;
--
1.8.0.rc2

Reply via email to