Skip to content

Commit 6f37fa4

Browse files
committed
Merge tag 'md/4.12-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/shli/md
Pull MD fixes from Shaohua Li: "Several patches for MD. One notable is making flush bios sync, others fix small issues" * tag 'md/4.12-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/shli/md: md: Make flush bios explicitely sync md: report sector of stripes with check mismatches md: uuid debug statement now in processor byte order. md-cluster: fix potential lock issue in add_new_disk
2 parents bb32985 + 5a8948f commit 6f37fa4

File tree

6 files changed

+26
-14
lines changed

6 files changed

+26
-14
lines changed

drivers/md/bitmap.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -485,10 +485,10 @@ void bitmap_print_sb(struct bitmap *bitmap)
485485
pr_debug(" magic: %08x\n", le32_to_cpu(sb->magic));
486486
pr_debug(" version: %d\n", le32_to_cpu(sb->version));
487487
pr_debug(" uuid: %08x.%08x.%08x.%08x\n",
488-
*(__u32 *)(sb->uuid+0),
489-
*(__u32 *)(sb->uuid+4),
490-
*(__u32 *)(sb->uuid+8),
491-
*(__u32 *)(sb->uuid+12));
488+
le32_to_cpu(*(__u32 *)(sb->uuid+0)),
489+
le32_to_cpu(*(__u32 *)(sb->uuid+4)),
490+
le32_to_cpu(*(__u32 *)(sb->uuid+8)),
491+
le32_to_cpu(*(__u32 *)(sb->uuid+12)));
492492
pr_debug(" events: %llu\n",
493493
(unsigned long long) le64_to_cpu(sb->events));
494494
pr_debug("events cleared: %llu\n",

drivers/md/md-cluster.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1311,8 +1311,10 @@ static int add_new_disk(struct mddev *mddev, struct md_rdev *rdev)
13111311
cmsg.raid_slot = cpu_to_le32(rdev->desc_nr);
13121312
lock_comm(cinfo, 1);
13131313
ret = __sendmsg(cinfo, &cmsg);
1314-
if (ret)
1314+
if (ret) {
1315+
unlock_comm(cinfo);
13151316
return ret;
1317+
}
13161318
cinfo->no_new_dev_lockres->flags |= DLM_LKF_NOQUEUE;
13171319
ret = dlm_lock_sync(cinfo->no_new_dev_lockres, DLM_LOCK_EX);
13181320
cinfo->no_new_dev_lockres->flags &= ~DLM_LKF_NOQUEUE;

drivers/md/md.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -765,7 +765,7 @@ void md_super_write(struct mddev *mddev, struct md_rdev *rdev,
765765
test_bit(FailFast, &rdev->flags) &&
766766
!test_bit(LastDev, &rdev->flags))
767767
ff = MD_FAILFAST;
768-
bio->bi_opf = REQ_OP_WRITE | REQ_PREFLUSH | REQ_FUA | ff;
768+
bio->bi_opf = REQ_OP_WRITE | REQ_SYNC | REQ_PREFLUSH | REQ_FUA | ff;
769769

770770
atomic_inc(&mddev->pending_writes);
771771
submit_bio(bio);

drivers/md/raid5-cache.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1782,7 +1782,7 @@ static int r5l_log_write_empty_meta_block(struct r5l_log *log, sector_t pos,
17821782
mb->checksum = cpu_to_le32(crc32c_le(log->uuid_checksum,
17831783
mb, PAGE_SIZE));
17841784
if (!sync_page_io(log->rdev, pos, PAGE_SIZE, page, REQ_OP_WRITE,
1785-
REQ_FUA, false)) {
1785+
REQ_SYNC | REQ_FUA, false)) {
17861786
__free_page(page);
17871787
return -EIO;
17881788
}
@@ -2388,7 +2388,7 @@ r5c_recovery_rewrite_data_only_stripes(struct r5l_log *log,
23882388
mb->checksum = cpu_to_le32(crc32c_le(log->uuid_checksum,
23892389
mb, PAGE_SIZE));
23902390
sync_page_io(log->rdev, ctx->pos, PAGE_SIZE, page,
2391-
REQ_OP_WRITE, REQ_FUA, false);
2391+
REQ_OP_WRITE, REQ_SYNC | REQ_FUA, false);
23922392
sh->log_start = ctx->pos;
23932393
list_add_tail(&sh->r5c, &log->stripe_in_journal_list);
23942394
atomic_inc(&log->stripe_in_journal_count);

drivers/md/raid5-ppl.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -907,8 +907,8 @@ static int ppl_write_empty_header(struct ppl_log *log)
907907
pplhdr->checksum = cpu_to_le32(~crc32c_le(~0, pplhdr, PAGE_SIZE));
908908

909909
if (!sync_page_io(rdev, rdev->ppl.sector - rdev->data_offset,
910-
PPL_HEADER_SIZE, page, REQ_OP_WRITE | REQ_FUA, 0,
911-
false)) {
910+
PPL_HEADER_SIZE, page, REQ_OP_WRITE | REQ_SYNC |
911+
REQ_FUA, 0, false)) {
912912
md_error(rdev->mddev, rdev);
913913
ret = -EIO;
914914
}

drivers/md/raid5.c

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4085,10 +4085,15 @@ static void handle_parity_checks5(struct r5conf *conf, struct stripe_head *sh,
40854085
set_bit(STRIPE_INSYNC, &sh->state);
40864086
else {
40874087
atomic64_add(STRIPE_SECTORS, &conf->mddev->resync_mismatches);
4088-
if (test_bit(MD_RECOVERY_CHECK, &conf->mddev->recovery))
4088+
if (test_bit(MD_RECOVERY_CHECK, &conf->mddev->recovery)) {
40894089
/* don't try to repair!! */
40904090
set_bit(STRIPE_INSYNC, &sh->state);
4091-
else {
4091+
pr_warn_ratelimited("%s: mismatch sector in range "
4092+
"%llu-%llu\n", mdname(conf->mddev),
4093+
(unsigned long long) sh->sector,
4094+
(unsigned long long) sh->sector +
4095+
STRIPE_SECTORS);
4096+
} else {
40924097
sh->check_state = check_state_compute_run;
40934098
set_bit(STRIPE_COMPUTE_RUN, &sh->state);
40944099
set_bit(STRIPE_OP_COMPUTE_BLK, &s->ops_request);
@@ -4237,10 +4242,15 @@ static void handle_parity_checks6(struct r5conf *conf, struct stripe_head *sh,
42374242
}
42384243
} else {
42394244
atomic64_add(STRIPE_SECTORS, &conf->mddev->resync_mismatches);
4240-
if (test_bit(MD_RECOVERY_CHECK, &conf->mddev->recovery))
4245+
if (test_bit(MD_RECOVERY_CHECK, &conf->mddev->recovery)) {
42414246
/* don't try to repair!! */
42424247
set_bit(STRIPE_INSYNC, &sh->state);
4243-
else {
4248+
pr_warn_ratelimited("%s: mismatch sector in range "
4249+
"%llu-%llu\n", mdname(conf->mddev),
4250+
(unsigned long long) sh->sector,
4251+
(unsigned long long) sh->sector +
4252+
STRIPE_SECTORS);
4253+
} else {
42444254
int *target = &sh->ops.target;
42454255

42464256
sh->ops.target = -1;

0 commit comments

Comments
 (0)