1
0
mirror of git://sourceware.org/git/lvm2.git synced 2025-01-03 05:18:29 +03:00

Do not allow users to change the name of RAID sub-LVs or the name of the

RAID LV if it is tracking changes for a split image.
This commit is contained in:
Jonathan Earl Brassow 2011-12-01 00:09:34 +00:00
parent 9981b8be03
commit a927e401f1
4 changed files with 34 additions and 0 deletions

View File

@ -1,5 +1,7 @@
Version 2.02.89 -
==================================
Don't allow name change of RAID LV while tracking a split image.
Do not allow users to change the name of RAID sub-LVs
Do not allow users to change permissions on RAID sub-LVs
Support the ability to replace specific devices in a RAID array via lvconvert.
Add activation/use_linear_target enabled by default.

View File

@ -780,6 +780,7 @@ struct logical_volume *first_replicator_dev(const struct logical_volume *lv);
/* -- metadata/replicator_manip.c */
/* ++ metadata/raid_manip.c */
int lv_is_raid_with_tracking(const struct logical_volume *lv);
uint32_t lv_raid_image_count(const struct logical_volume *lv);
int lv_raid_change_image_count(struct logical_volume *lv,
uint32_t new_count, struct dm_list *pvs);

View File

@ -26,6 +26,22 @@
#define RAID_REGION_SIZE 1024
int lv_is_raid_with_tracking(const struct logical_volume *lv)
{
uint32_t s;
struct lv_segment *seg;
if (lv->status & RAID) {
seg = first_seg(lv);
for (s = 0; s < seg->area_count; s++)
if (lv_is_visible(seg_lv(seg, s)) &&
!(seg_lv(seg, s)->status & LVM_WRITE))
return 1;
}
return 0;
}
uint32_t lv_raid_image_count(const struct logical_volume *lv)
{
struct lv_segment *seg = first_seg(lv);

View File

@ -115,6 +115,21 @@ int lvrename(struct cmd_context *cmd, int argc, char **argv)
goto error;
}
if (lvl->lv->status & (RAID_IMAGE | RAID_META)) {
log_error("Cannot rename a RAID %s directly",
(lvl->lv->status & RAID_IMAGE) ? "image" :
"metadata area");
r = ECMD_FAILED;
goto error;
}
if (lv_is_raid_with_tracking(lvl->lv)) {
log_error("Cannot rename %s while it is tracking a split image",
lvl->lv->name);
r = ECMD_FAILED;
goto error;
}
if (!lv_rename(cmd, lvl->lv, lv_name_new))
goto error;