Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'md/4.1-rc4-fixes' of git://neil.brown.name/md

Pull md bugfixes from Neil Brown:
"I have a few more raid5 bugfixes pending, but I want them to get a bit
more review first. In the meantime:

- one serious RAID0 data corruption - caused by recent bugfix that
wasn't reviewed properly.

- one raid5 fix in new code (a couple more of those to come).

- one little fix to stop static analysis complaining about silly rcu
annotation"

* tag 'md/4.1-rc4-fixes' of git://neil.brown.name/md:
md/bitmap: remove rcu annotation from pointer arithmetic.
md/raid0: fix restore to sector variable in raid0_make_request
raid5: fix broken async operation chain

+10 -3
+6 -1
drivers/md/bitmap.c
··· 177 177 * nr_pending is 0 and In_sync is clear, the entries we return will 178 178 * still be in the same position on the list when we re-enter 179 179 * list_for_each_entry_continue_rcu. 180 + * 181 + * Note that if entered with 'rdev == NULL' to start at the 182 + * beginning, we temporarily assign 'rdev' to an address which 183 + * isn't really an rdev, but which can be used by 184 + * list_for_each_entry_continue_rcu() to find the first entry. 180 185 */ 181 186 rcu_read_lock(); 182 187 if (rdev == NULL) 183 188 /* start at the beginning */ 184 - rdev = list_entry_rcu(&mddev->disks, struct md_rdev, same_set); 189 + rdev = list_entry(&mddev->disks, struct md_rdev, same_set); 185 190 else { 186 191 /* release the previous rdev and start from there. */ 187 192 rdev_dec_pending(rdev, mddev);
+3 -1
drivers/md/raid0.c
··· 524 524 ? (sector & (chunk_sects-1)) 525 525 : sector_div(sector, chunk_sects)); 526 526 527 + /* Restore due to sector_div */ 528 + sector = bio->bi_iter.bi_sector; 529 + 527 530 if (sectors < bio_sectors(bio)) { 528 531 split = bio_split(bio, sectors, GFP_NOIO, fs_bio_set); 529 532 bio_chain(split, bio); ··· 534 531 split = bio; 535 532 } 536 533 537 - sector = bio->bi_iter.bi_sector; 538 534 zone = find_zone(mddev->private, &sector); 539 535 tmp_dev = map_sector(mddev, zone, sector, &sector); 540 536 split->bi_bdev = tmp_dev->bdev;
+1 -1
drivers/md/raid5.c
··· 1822 1822 } else 1823 1823 init_async_submit(&submit, 0, tx, NULL, NULL, 1824 1824 to_addr_conv(sh, percpu, j)); 1825 - async_gen_syndrome(blocks, 0, count+2, STRIPE_SIZE, &submit); 1825 + tx = async_gen_syndrome(blocks, 0, count+2, STRIPE_SIZE, &submit); 1826 1826 if (!last_stripe) { 1827 1827 j++; 1828 1828 sh = list_first_entry(&sh->batch_list, struct stripe_head,