diff options
| author | Jens Axboe <axboe@kernel.dk> | 2019-04-10 16:42:02 -0600 |
|---|---|---|
| committer | Jens Axboe <axboe@kernel.dk> | 2019-04-10 16:42:02 -0600 |
| commit | 22391ac30ab9cc2ba610bf7ea2244840b83c8017 (patch) | |
| tree | 0e9bde94b7410e5c4e6e81ac2e0a2e1170e911b7 /drivers/md/md.c | |
| parent | 0d413829bd20d5563c2c3287479a7348810cb13f (diff) | |
| parent | efcd487c69b9d968552a6bf80e7839c4f28b419d (diff) | |
Merge branch 'md-next' of https://github.com/liu-song-6/linux into for-5.2/block
Pull MD changes from Song.
* 'md-next' of https://github.com/liu-song-6/linux:
md: add __acquires/__releases annotations to handle_active_stripes
md: add __acquires/__releases annotations to (un)lock_two_stripes
md: mark md_cluster_mod static
md: use correct type in super_1_sync
md: use correct type in super_1_load
md: use correct types in md_bitmap_print_sb
md: add a missing endianness conversion in check_sb_changes
md: add mddev->pers to avoid potential NULL pointer dereference
Diffstat (limited to 'drivers/md/md.c')
| -rw-r--r-- | drivers/md/md.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c index 1fa2682951f1..541015373f6a 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -88,8 +88,7 @@ static struct kobj_type md_ktype; struct md_cluster_operations *md_cluster_ops; EXPORT_SYMBOL(md_cluster_ops); -struct module *md_cluster_mod; -EXPORT_SYMBOL(md_cluster_mod); +static struct module *md_cluster_mod; static DECLARE_WAIT_QUEUE_HEAD(resync_wait); static struct workqueue_struct *md_wq; @@ -1548,7 +1547,7 @@ static int super_1_load(struct md_rdev *rdev, struct md_rdev *refdev, int minor_ */ s32 offset; sector_t bb_sector; - u64 *bbp; + __le64 *bbp; int i; int sectors = le16_to_cpu(sb->bblog_size); if (sectors > (PAGE_SIZE / 512)) @@ -1560,7 +1559,7 @@ static int super_1_load(struct md_rdev *rdev, struct md_rdev *refdev, int minor_ if (!sync_page_io(rdev, bb_sector, sectors << 9, rdev->bb_page, REQ_OP_READ, 0, true)) return -EIO; - bbp = (u64 *)page_address(rdev->bb_page); + bbp = (__le64 *)page_address(rdev->bb_page); rdev->badblocks.shift = sb->bblog_shift; for (i = 0 ; i < (sectors << (9-3)) ; i++, bbp++) { u64 bb = le64_to_cpu(*bbp); @@ -1872,7 +1871,7 @@ static void super_1_sync(struct mddev *mddev, struct md_rdev *rdev) md_error(mddev, rdev); else { struct badblocks *bb = &rdev->badblocks; - u64 *bbp = (u64 *)page_address(rdev->bb_page); + __le64 *bbp = (__le64 *)page_address(rdev->bb_page); u64 *p = bb->page; sb->feature_map |= cpu_to_le32(MD_FEATURE_BAD_BLOCKS); if (bb->changed) { @@ -2850,8 +2849,10 @@ state_store(struct md_rdev *rdev, const char *buf, size_t len) err = 0; } } else if (cmd_match(buf, "re-add")) { - if (test_bit(Faulty, &rdev->flags) && (rdev->raid_disk == -1) && - rdev->saved_raid_disk >= 0) { + if (!rdev->mddev->pers) + err = -EINVAL; + else if (test_bit(Faulty, &rdev->flags) && (rdev->raid_disk == -1) && + rdev->saved_raid_disk >= 0) { /* clear_bit is performed _after_ all the devices * have their local Faulty bit cleared. If any writes * happen in the meantime in the local node, they @@ -9225,7 +9226,7 @@ static void check_sb_changes(struct mddev *mddev, struct md_rdev *rdev) * reshape is happening in the remote node, we need to * update reshape_position and call start_reshape. */ - mddev->reshape_position = sb->reshape_position; + mddev->reshape_position = le64_to_cpu(sb->reshape_position); if (mddev->pers->update_reshape_pos) mddev->pers->update_reshape_pos(mddev); if (mddev->pers->start_reshape) |
