[systemd-devel] udev removing and re-adding partition /dev entries after read-write open close of whole disk device
Mike Fleetwood
mike.fleetwood at googlemail.com
Fri Apr 8 18:25:32 UTC 2016
On 18 March 2016 at 17:43, Mike Fleetwood <mike.fleetwood at googlemail.com> wrote:
> Hi,
>
> I've noticed that since approximately udev version 219, opening a whole
> disk device entry read-write, then closing it triggers udev to remove
> and re-create all the partition /dev entries.
>
> Because of this GParted (graphical disk partitioning and file system
> manipulation tool) is sometimes failing. Before each change GParted is
> using libparted to re-read the partition table, which ends up triggering
> udev to re-create the partition /dev entries. Then GParted may go on to
> run a file system specific command such as an fsck, resize or similar on
> /dev/PTN. However this command sometimes fails reporting the /dev/PTN
> does not exist because udev is still in the middle of removing and
> re-adding the required /dev entry.
>
> Below is [1] a very simple test program and [2] an example failure.
>
> So that I can correctly make GParted handle this behaviour on existing
> distributions can you tell me what version introduced this behaviour
> (commit(s) would be great) and why? Also I assume that GParted should
> run "udevadm settle" to wait for the /dev partition entries to be
> re-created.
>
> Thanks,
> Mike
I was hoping for some feedback on this. Confirmation of the behaviour,
confirmation that udevadm settle is the correct workaround, udev
versions affected or similar.
Thanks,
Mike
> [1] test program
> /* gcc -o c-test-0005 c-test-0005.c */
>
> #include <sys/types.h>
> #include <sys/stat.h>
> #include <fcntl.h>
> #include <stdio.h>
> #include <stdlib.h>
> #include <unistd.h>
>
> int main(void)
> {
> int fd = open("/dev/sdc", O_RDWR);
> close(fd);
>
> char * const cmd[] = {"e2fsck", "-f", "-y", "-v", "-C", "0",
> "/dev/sdc3", NULL};
> execvp("e2fsck", cmd);
> return EXIT_SUCCESS;
> }
>
> [2] example failure
> # udevadm monitor &
> ...
> # c-test-0005
> KERNEL[8995.600483] remove
> /devices/pci0000:00/0000:00:0d.0/ata5/host4/target4:0:0/4:0:0:0/block/sdc/sdc1
> (block)
> e2fsck 1.42.9 (28-Dec-2013)
> KERNEL[8995.606149] remove
> /devices/pci0000:00/0000:00:0d.0/ata5/host4/target4:0:0/4:0:0:0/block/sdc/sdc2
> (block)
> KERNEL[8995.606498] remove
> /devices/pci0000:00/0000:00:0d.0/ata5/host4/target4:0:0/4:0:0:0/block/sdc/sdc3
> (block)
> e2fsck: No such file or directory while trying to open /dev/sdc3
> Possibly non-existent device?
> KERNEL[8995.609880] change
> /devices/pci0000:00/0000:00:0d.0/ata5/host4/target4:0:0/4:0:0:0/block/sdc
> (block)
> KERNEL[8995.610850] add
> /devices/pci0000:00/0000:00:0d.0/ata5/host4/target4:0:0/4:0:0:0/block/sdc/sdc1
> (block)
> KERNEL[8995.611091] add
> /devices/pci0000:00/0000:00:0d.0/ata5/host4/target4:0:0/4:0:0:0/block/sdc/sdc2
> (block)
> KERNEL[8995.614083] add
> /devices/pci0000:00/0000:00:0d.0/ata5/host4/target4:0:0/4:0:0:0/block/sdc/sdc3
> (block)
> UDEV [8995.631253] remove
> /devices/pci0000:00/0000:00:0d.0/ata5/host4/target4:0:0/4:0:0:0/block/sdc/sdc2
> (block)
> UDEV [8995.638997] remove
> /devices/pci0000:00/0000:00:0d.0/ata5/host4/target4:0:0/4:0:0:0/block/sdc/sdc1
> (block)
> UDEV [8995.642246] remove
> /devices/pci0000:00/0000:00:0d.0/ata5/host4/target4:0:0/4:0:0:0/block/sdc/sdc3
> (block)
> UDEV [8995.687918] change
> /devices/pci0000:00/0000:00:0d.0/ata5/host4/target4:0:0/4:0:0:0/block/sdc
> (block)
> UDEV [8995.726753] add
> /devices/pci0000:00/0000:00:0d.0/ata5/host4/target4:0:0/4:0:0:0/block/sdc/sdc3
> (block)
> UDEV [8995.749604] add
> /devices/pci0000:00/0000:00:0d.0/ata5/host4/target4:0:0/4:0:0:0/block/sdc/sdc2
> (block)
> UDEV [8995.773355] add
> /devices/pci0000:00/0000:00:0d.0/ata5/host4/target4:0:0/4:0:0:0/block/sdc/sdc1
> (block)
More information about the systemd-devel
mailing list