diff -up parted-1.9.0/libparted/disk.c~ parted-1.9.0/libparted/disk.c --- parted-1.9.0/libparted/disk.c~ 2009-08-26 10:36:06.000000000 +0200 +++ parted-1.9.0/libparted/disk.c 2009-08-26 13:55:57.000000000 +0200 @@ -513,9 +513,25 @@ error: int ped_disk_commit (PedDisk* disk) { + /* Open the device here, so that the underlying fd is not closed + between commit_to_dev and commit_to_os (closing causes unwanted + udev events to be send under Linux). */ + if (!ped_device_open (disk->dev)) + goto error; + if (!ped_disk_commit_to_dev (disk)) - return 0; - return ped_disk_commit_to_os (disk); + goto error_close_dev; + + if (!ped_disk_commit_to_os (disk)) + goto error_close_dev; + + ped_device_close (disk->dev); + return 1; + +error_close_dev: + ped_device_close (disk->dev); +error: + return 0; } /**