summaryrefslogtreecommitdiff
path: root/lib/device
diff options
context:
space:
mode:
authorDavid Teigland <teigland@redhat.com>2023-01-30 17:12:11 -0600
committerDavid Teigland <teigland@redhat.com>2023-01-30 17:12:11 -0600
commitd9f8acb65a78c20ac806efaeb7a1e39208e1a443 (patch)
treecadd4d6761c72deb3ba7c83d7e2a01e0458da1c9 /lib/device
parent5374a44c57127cdd832a675545c1d2bbf0b3751a (diff)
downloadlvm2-d9f8acb65a78c20ac806efaeb7a1e39208e1a443.tar.gz
lvresize: fail early if crypt device is missing
If extending an LV with crypto_LUKS on it, and the crypt device is missing, then fail the command before extending the LV.
Diffstat (limited to 'lib/device')
-rw-r--r--lib/device/filesystem.c15
-rw-r--r--lib/device/filesystem.h2
2 files changed, 16 insertions, 1 deletions
diff --git a/lib/device/filesystem.c b/lib/device/filesystem.c
index db507bdda..c9cc7c553 100644
--- a/lib/device/filesystem.c
+++ b/lib/device/filesystem.c
@@ -94,6 +94,19 @@ static int _get_crypt_path(dev_t lv_devt, char *lv_path, char *crypt_path)
return ret;
}
+int lv_crypt_is_active(struct cmd_context *cmd, char *lv_path)
+{
+ char crypt_path[PATH_MAX];
+ struct stat st_lv;
+
+ if (stat(lv_path, &st_lv) < 0) {
+ log_error("Failed to get LV path %s", lv_path);
+ return 0;
+ }
+
+ return _get_crypt_path(st_lv.st_rdev, lv_path, crypt_path);
+}
+
int fs_get_info(struct cmd_context *cmd, struct logical_volume *lv,
struct fs_info *fsi, int include_mount)
{
@@ -149,7 +162,7 @@ int fs_get_info(struct cmd_context *cmd, struct logical_volume *lv,
memset(&info, 0, sizeof(info));
- log_print("File system found on crypt device %s on LV %s.",
+ log_print("Checking crypt device %s on LV %s.",
crypt_path, display_lvname(lv));
if ((fd = open(crypt_path, O_RDONLY)) < 0) {
diff --git a/lib/device/filesystem.h b/lib/device/filesystem.h
index 77eac34d0..cbc7b5352 100644
--- a/lib/device/filesystem.h
+++ b/lib/device/filesystem.h
@@ -50,4 +50,6 @@ int crypt_resize_script(struct cmd_context *cmd, struct logical_volume *lv, stru
uint64_t newsize_bytes_fs);
int fs_mount_state_is_misnamed(struct cmd_context *cmd, struct logical_volume *lv, char *lv_path, char *fstype);
+int lv_crypt_is_active(struct cmd_context *cmd, char *lv_path);
+
#endif