[lvm-devel] [PATCH] LVM: New flag, LV_REBUILD
Zdenek Kabelac
zkabelac at redhat.com
Fri Nov 11 16:23:10 UTC 2011
Dne 10.11.2011 23:26, Jonathan Brassow napsal(a):
> Any objections to a new flag?
>
> brassow
>
> Add new flag, LV_REBUILD.
>
> Until now, I had been using the LV_NOTSYNCED as a flag to indicate that RAID
> sub-LVs needed to be rebuilt. (The 'rebuild' parameter is then specified in
> the DM CTR table.) However, I don't want to use a flag that gets written to
> the LVM metadata... and the LV_NOTSYNCED flag's original meaning does not
> suite the purpose adequately.
>
> This patch proposes and uses a new flag, LV_REBUILD.
Hmm and how is this going to work in some crash scenarios - are you always
able to deduce the raid was not yet build ?
Also it seems we encode each flag into lib/format_text/flags.c
>
>
> Index: LVM2/lib/metadata/metadata-exported.h
> ===================================================================
> --- LVM2.orig/lib/metadata/metadata-exported.h
> +++ LVM2/lib/metadata/metadata-exported.h
> @@ -61,7 +61,9 @@
> //#define VIRTUAL UINT64_C(0x00010000) /* LV - internal use only */
> #define MIRROR_LOG UINT64_C(0x00020000) /* LV */
> #define MIRROR_IMAGE UINT64_C(0x00040000) /* LV */
> +
> #define LV_NOTSYNCED UINT64_C(0x00080000) /* LV */
> +#define LV_REBUILD UINT64_C(0x00100000) /* LV */
> //#define PRECOMMITTED UINT64_C(0x00200000) /* VG - internal use only */
> #define CONVERTING UINT64_C(0x00400000) /* LV */
>
> Index: LVM2/lib/metadata/raid_manip.c
> ===================================================================
> --- LVM2.orig/lib/metadata/raid_manip.c
> +++ LVM2/lib/metadata/raid_manip.c
> @@ -440,7 +440,7 @@ static int _alloc_image_component(struct
> return 0;
> }
>
> - status = LVM_READ | LVM_WRITE | LV_NOTSYNCED | type;
> + status = LVM_READ | LVM_WRITE | LV_REBUILD | type;
> tmp_lv = lv_create_empty(img_name, NULL, status, ALLOC_INHERIT, lv->vg);
> if (!tmp_lv) {
> log_error("Failed to allocate new raid component, %s", img_name);
> @@ -588,7 +588,7 @@ static int _raid_add_images(struct logic
> */
> if (seg_is_linear(seg)) {
> /* A complete resync will be done, no need to mark each sub-lv */
> - status_mask = ~(LV_NOTSYNCED);
> + status_mask = ~(LV_REBUILD);
>
> if (!(lvl = dm_pool_alloc(lv->vg->vgmem, sizeof(*lvl)))) {
> log_error("Memory allocation failed");
> @@ -1335,8 +1335,8 @@ static int _convert_mirror_to_raid1(stru
> log_debug("Adding %s to %s", lvl->lv->name, lv->name);
>
> /* Images are known to be in-sync */
> - lvl->lv->status &= ~LV_NOTSYNCED;
> - first_seg(lvl->lv)->status &= ~LV_NOTSYNCED;
> + lvl->lv->status &= ~LV_REBUILD;
> + first_seg(lvl->lv)->status &= ~LV_REBUILD;
> lv_set_hidden(lvl->lv);
>
> if (!set_lv_segment_area_lv(seg, s, lvl->lv, 0,
> Index: LVM2/lib/raid/raid.c
> ===================================================================
> --- LVM2.orig/lib/raid/raid.c
> +++ LVM2/lib/raid/raid.c
> @@ -183,7 +183,7 @@ static int _raid_add_target_line(struct
> }
>
> for (s = 0; s < seg->area_count; s++)
> - if (seg_lv(seg, s)->status & LV_NOTSYNCED)
> + if (seg_lv(seg, s)->status & LV_REBUILD)
> rebuilds |= 1 << s;
>
> if (!dm_tree_node_add_raid_target(node, len, _raid_name(seg),
>
>
> --
> lvm-devel mailing list
> lvm-devel at redhat.com
> https://www.redhat.com/mailman/listinfo/lvm-devel
More information about the lvm-devel
mailing list