]> sourceware.org Git - lvm2.git/commitdiff
metadata: format_text: better check for metadata overlap
authorPeter Rajnoha <prajnoha@redhat.com>
Fri, 30 Oct 2015 07:57:34 +0000 (08:57 +0100)
committerPeter Rajnoha <prajnoha@redhat.com>
Fri, 30 Oct 2015 07:57:34 +0000 (08:57 +0100)
Actually, we don't need extra condition as introduced in commit
00348c0a630a7e5578edf48052ec695b15de752f. We should fix the last
condition:

  (mdac->rlocn.size >= mdah->size)

...which should be:

  (MDA_HEADER_SIZE + (rlocn ? rlocn->size : 0) + mdac->rlocn.size >= mdah->size))

Where the "mdac" is new metadata, the "rlocn" is old metadata.

So the main problem with the previous condition was that it
didn't count in MDA_HEADER_SIZE properly (and possible existing
metadata - the "rlocn"). This could have caused the error state
where metadata in ring buffer overlap to not be hit.

Replace the new condition introduced in 00348c0a630a7e5578edf48052ec695b15de752f
with the improved one for the condition that existed there
already but it was just incomplete.

lib/format_text/format-text.c

index 84d09478daaf21207c0cba0615c1dca77f9e3462..29e9bd2a71062e8bb91785534d09a2c03228d92a 100644 (file)
@@ -654,8 +654,7 @@ static int _vg_write_raw(struct format_instance *fid, struct volume_group *vg,
 
        if ((new_wrap && old_wrap) ||
            (rlocn && (new_wrap || old_wrap) && (new_end > rlocn->offset)) ||
-           (!rlocn && new_wrap && (new_end > mdac->rlocn.offset)) ||
-           (mdac->rlocn.size >= mdah->size)) {
+           (MDA_HEADER_SIZE + (rlocn ? rlocn->size : 0) + mdac->rlocn.size >= mdah->size)) {
                log_error("VG %s metadata too large for circular buffer",
                          vg->name);
                goto out;
This page took 0.033337 seconds and 5 git commands to generate.