On Wed, Dec 17, 2008 at 11:17 PM, Neil Brown [off-list ref] wrote:
On Wednesday December 17, jnelson-linux-raid@jamponi.net wrote:
quoted
quoted
quoted
It could be that you are hitting the bug fixed by
commit a0da84f35b25875870270d16b6eccda4884d61a7
That sure sounds like it. I'd have to log to see what happened,
exactly, but I've added substantial logging around the device
discovery and addition section which manages this particular raid.
quoted
You would need 2.6.26 or later to have that fixed.
Can you try with a newer kernel???
I hope to be giving opensuse 11.1 a try soon, which uses 2.6.27.X
afaik. I suspect I can also backport that patch to 2.6.25 easily.
The kernel source for 2.6.25.18-0.2 (from suse) has this patch
already, so I was already using it.
Are you sure? I just looked in the openSUSE-11.0 kernel tree and I
cannot see it there....
NeilBrown
quoted
Perhaps this weekend or some night this week I'll find time to try to
break things again.
--
Jon
jnelson@turnip:~/kernels> rpm -qf /usr/src/linux-2.6.25.18-0.2
kernel-source-2.6.25.18-0.2
jnelson@turnip:~/kernels> rpm -V kernel-source-2.6.25.18-0.2
jnelson@turnip:~/kernels> (cd linux-2.6 && git diff
a0da84f35b25875870270d16b6eccda4884d61a7
a0da84f35b25875870270d16b6eccda4884d61a7^ ) > d.diff
jnelson@turnip:~/kernels> head d.diff
diff --git a/drivers/md/bitmap.c b/drivers/md/bitmap.c
index dedba16..b26927c 100644
--- a/drivers/md/bitmap.c
+++ b/drivers/md/bitmap.c
@@ -454,11 +454,8 @@ void bitmap_update_sb(struct bitmap *bitmap)
spin_unlock_irqrestore(&bitmap->lock, flags);
sb = (bitmap_super_t *)kmap_atomic(bitmap->sb_page, KM_USER0);
sb->events = cpu_to_le64(bitmap->mddev->events);
- if (bitmap->mddev->events < bitmap->events_cleared) {
- /* rocking back to read-only */jnelson@turnip:~/kernels> cp -r /usr/src/linux-2.6.25.18-0.2 .
jnelson@turnip:~/kernels/linux-2.6.25.18-0.2> tail -n +454
drivers/md/bitmap.c | head -n 20
{
bitmap_super_t *sb;
unsigned long flags;
if (!bitmap || !bitmap->mddev) /* no bitmap for this array */
return;
spin_lock_irqsave(&bitmap->lock, flags);
if (!bitmap->sb_page) { /* no superblock */
spin_unlock_irqrestore(&bitmap->lock, flags);
return;
}
spin_unlock_irqrestore(&bitmap->lock, flags);
sb = (bitmap_super_t *)kmap_atomic(bitmap->sb_page, KM_USER0);
sb->events = cpu_to_le64(bitmap->mddev->events);
if (!bitmap->mddev->degraded)
sb->events_cleared = cpu_to_le64(bitmap->mddev->events);
kunmap_atomic(sb, KM_USER0);
write_page(bitmap, bitmap->sb_page, 1);
}
When I view the diff and the source they appear to agree.
--
Jon