mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
Add 'Volume Type' lv_attr characters for RAID and RAID_IMAGE.
RAID_META is already handled.
This commit is contained in:
parent
766d22825b
commit
efa3621a59
@ -1,5 +1,6 @@
|
|||||||
Version 2.02.89 -
|
Version 2.02.89 -
|
||||||
==================================
|
==================================
|
||||||
|
Add 'Volume Type' lv_attr characters for RAID and RAID_IMAGE.
|
||||||
Add activation/retry_deactivation to lvm.conf to retry deactivation of an LV.
|
Add activation/retry_deactivation to lvm.conf to retry deactivation of an LV.
|
||||||
Replace open_count check with holders/mounted_fs check on lvremove path.
|
Replace open_count check with holders/mounted_fs check on lvremove path.
|
||||||
Disallow the creation of mirrors (mirror or raid1 segtype) with only one leg.
|
Disallow the creation of mirrors (mirror or raid1 segtype) with only one leg.
|
||||||
|
@ -304,6 +304,48 @@ static int _lv_mimage_in_sync(const struct logical_volume *lv)
|
|||||||
return (percent == PERCENT_100) ? 1 : 0;
|
return (percent == PERCENT_100) ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int _lv_raid_image_in_sync(const struct logical_volume *lv)
|
||||||
|
{
|
||||||
|
percent_t percent;
|
||||||
|
struct lv_segment *raid_seg;
|
||||||
|
|
||||||
|
if (!(lv->status & RAID_IMAGE)) {
|
||||||
|
log_error(INTERNAL_ERROR "%s is not a RAID image", lv->name);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
raid_seg = get_only_segment_using_this_lv(first_seg(lv)->lv);
|
||||||
|
if (!raid_seg) {
|
||||||
|
log_error("Failed to find RAID segment for %s", lv->name);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!seg_is_raid(raid_seg)) {
|
||||||
|
log_error("%s on %s is not a RAID segment",
|
||||||
|
raid_seg->lv->name, lv->name);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!lv_raid_percent(raid_seg->lv, &percent))
|
||||||
|
return_0;
|
||||||
|
|
||||||
|
if (percent == PERCENT_100)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* FIXME: Get individual RAID image status.
|
||||||
|
* The status health characters reported from a RAID target
|
||||||
|
* indicate whether the whole array or just individual devices
|
||||||
|
* are in-sync. If the corresponding character for this image
|
||||||
|
* was 'A', we could report a more accurate status. This is
|
||||||
|
* especially so in the case of failures or rebuildings.
|
||||||
|
*
|
||||||
|
* We need to test the health characters anyway to report
|
||||||
|
* the correct 4th attr character. Just need to figure out
|
||||||
|
* where to put this functionality.
|
||||||
|
*/
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
char *lv_attr_dup(struct dm_pool *mem, const struct logical_volume *lv)
|
char *lv_attr_dup(struct dm_pool *mem, const struct logical_volume *lv)
|
||||||
{
|
{
|
||||||
percent_t snap_percent;
|
percent_t snap_percent;
|
||||||
@ -327,6 +369,8 @@ char *lv_attr_dup(struct dm_pool *mem, const struct logical_volume *lv)
|
|||||||
/* Origin takes precedence over mirror and thin volume */
|
/* Origin takes precedence over mirror and thin volume */
|
||||||
else if (lv_is_origin(lv))
|
else if (lv_is_origin(lv))
|
||||||
repstr[0] = (lv_is_merging_origin(lv)) ? 'O' : 'o';
|
repstr[0] = (lv_is_merging_origin(lv)) ? 'O' : 'o';
|
||||||
|
else if (lv->status & RAID)
|
||||||
|
repstr[0] = (lv->status & LV_NOTSYNCED) ? 'R' : 'r';
|
||||||
else if (lv->status & MIRRORED)
|
else if (lv->status & MIRRORED)
|
||||||
repstr[0] = (lv->status & LV_NOTSYNCED) ? 'M' : 'm';
|
repstr[0] = (lv->status & LV_NOTSYNCED) ? 'M' : 'm';
|
||||||
else if (lv_is_thin_volume(lv))
|
else if (lv_is_thin_volume(lv))
|
||||||
@ -341,6 +385,8 @@ char *lv_attr_dup(struct dm_pool *mem, const struct logical_volume *lv)
|
|||||||
repstr[0] = 'e';
|
repstr[0] = 'e';
|
||||||
else if (lv->status & MIRROR_IMAGE)
|
else if (lv->status & MIRROR_IMAGE)
|
||||||
repstr[0] = (_lv_mimage_in_sync(lv)) ? 'i' : 'I';
|
repstr[0] = (_lv_mimage_in_sync(lv)) ? 'i' : 'I';
|
||||||
|
else if (lv->status & RAID_IMAGE)
|
||||||
|
repstr[0] = (_lv_raid_image_in_sync(lv)) ? 'i' : 'I';
|
||||||
else if (lv->status & MIRROR_LOG)
|
else if (lv->status & MIRROR_LOG)
|
||||||
repstr[0] = 'l';
|
repstr[0] = 'l';
|
||||||
else if (lv_is_cow(lv)) {
|
else if (lv_is_cow(lv)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user