public inbox for lvm2-cvs@sourceware.org help / color / mirror / Atom feed
From: agk@sourceware.org To: lvm-devel@redhat.com, lvm2-cvs@sourceware.org Subject: LVM2/lib format_text/text_label.c metadata/met ... Date: Wed, 30 Jun 2010 19:28:00 -0000 [thread overview] Message-ID: <20100630192836.10779.qmail@sourceware.org> (raw) CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: agk@sourceware.org 2010-06-30 19:28:35 Modified files: lib/format_text: text_label.c lib/metadata : metadata-exported.h metadata.c Log message: more mda ignore cleanups Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/text_label.c.diff?cvsroot=lvm2&r1=1.35&r2=1.36 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata-exported.h.diff?cvsroot=lvm2&r1=1.162&r2=1.163 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata.c.diff?cvsroot=lvm2&r1=1.375&r2=1.376 --- LVM2/lib/format_text/text_label.c 2010/06/30 13:51:11 1.35 +++ LVM2/lib/format_text/text_label.c 2010/06/30 19:28:35 1.36 @@ -314,8 +314,7 @@ mda_set_ignored(mda, rlocn_is_ignored(mdah->raw_locns)); if (mda_is_ignored(mda)) { - log_debug("Skipping mda with ignored flag on " - "device %s at offset %"PRIu64, + log_debug("Ignoring mda on device %s at offset %"PRIu64, dev_name(mdac->area.dev), mdac->area.start); if (!dev_close(mdac->area.dev)) --- LVM2/lib/metadata/metadata-exported.h 2010/06/30 18:03:52 1.162 +++ LVM2/lib/metadata/metadata-exported.h 2010/06/30 19:28:35 1.163 @@ -117,6 +117,9 @@ #define FAILED_EXIST 0x00000100U #define SUCCESS 0x00000000U +#define VGMETADATACOPIES_ALL UINT32_MAX +#define VGMETADATACOPIES_UNMANAGED 0 + /* Ordered list - see lv_manip.c */ typedef enum { ALLOC_INVALID, @@ -885,8 +888,6 @@ uint64_t vg_max_lv(const struct volume_group *vg); uint32_t vg_mda_count(const struct volume_group *vg); uint32_t vg_mda_used_count(const struct volume_group *vg); -#define VGMETADATACOPIES_ALL UINT32_MAX -#define VGMETADATACOPIES_UNMANAGED 0 uint32_t vg_mda_copies(const struct volume_group *vg); int vg_set_mda_copies(struct volume_group *vg, uint32_t copies); int vg_check_write_mode(struct volume_group *vg); --- LVM2/lib/metadata/metadata.c 2010/06/30 18:03:52 1.375 +++ LVM2/lib/metadata/metadata.c 2010/06/30 19:28:35 1.376 @@ -1022,14 +1022,12 @@ return 1; /* FIXME: flip bits on random mdas */ - dm_list_iterate_items(mda, &vg->fid->metadata_areas_in_use) { + dm_list_iterate_items(mda, &vg->fid->metadata_areas_in_use) if (!mda_is_ignored(mda)) { mda_set_ignored(mda, 1); - num_to_ignore--; + if (!--num_to_ignore) + return 1; } - if (!num_to_ignore) - return 1; - } log_error(INTERNAL_ERROR "Unable to find %"PRIu32" metadata areas to ignore " "on volume group %s", num_to_ignore, vg->name); @@ -1049,25 +1047,21 @@ vg->name, vg_mda_copies(vg), vg_mda_used_count(vg), num_to_unignore); /* FIXME: Select mdas to change at random */ - dm_list_iterate_items_safe(mda, tmda, &vg->fid->metadata_areas_ignored) { + dm_list_iterate_items_safe(mda, tmda, &vg->fid->metadata_areas_ignored) if (mda_is_ignored(mda)) { mda_set_ignored(mda, 0); dm_list_move(&vg->fid->metadata_areas_in_use, &mda->list); - num_to_unignore--; + if (!--num_to_unignore) + return 1; } - if (!num_to_unignore) - return 1; - } - dm_list_iterate_items(mda, &vg->fid->metadata_areas_in_use) { + dm_list_iterate_items(mda, &vg->fid->metadata_areas_in_use) if (mda_is_ignored(mda)) { mda_set_ignored(mda, 0); - num_to_unignore--; + if (!--num_to_unignore) + return 1; } - if (!num_to_unignore) - return 1; - } log_error(INTERNAL_ERROR "Unable to find %"PRIu32" metadata areas to unignore " "on volume group %s", num_to_unignore, vg->name); @@ -1077,24 +1071,30 @@ static int _vg_adjust_ignored_mdas(struct volume_group *vg) { - uint32_t mda_copies, count; - int ret = 1; + uint32_t mda_copies_used = vg_mda_used_count(vg); - mda_copies = vg_mda_used_count(vg); - if (vg->mda_copies == VGMETADATACOPIES_UNMANAGED) - goto skip_adjust; - - if (mda_copies > vg->mda_copies) - ret = _vg_ignore_mdas(vg, mda_copies - vg->mda_copies); - else if (mda_copies < vg->mda_copies) { - /* not an error to have vg_mda_count larger than total mdas */ - if (vg->mda_copies >= vg_mda_count(vg)) - count = vg_mda_count(vg) - vg_mda_used_count(vg); + if (vg->mda_copies == VGMETADATACOPIES_UNMANAGED) { + /* Ensure at least one mda is in use. */ + if (!mda_copies_used && vg_mda_count(vg) && !_vg_unignore_mdas(vg, 1)) + return_0; else - count = vg->mda_copies - mda_copies; - ret = _vg_unignore_mdas(vg, count); + return 1; } + + /* Not an error to have vg_mda_count larger than total mdas. */ + if (vg->mda_copies == VGMETADATACOPIES_ALL || + vg->mda_copies >= vg_mda_count(vg)) { + /* Use all */ + if (!_vg_unignore_mdas(vg, vg_mda_count(vg) - mda_copies_used)) + return_0; + } else if (mda_copies_used < vg->mda_copies) { + if (!_vg_unignore_mdas(vg, vg->mda_copies - mda_copies_used)) + return_0; + } else if (mda_copies_used > vg->mda_copies) + if (!_vg_ignore_mdas(vg, mda_copies_used - vg->mda_copies)) + return_0; + /* * The VGMETADATACOPIES_ALL value will never be written disk. * It is a special cmdline value that means 2 things: @@ -1104,24 +1104,6 @@ if (vg->mda_copies == VGMETADATACOPIES_ALL) vg->mda_copies = VGMETADATACOPIES_UNMANAGED; - if (!ret) - return_0; - -skip_adjust: - /* - * Ensure at least one mda in use. - * FIXME: check size of fid->metadata_areas_in_use; reason is because - * of how pv_setup works in the case of a pv with 2 mdas, one ignored - * and another not ignored; function needs refactoring to simplify the - * below check and retain correctness. - */ - if ((!dm_list_size(&vg->fid->metadata_areas_in_use) || - !vg_mda_used_count(vg)) && vg_mda_count(vg)) - ret = _vg_unignore_mdas(vg, 1); - - if (!ret) - return_0; - return 1; } @@ -2546,10 +2528,10 @@ return 0; } - if (!_vg_adjust_ignored_mdas(vg)) + if ((vg->fid->fmt->features & FMT_MDAS) && !_vg_adjust_ignored_mdas(vg)) return_0; - if (dm_list_empty(&vg->fid->metadata_areas_in_use)) { + if (!vg_mda_used_count(vg)) { log_error("Aborting vg_write: No metadata areas to write to!"); return 0; } @@ -4375,10 +4357,6 @@ if (!mda_is_ignored(mda)) used_count++; - dm_list_iterate_items(mda, &vg->fid->metadata_areas_ignored) - if (!mda_is_ignored(mda)) - used_count++; - return used_count; }
next reply other threads:[~2010-06-30 19:28 UTC|newest] Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top 2010-06-30 19:28 agk [this message] -- strict thread matches above, loose matches on Subject: below -- 2010-06-29 22:25 wysochanski 2010-06-28 20:30 wysochanski
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20100630192836.10779.qmail@sourceware.org \ --to=agk@sourceware.org \ --cc=lvm-devel@redhat.com \ --cc=lvm2-cvs@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).