Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP4:GA
mdadm.3522
0001-make-write_bitmap1-compatible-with-previou...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0001-make-write_bitmap1-compatible-with-previous-versions.patch of Package mdadm.3522
commit 19e7063adf81fdff0a4a1092df62cff621bc21f2 Author: Zhilong Liu <zlliu@suse.com> Date: Tue Nov 8 22:30:23 2016 -0500 super1: make write_bitmap1 compatible with previous mdadm versions For older mdadm version, v1.x metadata has different bitmap_offset, we can't ensure all the bitmaps are on a 4K boundary since writing 4K for bitmap could corrupt the superblock, and Anthony reported the bug about it at below link. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=837964 So let's check about the alignment for bitmap_offset before set the boundary to 4096 unconditionally. Thanks for Neil's detailed explanation. Reported-by: Anthony DeRobertis <anthony@derobert.net> Fixes: 95a05b37e8eb ("Create n bitmaps for clustered mode") Cc: Neil Brown <neilb@suse.com> Signed-off-by: Guoqing Jiang <gqjiang@suse.com> Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com> Signed-off-by: Zhilong Liu <zlliu@suse.com> diff --git a/super1.c b/super1.c index 8bcaa2f..02c6610 100644 --- a/super1.c +++ b/super1.c @@ -2423,7 +2423,15 @@ static int write_bitmap1(struct supertype *st, int fd, enum bitmap_update update memset(buf, 0xff, 4096); memcpy(buf, (char *)bms, sizeof(bitmap_super_t)); - towrite = calc_bitmap_size(bms, 4096); + /* + * use 4096 boundary if bitmap_offset is aligned + * with 8 sectors, then it should compatible with + * older mdadm. + */ + if (__le32_to_cpu(sb->bitmap_offset) & 7) + towrite = calc_bitmap_size(bms, 512); + else + towrite = calc_bitmap_size(bms, 4096); while (towrite > 0) { n = towrite; if (n > 4096)
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor