From 687603a14449c661d141def9cbef1984211925c4 Mon Sep 17 00:00:00 2001 From: Alasdair Kergon Date: Wed, 7 Apr 2010 20:04:41 +0000 Subject: [PATCH] Fix incorrect removal of symlinks after LV deactivation fails. --- WHATS_NEW | 1 + WHATS_NEW_DM | 3 ++- lib/activate/dev_manager.c | 2 -- libdm/libdm-deptree.c | 7 ++++++- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/WHATS_NEW b/WHATS_NEW index 646cdbbfd..bfa1df0d5 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,5 +1,6 @@ Version 2.02.63 - ================================ + Fix incorrect removal of symlinks after LV deactivation fails. Fix is_partitioned_dev not to attempt to reopen device. Fix another thread race in clvmd. Refactor management of vg->pvs list. diff --git a/WHATS_NEW_DM b/WHATS_NEW_DM index 7b5d0a4c3..6142ae0ad 100644 --- a/WHATS_NEW_DM +++ b/WHATS_NEW_DM @@ -1,6 +1,7 @@ Version 1.02.46 - ================================ - Wipe memory buffers for dm-ioctl parameters before releaseing. + Change dm_tree_deactivate_children to fail if device is open. + Wipe memory buffers for dm-ioctl parameters before releasing. Strictly require libudev if udev_sync is used. Add support for ioctl's DM_UEVENT_GENERATED_FLAG. diff --git a/lib/activate/dev_manager.c b/lib/activate/dev_manager.c index 5c5bc440f..dcd5000b8 100644 --- a/lib/activate/dev_manager.c +++ b/lib/activate/dev_manager.c @@ -1523,8 +1523,6 @@ int dev_manager_deactivate(struct dev_manager *dm, struct logical_volume *lv) r = _tree_action(dm, lv, DEACTIVATE); - fs_del_lv(lv); - return r; } diff --git a/libdm/libdm-deptree.c b/libdm/libdm-deptree.c index fd3a12813..02ab39e75 100644 --- a/libdm/libdm-deptree.c +++ b/libdm/libdm-deptree.c @@ -1047,9 +1047,14 @@ int dm_tree_deactivate_children(struct dm_tree_node *dnode, /* Refresh open_count */ if (!_info_by_dev(dinfo->major, dinfo->minor, 1, &info) || - !info.exists || info.open_count) + !info.exists) continue; + if (info.open_count) { + r = 0; + continue; + } + if (!_deactivate_node(name, info.major, info.minor, &child->dtree->cookie, child->udev_flags)) { log_error("Unable to deactivate %s (%" PRIu32 -- 2.43.5