Bug#837964: 95a05b3 broke mdadm --add on my superblock 1.0 array
Guoqing Jiang
gqjiang at suse.com
Wed Sep 21 06:45:10 UTC 2016
On 09/20/2016 02:31 PM, Anthony DeRobertis wrote:
> Sorry for the amount of emails I'm sending, but I noticed something
> that's probably important. I'm also appending some gdb log from
> tracing through the function (trying to answer why it's doing cluster
> mode stuff at all).
>
> While tracing through, I noticed that *before* the write-bitmap loop,
> mdadm -E considers the superblock valid. That agrees with what I saw
> from strace, I suppose. To my first glance, it figures out how much to
> write by calling this function:
>
> static unsigned int calc_bitmap_size(bitmap_super_t *bms, unsigned int
> boundary)
> {
> unsigned long long bits, bytes;
>
> bits = __le64_to_cpu(bms->sync_size) /
> (__le32_to_cpu(bms->chunksize)>>9);
> bytes = (bits+7) >> 3;
> bytes += sizeof(bitmap_super_t);
> bytes = ROUND_UP(bytes, boundary);
>
> return bytes;
> }
>
> That code looked familiar, and I figured out where—it's also in
> 95a05b37e8eb2bc0803b1a0298fce6adc60eff16, the commit that I found
> originally broke it. But that commit is making a change to it: it
> changed the ROUND_UP line from 512 to 4096 (and from the gdb trace,
> boundary==4096).
>
> I tested changing that line to "bytes = ROUND_UP(bytes, 512);", and it
> works. Adds the new disk to the array and produces no warnings or errors.
I think it is is a coincidence that above change works, 4a3d29e commit made
the change but it didn't change the logic at all. Also seems the problem
is not
related to md-cluster code as your gdb debug shows it run into below part
because the version is 4.
/* no need to change bms->nodes for other bitmap types */
Thanks,
Guoqing
More information about the pkg-mdadm-devel
mailing list