Skip to content

Commit c830095

Browse files
committed
Merge tag 'md-6.8-20240109' of https://git.kernel.org/pub/scm/linux/kernel/git/song/md into for-6.8/block
Pull MD fixes from Song: "1. Sparse warning since v6.0, by Bart; 2. /proc/mdstat regression since v6.7, by Yu Kuai." * tag 'md-6.8-20240109' of https://git.kernel.org/pub/scm/linux/kernel/git/song/md: md/raid1: Use blk_opf_t for read and write operations md: Fix md_seq_ops() regressions
2 parents 53889bc + 7dab245 commit c830095

File tree

2 files changed

+33
-19
lines changed

2 files changed

+33
-19
lines changed

drivers/md/md.c

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8135,6 +8135,19 @@ static void status_unused(struct seq_file *seq)
81358135
seq_printf(seq, "\n");
81368136
}
81378137

8138+
static void status_personalities(struct seq_file *seq)
8139+
{
8140+
struct md_personality *pers;
8141+
8142+
seq_puts(seq, "Personalities : ");
8143+
spin_lock(&pers_lock);
8144+
list_for_each_entry(pers, &pers_list, list)
8145+
seq_printf(seq, "[%s] ", pers->name);
8146+
8147+
spin_unlock(&pers_lock);
8148+
seq_puts(seq, "\n");
8149+
}
8150+
81388151
static int status_resync(struct seq_file *seq, struct mddev *mddev)
81398152
{
81408153
sector_t max_sectors, resync, res;
@@ -8276,20 +8289,10 @@ static int status_resync(struct seq_file *seq, struct mddev *mddev)
82768289
static void *md_seq_start(struct seq_file *seq, loff_t *pos)
82778290
__acquires(&all_mddevs_lock)
82788291
{
8279-
struct md_personality *pers;
8280-
8281-
seq_puts(seq, "Personalities : ");
8282-
spin_lock(&pers_lock);
8283-
list_for_each_entry(pers, &pers_list, list)
8284-
seq_printf(seq, "[%s] ", pers->name);
8285-
8286-
spin_unlock(&pers_lock);
8287-
seq_puts(seq, "\n");
82888292
seq->poll_event = atomic_read(&md_event_count);
8289-
82908293
spin_lock(&all_mddevs_lock);
82918294

8292-
return seq_list_start(&all_mddevs, *pos);
8295+
return seq_list_start_head(&all_mddevs, *pos);
82938296
}
82948297

82958298
static void *md_seq_next(struct seq_file *seq, void *v, loff_t *pos)
@@ -8300,16 +8303,23 @@ static void *md_seq_next(struct seq_file *seq, void *v, loff_t *pos)
83008303
static void md_seq_stop(struct seq_file *seq, void *v)
83018304
__releases(&all_mddevs_lock)
83028305
{
8303-
status_unused(seq);
83048306
spin_unlock(&all_mddevs_lock);
83058307
}
83068308

83078309
static int md_seq_show(struct seq_file *seq, void *v)
83088310
{
8309-
struct mddev *mddev = list_entry(v, struct mddev, all_mddevs);
8311+
struct mddev *mddev;
83108312
sector_t sectors;
83118313
struct md_rdev *rdev;
83128314

8315+
if (v == &all_mddevs) {
8316+
status_personalities(seq);
8317+
if (list_empty(&all_mddevs))
8318+
status_unused(seq);
8319+
return 0;
8320+
}
8321+
8322+
mddev = list_entry(v, struct mddev, all_mddevs);
83138323
if (!mddev_get(mddev))
83148324
return 0;
83158325

@@ -8385,6 +8395,10 @@ static int md_seq_show(struct seq_file *seq, void *v)
83858395
}
83868396
spin_unlock(&mddev->lock);
83878397
spin_lock(&all_mddevs_lock);
8398+
8399+
if (mddev == list_last_entry(&all_mddevs, struct mddev, all_mddevs))
8400+
status_unused(seq);
8401+
83888402
if (atomic_dec_and_test(&mddev->active))
83898403
__mddev_put(mddev);
83908404

drivers/md/raid1.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1968,12 +1968,12 @@ static void end_sync_write(struct bio *bio)
19681968
}
19691969

19701970
static int r1_sync_page_io(struct md_rdev *rdev, sector_t sector,
1971-
int sectors, struct page *page, int rw)
1971+
int sectors, struct page *page, blk_opf_t rw)
19721972
{
19731973
if (sync_page_io(rdev, sector, sectors << 9, page, rw, false))
19741974
/* success */
19751975
return 1;
1976-
if (rw == WRITE) {
1976+
if (rw == REQ_OP_WRITE) {
19771977
set_bit(WriteErrorSeen, &rdev->flags);
19781978
if (!test_and_set_bit(WantReplacement,
19791979
&rdev->flags))
@@ -2090,7 +2090,7 @@ static int fix_sync_read_error(struct r1bio *r1_bio)
20902090
rdev = conf->mirrors[d].rdev;
20912091
if (r1_sync_page_io(rdev, sect, s,
20922092
pages[idx],
2093-
WRITE) == 0) {
2093+
REQ_OP_WRITE) == 0) {
20942094
r1_bio->bios[d]->bi_end_io = NULL;
20952095
rdev_dec_pending(rdev, mddev);
20962096
}
@@ -2105,7 +2105,7 @@ static int fix_sync_read_error(struct r1bio *r1_bio)
21052105
rdev = conf->mirrors[d].rdev;
21062106
if (r1_sync_page_io(rdev, sect, s,
21072107
pages[idx],
2108-
READ) != 0)
2108+
REQ_OP_READ) != 0)
21092109
atomic_add(s, &rdev->corrected_errors);
21102110
}
21112111
sectors -= s;
@@ -2321,7 +2321,7 @@ static void fix_read_error(struct r1conf *conf, struct r1bio *r1_bio)
23212321
!test_bit(Faulty, &rdev->flags)) {
23222322
atomic_inc(&rdev->nr_pending);
23232323
r1_sync_page_io(rdev, sect, s,
2324-
conf->tmppage, WRITE);
2324+
conf->tmppage, REQ_OP_WRITE);
23252325
rdev_dec_pending(rdev, mddev);
23262326
}
23272327
}
@@ -2335,7 +2335,7 @@ static void fix_read_error(struct r1conf *conf, struct r1bio *r1_bio)
23352335
!test_bit(Faulty, &rdev->flags)) {
23362336
atomic_inc(&rdev->nr_pending);
23372337
if (r1_sync_page_io(rdev, sect, s,
2338-
conf->tmppage, READ)) {
2338+
conf->tmppage, REQ_OP_READ)) {
23392339
atomic_add(s, &rdev->corrected_errors);
23402340
pr_info("md/raid1:%s: read error corrected (%d sectors at %llu on %pg)\n",
23412341
mdname(mddev), s,

0 commit comments

Comments
 (0)