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.6-rc2-fix' of git://git.kernel.org/pub/scm/linux/kernel/git/shli/md

Pull MD fixes from Shaohua Li:
"This update mainly fixes bugs:

- fix error handling (Guoqing)
- fix a crash when a disk is hotremoved (me)
- fix a dead loop (Wei Fang)"

* tag 'md/4.6-rc2-fix' of git://git.kernel.org/pub/scm/linux/kernel/git/shli/md:
md/bitmap: clear bitmap if bitmap_create failed
MD: add rdev reference for super write
md: fix a trivial typo in comments
md:raid1: fix a dead loop when read from a WriteMostly disk

+16 -10
+11 -8
drivers/md/bitmap.c
··· 1673 1673 if (!bitmap) /* there was no bitmap */ 1674 1674 return; 1675 1675 1676 + if (bitmap->sysfs_can_clear) 1677 + sysfs_put(bitmap->sysfs_can_clear); 1678 + 1676 1679 if (mddev_is_clustered(bitmap->mddev) && bitmap->mddev->cluster_info && 1677 1680 bitmap->cluster_slot == md_cluster_ops->slot_number(bitmap->mddev)) 1678 1681 md_cluster_stop(bitmap->mddev); ··· 1715 1712 if (mddev->thread) 1716 1713 mddev->thread->timeout = MAX_SCHEDULE_TIMEOUT; 1717 1714 1718 - if (bitmap->sysfs_can_clear) 1719 - sysfs_put(bitmap->sysfs_can_clear); 1720 - 1721 1715 bitmap_free(bitmap); 1722 1716 } 1723 1717 1724 1718 /* 1725 1719 * initialize the bitmap structure 1726 1720 * if this returns an error, bitmap_destroy must be called to do clean up 1721 + * once mddev->bitmap is set 1727 1722 */ 1728 1723 struct bitmap *bitmap_create(struct mddev *mddev, int slot) 1729 1724 { ··· 1866 1865 struct bitmap_counts *counts; 1867 1866 struct bitmap *bitmap = bitmap_create(mddev, slot); 1868 1867 1869 - if (IS_ERR(bitmap)) 1868 + if (IS_ERR(bitmap)) { 1869 + bitmap_free(bitmap); 1870 1870 return PTR_ERR(bitmap); 1871 + } 1871 1872 1872 1873 rv = bitmap_init_from_disk(bitmap, 0); 1873 1874 if (rv) ··· 2173 2170 else { 2174 2171 mddev->bitmap = bitmap; 2175 2172 rv = bitmap_load(mddev); 2176 - if (rv) { 2177 - bitmap_destroy(mddev); 2173 + if (rv) 2178 2174 mddev->bitmap_info.offset = 0; 2179 - } 2180 2175 } 2181 2176 mddev->pers->quiesce(mddev, 0); 2182 - if (rv) 2177 + if (rv) { 2178 + bitmap_destroy(mddev); 2183 2179 return rv; 2180 + } 2184 2181 } 2185 2182 } 2186 2183 }
+4 -1
drivers/md/md.c
··· 718 718 719 719 if (atomic_dec_and_test(&mddev->pending_writes)) 720 720 wake_up(&mddev->sb_wait); 721 + rdev_dec_pending(rdev, mddev); 721 722 bio_put(bio); 722 723 } 723 724 ··· 732 731 * If an error occurred, call md_error 733 732 */ 734 733 struct bio *bio = bio_alloc_mddev(GFP_NOIO, 1, mddev); 734 + 735 + atomic_inc(&rdev->nr_pending); 735 736 736 737 bio->bi_bdev = rdev->meta_bdev ? rdev->meta_bdev : rdev->bdev; 737 738 bio->bi_iter.bi_sector = sector; ··· 6886 6883 6887 6884 case ADD_NEW_DISK: 6888 6885 /* We can support ADD_NEW_DISK on read-only arrays 6889 - * on if we are re-adding a preexisting device. 6886 + * only if we are re-adding a preexisting device. 6890 6887 * So require mddev->pers and MD_DISK_SYNC. 6891 6888 */ 6892 6889 if (mddev->pers) {
+1 -1
drivers/md/raid1.c
··· 570 570 if (best_dist_disk < 0) { 571 571 if (is_badblock(rdev, this_sector, sectors, 572 572 &first_bad, &bad_sectors)) { 573 - if (first_bad < this_sector) 573 + if (first_bad <= this_sector) 574 574 /* Cannot use this */ 575 575 continue; 576 576 best_good_sectors = first_bad - this_sector;