[lvm-devel] master - activation: Remove empty DM device when table fails to load.
Zdenek Kabelac
zkabelac at redhat.com
Wed May 28 15:45:39 UTC 2014
Dne 28.5.2014 17:17, Jonathan Brassow napsal(a):
> Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=442820aae3648e1846417d1248fa36030eba4bd8
> Commit: 442820aae3648e1846417d1248fa36030eba4bd8
> Parent: 8212dac849e5a820c579c06a1b2805e7934a8d8b
> Author: Jonathan Brassow <jbrassow at redhat.com>
> AuthorDate: Wed May 28 10:17:15 2014 -0500
> Committer: Jonathan Brassow <jbrassow at redhat.com>
> CommitterDate: Wed May 28 10:17:15 2014 -0500
>
> activation: Remove empty DM device when table fails to load.
>
> As part of better error handling, remove DM devices that have been
> sucessfully created but failed to load a table. This can happen
> when pvmove'ing in a cluster and the cluster mirror daemon is not
> running on a remote node - the mapping table failing to load as a
> result. In this case, any revert would work on other nodes running
> cmirrord because the DM devices on those nodes did succeed in loading.
> However, because no table was able to load on the non-cmirrord nodes,
> there is no table present that points to what needs to be reverted.
> This causes the empty DM device to remain on the system without being
> present in any LVM representation.
>
> This patch should only be considered a partial fix to the overall
> problem. This is because only the device which failed to load a
> table is removed. Any LVs that may have been loaded as requirements
> to the DM device that failed to load may be left in place. Complete
> clean-up will require tracking those devices which have been created
> as dependencies and removing them along with the device that failed
> to load a table.
> ---
> libdm/libdm-deptree.c | 59 ++++++++++++++++++++++++++++++++++++++++++++-----
> 1 files changed, 53 insertions(+), 6 deletions(-)
>
> diff --git a/libdm/libdm-deptree.c b/libdm/libdm-deptree.c
> index 0a53755..f34c40f 100644
> --- a/libdm/libdm-deptree.c
> +++ b/libdm/libdm-deptree.c
> @@ -1920,15 +1920,50 @@ static int _create_node(struct dm_tree_node *dnode)
> if (!dm_task_no_open_count(dmt))
> log_error("Failed to disable open_count");
>
> - if ((r = dm_task_run(dmt)))
> - r = dm_task_get_info(dmt, &dnode->info);
> -
> + if ((r = dm_task_run(dmt))) {
> + if (!(r = dm_task_get_info(dmt, &dnode->info)))
> + /*
This is adding just another 'ioctl' on the path - IMHO this should be
removed.
Zdenek
More information about the lvm-devel
mailing list