diff options
author | Zdenek Kabelac <zkabelac@redhat.com> | 2020-09-25 19:10:30 +0200 |
---|---|---|
committer | Zdenek Kabelac <zkabelac@redhat.com> | 2020-09-25 22:59:35 +0200 |
commit | 2bfa868f911b83f308c0fa3a09751f5b1cbddcfa (patch) | |
tree | 2f58f1b4c741ec02e75587fc64c4f12722d0206d | |
parent | 8b22e3808772601725c0e253f4aa5bed24905271 (diff) | |
download | lvm2-2bfa868f911b83f308c0fa3a09751f5b1cbddcfa.tar.gz |
device_mapper: enhance error message
-rw-r--r-- | device_mapper/libdm-deptree.c | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/device_mapper/libdm-deptree.c b/device_mapper/libdm-deptree.c index 653dd0959..a98b1fcdd 100644 --- a/device_mapper/libdm-deptree.c +++ b/device_mapper/libdm-deptree.c @@ -1589,8 +1589,37 @@ static int _thin_pool_node_message(struct dm_tree_node *dnode, struct thin_messa } if (!_node_message(dnode->info.major, dnode->info.minor, - tm->expected_errno, buf)) - return_0; + tm->expected_errno, buf)) { + switch (m->type) { + case DM_THIN_MESSAGE_CREATE_SNAP: + case DM_THIN_MESSAGE_CREATE_THIN: + if (errno == EEXIST) { + /* + * ATM errno from ioctl() is preserved through code error path chain + * If this would ever change, another way need to be used to + * obtain result from failed DM message + */ + log_error("Thin pool %s already contain thin device with device_id %u.", + _node_name(dnode), m->u.m_create_snap.device_id); + /* + * TODO: + * + * Give some useful advice how to solve this problem, + * until lvconvert --repair can handle this automatically + */ + log_error("Manual intervention may be required to remove device dev_id=%u in thin pool metadata.", + m->u.m_create_snap.device_id); + log_error("Optionally new thin volume with device_id=%u can be manually added into a volume group.", + m->u.m_create_snap.device_id); + log_warn("WARNING: When uncertain how to do this, contact support!"); + return 0; + } + /* fall through */ + default: + return_0; + } + + } return 1; } |