107 lines
3.8 KiB
Diff
107 lines
3.8 KiB
Diff
|
From df2b1555aff71452cde156badec70117065c9e2c Mon Sep 17 00:00:00 2001
|
||
|
From: David Teigland <teigland@redhat.com>
|
||
|
Date: Thu, 3 Feb 2022 16:56:03 -0600
|
||
|
Subject: [PATCH 31/54] lvmdevices: make deldev work for missing device
|
||
|
|
||
|
---
|
||
|
lib/device/device_id.c | 6 +++---
|
||
|
lib/device/device_id.h | 1 +
|
||
|
tools/lvmdevices.c | 33 ++++++++++++++++-----------------
|
||
|
3 files changed, 20 insertions(+), 20 deletions(-)
|
||
|
|
||
|
diff --git a/lib/device/device_id.c b/lib/device/device_id.c
|
||
|
index ccc5f43a1..aeaa1ffc6 100644
|
||
|
--- a/lib/device/device_id.c
|
||
|
+++ b/lib/device/device_id.c
|
||
|
@@ -894,7 +894,7 @@ struct dev_use *get_du_for_pvid(struct cmd_context *cmd, const char *pvid)
|
||
|
return NULL;
|
||
|
}
|
||
|
|
||
|
-static struct dev_use *_get_du_for_devname(struct cmd_context *cmd, const char *devname)
|
||
|
+struct dev_use *get_du_for_devname(struct cmd_context *cmd, const char *devname)
|
||
|
{
|
||
|
struct dev_use *du;
|
||
|
|
||
|
@@ -1093,7 +1093,7 @@ id_done:
|
||
|
du_pvid = get_du_for_pvid(cmd, pvid);
|
||
|
|
||
|
/* Is there already an entry using this device's name? */
|
||
|
- du_devname = _get_du_for_devname(cmd, dev_name(dev));
|
||
|
+ du_devname = get_du_for_devname(cmd, dev_name(dev));
|
||
|
|
||
|
/* Is there already an entry using the device_id for this device? */
|
||
|
du_devid = _get_du_for_device_id(cmd, id->idtype, id->idname);
|
||
|
@@ -1514,7 +1514,7 @@ int device_ids_match_dev(struct cmd_context *cmd, struct device *dev)
|
||
|
struct dev_use *du;
|
||
|
|
||
|
/* First check the du entry with matching devname since it's likely correct. */
|
||
|
- if ((du = _get_du_for_devname(cmd, dev_name(dev)))) {
|
||
|
+ if ((du = get_du_for_devname(cmd, dev_name(dev)))) {
|
||
|
if (_match_du_to_dev(cmd, du, dev))
|
||
|
return 1;
|
||
|
}
|
||
|
diff --git a/lib/device/device_id.h b/lib/device/device_id.h
|
||
|
index 4cf1374c8..2cd2fd7c6 100644
|
||
|
--- a/lib/device/device_id.h
|
||
|
+++ b/lib/device/device_id.h
|
||
|
@@ -40,6 +40,7 @@ void device_id_update_vg_uuid(struct cmd_context *cmd, struct volume_group *vg,
|
||
|
|
||
|
struct dev_use *get_du_for_dev(struct cmd_context *cmd, struct device *dev);
|
||
|
struct dev_use *get_du_for_pvid(struct cmd_context *cmd, const char *pvid);
|
||
|
+struct dev_use *get_du_for_devname(struct cmd_context *cmd, const char *devname);
|
||
|
|
||
|
char *devices_file_version(void);
|
||
|
int devices_file_exists(struct cmd_context *cmd);
|
||
|
diff --git a/tools/lvmdevices.c b/tools/lvmdevices.c
|
||
|
index c50c09f90..662b35f9a 100644
|
||
|
--- a/tools/lvmdevices.c
|
||
|
+++ b/tools/lvmdevices.c
|
||
|
@@ -383,28 +383,27 @@ int lvmdevices(struct cmd_context *cmd, int argc, char **argv)
|
||
|
* No filter because we always want to allow removing a device
|
||
|
* by name from the devices file.
|
||
|
*/
|
||
|
- if (!(dev = dev_cache_get(cmd, devname, NULL))) {
|
||
|
- log_error("No device found for %s.", devname);
|
||
|
- goto bad;
|
||
|
- }
|
||
|
-
|
||
|
- /*
|
||
|
- * dev_cache_scan uses sysfs to check if an LV is using each dev
|
||
|
- * and sets this flag is so.
|
||
|
- */
|
||
|
- if (dev_is_used_by_active_lv(cmd, dev, NULL, NULL, NULL, NULL)) {
|
||
|
- if (!arg_count(cmd, yes_ARG) &&
|
||
|
- yes_no_prompt("Device %s is used by an active LV, continue to remove? ", devname) == 'n') {
|
||
|
- log_error("Device not removed.");
|
||
|
- goto bad;
|
||
|
+ if ((dev = dev_cache_get(cmd, devname, NULL))) {
|
||
|
+ /*
|
||
|
+ * dev_cache_scan uses sysfs to check if an LV is using each dev
|
||
|
+ * and sets this flag is so.
|
||
|
+ */
|
||
|
+ if (dev_is_used_by_active_lv(cmd, dev, NULL, NULL, NULL, NULL)) {
|
||
|
+ if (!arg_count(cmd, yes_ARG) &&
|
||
|
+ yes_no_prompt("Device %s is used by an active LV, continue to remove? ", devname) == 'n') {
|
||
|
+ log_error("Device not removed.");
|
||
|
+ goto bad;
|
||
|
+ }
|
||
|
}
|
||
|
+ if ((du = get_du_for_dev(cmd, dev)))
|
||
|
+ goto dev_del;
|
||
|
}
|
||
|
|
||
|
- if (!(du = get_du_for_dev(cmd, dev))) {
|
||
|
- log_error("Device not found in devices file.");
|
||
|
+ if (!(du = get_du_for_devname(cmd, devname))) {
|
||
|
+ log_error("No devices file entry for %s.", devname);
|
||
|
goto bad;
|
||
|
}
|
||
|
-
|
||
|
+ dev_del:
|
||
|
dm_list_del(&du->list);
|
||
|
free_du(du);
|
||
|
device_ids_write(cmd);
|
||
|
--
|
||
|
2.34.3
|
||
|
|