mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
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.
This commit is contained in:
parent
5374a44c57
commit
d9f8acb65a
@ -94,6 +94,19 @@ static int _get_crypt_path(dev_t lv_devt, char *lv_path, char *crypt_path)
|
|||||||
return ret;
|
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,
|
int fs_get_info(struct cmd_context *cmd, struct logical_volume *lv,
|
||||||
struct fs_info *fsi, int include_mount)
|
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));
|
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));
|
crypt_path, display_lvname(lv));
|
||||||
|
|
||||||
if ((fd = open(crypt_path, O_RDONLY)) < 0) {
|
if ((fd = open(crypt_path, O_RDONLY)) < 0) {
|
||||||
|
@ -50,4 +50,6 @@ int crypt_resize_script(struct cmd_context *cmd, struct logical_volume *lv, stru
|
|||||||
uint64_t newsize_bytes_fs);
|
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 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
|
#endif
|
||||||
|
@ -6939,6 +6939,10 @@ int lv_resize(struct cmd_context *cmd, struct logical_volume *lv,
|
|||||||
log_error("File system not found for --resizefs or --fs options.");
|
log_error("File system not found for --resizefs or --fs options.");
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
if (!strcmp(fstype, "crypto_LUKS") && !lv_crypt_is_active(cmd, lv_path)) {
|
||||||
|
log_error("LUKS dm-crypt device must be active for fs resize.");
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
/* FS utils will fail if LVs were renamed while mounted. */
|
/* FS utils will fail if LVs were renamed while mounted. */
|
||||||
if (fs_mount_state_is_misnamed(cmd, lv_top, lv_path, fstype))
|
if (fs_mount_state_is_misnamed(cmd, lv_top, lv_path, fstype))
|
||||||
goto_out;
|
goto_out;
|
||||||
|
Loading…
Reference in New Issue
Block a user