Horrid, Horrid! Handling of removable devices in Linux SUCKS! It's all just too complicated, with a mess of kernel, udev, hal, gnome-volume-manager, gnome-mount, cryptsetup... Lets have a single monolithic kernel-based routine for the whole lot! [Sorry, I just had to let off steam there, I have spent so many fruitless hours chasing this bug]. The following shows what happens when udev attempts to remove the device corresponding to /dev/mapper/temporary-cryptsetup-XXXX. I have added some extra info() calls to udevd to see the details. I list the entries in "/dev/mapper" at the beginning of udev_device_event. As you can see, apparently it has been asked to remove a device which does not exist (yet?) Therefore udev_device_event returns with an error code (-1), and as a result the remove event is not passed up to HAL and the stale device stays in the HAL database. Is it possible there is some kind of race condition here? The file /dev/mapper/temporary-cryptsetup-XXXX is created and then almost immediately destroyed, but I would have thought there should be some mechanism to ensure that the device node actually exists before the udev event is run? Perhaps this is in fact a kernel or a udev bug. Dec 3 14:57:18 pax udevd[2753]: udev_event_run: seq 2670 forked, pid [6052], 'remove' 'block', 0 seconds old Dec 3 14:57:18 pax udevd-event[6052]: udev_device_event: XXXX device node remove '/block/dm-0' Dec 3 14:57:18 pax udevd-event[6052]: udev_device_event: XXXX name='' Dec 3 14:57:18 pax udevd-event[6052]: udev_device_event: XXXX mapper entry 'control' OK Dec 3 14:57:18 pax udevd-event[6052]: udev_db_delete_device: XXXX udev_db_delete_device running for '/dev/.udev/db/\x2fblock\x2fdm-0' Dec 3 14:57:18 pax udevd-event[6052]: name_index: removing index: '/dev/.udev/names/mapper\x2ftemporary-cryptsetup-6028/\x2fblock\x2fdm-0' Dec 3 14:57:18 pax udevd-event[6052]: name_index: removing index: '/dev/.udev/names/disk\x2fby-id\x2fdm-name-temporary-cryptsetup-6028/\x2fblock\x2fdm-0' Dec 3 14:57:18 pax udevd-event[6052]: udev_db_delete_device: XXXX udev_db_delete_device finished for '/dev/.udev/db/\x2fblock\x2fdm-0' Dec 3 14:57:18 pax udevd-event[6052]: udev_node_remove: XXXX remove '/dev/mapper/temporary-cryptsetup-6028' Dec 3 14:57:18 pax udevd-event[6052]: udev_node_remove: XXXX device node '/dev/mapper/temporary-cryptsetup-6028' not found Dec 3 14:57:18 pax udevd-event[6052]: udev_device_event: XXXX udev_node_remove returned -1 Dec 3 14:57:18 pax udevd-event[6052]: udev_node_update_symlinks: update symlink 'disk/by-id/dm-name-temporary-cryptsetup-6028' of '/block/dm-0' Dec 3 14:57:18 pax udevd-event[6052]: udev_db_get_devices_by_name: no index directory '/dev/.udev/names/disk\x2fby-id\x2fdm-name-temporary-cryptsetup-6028': No such file or directory Dec 3 14:57:18 pax udevd-event[6052]: update_link: found -1 devices with name 'disk/by-id/dm-name-temporary-cryptsetup-6028' Dec 3 14:57:18 pax udevd-event[6052]: update_link: no reference left, remove 'disk/by-id/dm-name-temporary-cryptsetup-6028' Dec 3 14:57:18 pax udevd-event[6052]: udev_event_process: XXXX udev_device_event returned -1, ignore=0, run=1 Dec 3 14:57:18 pax udevd-event[6052]: udev_event_run: seq 2670 finished Dec 3 14:57:18 pax udevd[2753]: udev_done: seq 2670, pid [6052] exit with 1, 0 seconds old