Commit 8d31ed3b authored by Yu Kuai's avatar Yu Kuai
Browse files

md/raid1: check before referencing mddev->bitmap_ops

parent 20cecae8
Loading
Loading
Loading
Loading
+13 −9
Original line number Diff line number Diff line
@@ -2820,6 +2820,7 @@ static sector_t raid1_sync_request(struct mddev *mddev, sector_t sector_nr,
		else /* completed sync */
			conf->fullsync = 0;

		if (md_bitmap_enabled(mddev, false))
			mddev->bitmap_ops->close_sync(mddev);
		close_sync(conf);

@@ -2857,10 +2858,11 @@ static sector_t raid1_sync_request(struct mddev *mddev, sector_t sector_nr,
	/* we are incrementing sector_nr below. To be safe, we check against
	 * sector_nr + two times RESYNC_SECTORS
	 */

	if (md_bitmap_enabled(mddev, false))
		mddev->bitmap_ops->cond_end_sync(mddev, sector_nr,
			mddev_is_clustered(mddev) &&
		(sector_nr + 2 * RESYNC_SECTORS > conf->cluster_sync_high));
			(sector_nr + 2 * RESYNC_SECTORS >
			 conf->cluster_sync_high));

	if (raise_barrier(conf, sector_nr))
		return 0;
@@ -3335,15 +3337,17 @@ static int raid1_resize(struct mddev *mddev, sector_t sectors)
	 * worth it.
	 */
	sector_t newsize = raid1_size(mddev, sectors, 0);
	int ret;

	if (mddev->external_size &&
	    mddev->array_sectors > newsize)
		return -EINVAL;

	ret = mddev->bitmap_ops->resize(mddev, newsize, 0);
	if (md_bitmap_enabled(mddev, false)) {
		int ret = mddev->bitmap_ops->resize(mddev, newsize, 0);

		if (ret)
			return ret;
	}

	md_set_array_sectors(mddev, newsize);
	if (sectors > mddev->dev_sectors &&