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

Pull MD fixes from Shaohua Li:

- Fix a locking issue for md-cluster (Guoqing)

- Fix a sync crash for raid10 (Ni)

- Fix a reshape bug with raid5 cache enabled (me)

* tag 'md/4.19-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/shli/md:
md-cluster: release RESYNC lock after the last resync message
RAID10 BUG_ON in raise_barrier when force is true and conf->barrier is 0
md/raid5-cache: disable reshape completely

+17 -9
+5 -5
drivers/md/md-cluster.c
··· 1276 1276 static int resync_finish(struct mddev *mddev) 1277 1277 { 1278 1278 struct md_cluster_info *cinfo = mddev->cluster_info; 1279 + int ret = 0; 1279 1280 1280 1281 clear_bit(MD_RESYNCING_REMOTE, &mddev->recovery); 1281 - dlm_unlock_sync(cinfo->resync_lockres); 1282 1282 1283 1283 /* 1284 1284 * If resync thread is interrupted so we can't say resync is finished, 1285 1285 * another node will launch resync thread to continue. 1286 1286 */ 1287 - if (test_bit(MD_CLOSING, &mddev->flags)) 1288 - return 0; 1289 - else 1290 - return resync_info_update(mddev, 0, 0); 1287 + if (!test_bit(MD_CLOSING, &mddev->flags)) 1288 + ret = resync_info_update(mddev, 0, 0); 1289 + dlm_unlock_sync(cinfo->resync_lockres); 1290 + return ret; 1291 1291 } 1292 1292 1293 1293 static int area_resyncing(struct mddev *mddev, int direction,
+4 -1
drivers/md/raid10.c
··· 4529 4529 allow_barrier(conf); 4530 4530 } 4531 4531 4532 + raise_barrier(conf, 0); 4532 4533 read_more: 4533 4534 /* Now schedule reads for blocks from sector_nr to last */ 4534 4535 r10_bio = raid10_alloc_init_r10buf(conf); 4535 4536 r10_bio->state = 0; 4536 - raise_barrier(conf, sectors_done != 0); 4537 + raise_barrier(conf, 1); 4537 4538 atomic_set(&r10_bio->remaining, 0); 4538 4539 r10_bio->mddev = mddev; 4539 4540 r10_bio->sector = sector_nr; ··· 4629 4628 sectors_done += nr_sectors; 4630 4629 if (sector_nr <= last) 4631 4630 goto read_more; 4631 + 4632 + lower_barrier(conf); 4632 4633 4633 4634 /* Now that we have done the whole section we can 4634 4635 * update reshape_progress
+5
drivers/md/raid5-log.h
··· 46 46 extern void ppl_quiesce(struct r5conf *conf, int quiesce); 47 47 extern int ppl_handle_flush_request(struct r5l_log *log, struct bio *bio); 48 48 49 + static inline bool raid5_has_log(struct r5conf *conf) 50 + { 51 + return test_bit(MD_HAS_JOURNAL, &conf->mddev->flags); 52 + } 53 + 49 54 static inline bool raid5_has_ppl(struct r5conf *conf) 50 55 { 51 56 return test_bit(MD_HAS_PPL, &conf->mddev->flags);
+3 -3
drivers/md/raid5.c
··· 733 733 { 734 734 struct r5conf *conf = sh->raid_conf; 735 735 736 - if (conf->log || raid5_has_ppl(conf)) 736 + if (raid5_has_log(conf) || raid5_has_ppl(conf)) 737 737 return false; 738 738 return test_bit(STRIPE_BATCH_READY, &sh->state) && 739 739 !test_bit(STRIPE_BITMAP_PENDING, &sh->state) && ··· 7737 7737 sector_t newsize; 7738 7738 struct r5conf *conf = mddev->private; 7739 7739 7740 - if (conf->log || raid5_has_ppl(conf)) 7740 + if (raid5_has_log(conf) || raid5_has_ppl(conf)) 7741 7741 return -EINVAL; 7742 7742 sectors &= ~((sector_t)conf->chunk_sectors - 1); 7743 7743 newsize = raid5_size(mddev, sectors, mddev->raid_disks); ··· 7788 7788 { 7789 7789 struct r5conf *conf = mddev->private; 7790 7790 7791 - if (conf->log || raid5_has_ppl(conf)) 7791 + if (raid5_has_log(conf) || raid5_has_ppl(conf)) 7792 7792 return -EINVAL; 7793 7793 if (mddev->delta_disks == 0 && 7794 7794 mddev->new_layout == mddev->layout &&