File Index
Files and directories
Sign in
FILE

dm-raid.c

File preview with syntax highlighting.

linux-6.19.14/drivers/md/dm-raid.c C
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * Copyright (C) 2010-2011 Neil Brown
   4 * Copyright (C) 2010-2018 Red Hat, Inc. All rights reserved.
   5 *
   6 * This file is released under the GPL.
   7 */
   8
   9#include <linux/slab.h>
  10#include <linux/module.h>
  11
  12#include "md.h"
  13#include "raid1.h"
  14#include "raid5.h"
  15#include "raid10.h"
  16#include "md-bitmap.h"
  17
  18#include <linux/device-mapper.h>
  19
  20#define DM_MSG_PREFIX "raid"
  21#define	MAX_RAID_DEVICES	253 /* md-raid kernel limit */
  22
  23/*
  24 * Minimum sectors of free reshape space per raid device
  25 */
  26#define	MIN_FREE_RESHAPE_SPACE to_sector(4*4096)
  27
  28/*
  29 * Minimum journal space 4 MiB in sectors.
  30 */
  31#define	MIN_RAID456_JOURNAL_SPACE (4*2048)
  32
  33static bool devices_handle_discard_safely;
  34
  35/*
  36 * The following flags are used by dm-raid to set up the array state.
  37 * They must be cleared before md_run is called.
  38 */
  39#define FirstUse 10		/* rdev flag */
  40
  41struct raid_dev {
  42	/*
  43	 * Two DM devices, one to hold metadata and one to hold the
  44	 * actual data/parity.	The reason for this is to not confuse
  45	 * ti->len and give more flexibility in altering size and
  46	 * characteristics.
  47	 *
  48	 * While it is possible for this device to be associated
  49	 * with a different physical device than the data_dev, it
  50	 * is intended for it to be the same.
  51	 *    |--------- Physical Device ---------|
  52	 *    |- meta_dev -|------ data_dev ------|
  53	 */
  54	struct dm_dev *meta_dev;
  55	struct dm_dev *data_dev;
  56	struct md_rdev rdev;
  57};
  58
  59/*
  60 * Bits for establishing rs->ctr_flags
  61 *
  62 * 1 = no flag value
  63 * 2 = flag with value
  64 */
  65#define __CTR_FLAG_SYNC			0  /* 1 */ /* Not with raid0! */
  66#define __CTR_FLAG_NOSYNC		1  /* 1 */ /* Not with raid0! */
  67#define __CTR_FLAG_REBUILD		2  /* 2 */ /* Not with raid0! */
  68#define __CTR_FLAG_DAEMON_SLEEP		3  /* 2 */ /* Not with raid0! */
  69#define __CTR_FLAG_MIN_RECOVERY_RATE	4  /* 2 */ /* Not with raid0! */
  70#define __CTR_FLAG_MAX_RECOVERY_RATE	5  /* 2 */ /* Not with raid0! */
  71#define __CTR_FLAG_MAX_WRITE_BEHIND	6  /* 2 */ /* Only with raid1! */
  72#define __CTR_FLAG_WRITE_MOSTLY		7  /* 2 */ /* Only with raid1! */
  73#define __CTR_FLAG_STRIPE_CACHE		8  /* 2 */ /* Only with raid4/5/6! */
  74#define __CTR_FLAG_REGION_SIZE		9  /* 2 */ /* Not with raid0! */
  75#define __CTR_FLAG_RAID10_COPIES	10 /* 2 */ /* Only with raid10 */
  76#define __CTR_FLAG_RAID10_FORMAT	11 /* 2 */ /* Only with raid10 */
  77/* New for v1.9.0 */
  78#define __CTR_FLAG_DELTA_DISKS		12 /* 2 */ /* Only with reshapable raid1/4/5/6/10! */
  79#define __CTR_FLAG_DATA_OFFSET		13 /* 2 */ /* Only with reshapable raid4/5/6/10! */
  80#define __CTR_FLAG_RAID10_USE_NEAR_SETS 14 /* 2 */ /* Only with raid10! */
  81
  82/* New for v1.10.0 */
  83#define __CTR_FLAG_JOURNAL_DEV		15 /* 2 */ /* Only with raid4/5/6 (journal device)! */
  84
  85/* New for v1.11.1 */
  86#define __CTR_FLAG_JOURNAL_MODE		16 /* 2 */ /* Only with raid4/5/6 (journal mode)! */
  87
  88/*
  89 * Flags for rs->ctr_flags field.
  90 */
  91#define CTR_FLAG_SYNC			(1 << __CTR_FLAG_SYNC)
  92#define CTR_FLAG_NOSYNC			(1 << __CTR_FLAG_NOSYNC)
  93#define CTR_FLAG_REBUILD		(1 << __CTR_FLAG_REBUILD)
  94#define CTR_FLAG_DAEMON_SLEEP		(1 << __CTR_FLAG_DAEMON_SLEEP)
  95#define CTR_FLAG_MIN_RECOVERY_RATE	(1 << __CTR_FLAG_MIN_RECOVERY_RATE)
  96#define CTR_FLAG_MAX_RECOVERY_RATE	(1 << __CTR_FLAG_MAX_RECOVERY_RATE)
  97#define CTR_FLAG_MAX_WRITE_BEHIND	(1 << __CTR_FLAG_MAX_WRITE_BEHIND)
  98#define CTR_FLAG_WRITE_MOSTLY		(1 << __CTR_FLAG_WRITE_MOSTLY)
  99#define CTR_FLAG_STRIPE_CACHE		(1 << __CTR_FLAG_STRIPE_CACHE)
 100#define CTR_FLAG_REGION_SIZE		(1 << __CTR_FLAG_REGION_SIZE)
 101#define CTR_FLAG_RAID10_COPIES		(1 << __CTR_FLAG_RAID10_COPIES)
 102#define CTR_FLAG_RAID10_FORMAT		(1 << __CTR_FLAG_RAID10_FORMAT)
 103#define CTR_FLAG_DELTA_DISKS		(1 << __CTR_FLAG_DELTA_DISKS)
 104#define CTR_FLAG_DATA_OFFSET		(1 << __CTR_FLAG_DATA_OFFSET)
 105#define CTR_FLAG_RAID10_USE_NEAR_SETS	(1 << __CTR_FLAG_RAID10_USE_NEAR_SETS)
 106#define CTR_FLAG_JOURNAL_DEV		(1 << __CTR_FLAG_JOURNAL_DEV)
 107#define CTR_FLAG_JOURNAL_MODE		(1 << __CTR_FLAG_JOURNAL_MODE)
 108
 109/*
 110 * Definitions of various constructor flags to
 111 * be used in checks of valid / invalid flags
 112 * per raid level.
 113 */
 114/* Define all any sync flags */
 115#define	CTR_FLAGS_ANY_SYNC		(CTR_FLAG_SYNC | CTR_FLAG_NOSYNC)
 116
 117/* Define flags for options without argument (e.g. 'nosync') */
 118#define	CTR_FLAG_OPTIONS_NO_ARGS	(CTR_FLAGS_ANY_SYNC | \
 119					 CTR_FLAG_RAID10_USE_NEAR_SETS)
 120
 121/* Define flags for options with one argument (e.g. 'delta_disks +2') */
 122#define CTR_FLAG_OPTIONS_ONE_ARG (CTR_FLAG_REBUILD | \
 123				  CTR_FLAG_WRITE_MOSTLY | \
 124				  CTR_FLAG_DAEMON_SLEEP | \
 125				  CTR_FLAG_MIN_RECOVERY_RATE | \
 126				  CTR_FLAG_MAX_RECOVERY_RATE | \
 127				  CTR_FLAG_MAX_WRITE_BEHIND | \
 128				  CTR_FLAG_STRIPE_CACHE | \
 129				  CTR_FLAG_REGION_SIZE | \
 130				  CTR_FLAG_RAID10_COPIES | \
 131				  CTR_FLAG_RAID10_FORMAT | \
 132				  CTR_FLAG_DELTA_DISKS | \
 133				  CTR_FLAG_DATA_OFFSET | \
 134				  CTR_FLAG_JOURNAL_DEV | \
 135				  CTR_FLAG_JOURNAL_MODE)
 136
 137/* Valid options definitions per raid level... */
 138
 139/* "raid0" does only accept data offset */
 140#define RAID0_VALID_FLAGS	(CTR_FLAG_DATA_OFFSET)
 141
 142/* "raid1" does not accept stripe cache, data offset, delta_disks or any raid10 options */
 143#define RAID1_VALID_FLAGS	(CTR_FLAGS_ANY_SYNC | \
 144				 CTR_FLAG_REBUILD | \
 145				 CTR_FLAG_WRITE_MOSTLY | \
 146				 CTR_FLAG_DAEMON_SLEEP | \
 147				 CTR_FLAG_MIN_RECOVERY_RATE | \
 148				 CTR_FLAG_MAX_RECOVERY_RATE | \
 149				 CTR_FLAG_MAX_WRITE_BEHIND | \
 150				 CTR_FLAG_REGION_SIZE | \
 151				 CTR_FLAG_DELTA_DISKS | \
 152				 CTR_FLAG_DATA_OFFSET)
 153
 154/* "raid10" does not accept any raid1 or stripe cache options */
 155#define RAID10_VALID_FLAGS	(CTR_FLAGS_ANY_SYNC | \
 156				 CTR_FLAG_REBUILD | \
 157				 CTR_FLAG_DAEMON_SLEEP | \
 158				 CTR_FLAG_MIN_RECOVERY_RATE | \
 159				 CTR_FLAG_MAX_RECOVERY_RATE | \
 160				 CTR_FLAG_REGION_SIZE | \
 161				 CTR_FLAG_RAID10_COPIES | \
 162				 CTR_FLAG_RAID10_FORMAT | \
 163				 CTR_FLAG_DELTA_DISKS | \
 164				 CTR_FLAG_DATA_OFFSET | \
 165				 CTR_FLAG_RAID10_USE_NEAR_SETS)
 166
 167/*
 168 * "raid4/5/6" do not accept any raid1 or raid10 specific options
 169 *
 170 * "raid6" does not accept "nosync", because it is not guaranteed
 171 * that both parity and q-syndrome are being written properly with
 172 * any writes
 173 */
 174#define RAID45_VALID_FLAGS	(CTR_FLAGS_ANY_SYNC | \
 175				 CTR_FLAG_REBUILD | \
 176				 CTR_FLAG_DAEMON_SLEEP | \
 177				 CTR_FLAG_MIN_RECOVERY_RATE | \
 178				 CTR_FLAG_MAX_RECOVERY_RATE | \
 179				 CTR_FLAG_STRIPE_CACHE | \
 180				 CTR_FLAG_REGION_SIZE | \
 181				 CTR_FLAG_DELTA_DISKS | \
 182				 CTR_FLAG_DATA_OFFSET | \
 183				 CTR_FLAG_JOURNAL_DEV | \
 184				 CTR_FLAG_JOURNAL_MODE)
 185
 186#define RAID6_VALID_FLAGS	(CTR_FLAG_SYNC | \
 187				 CTR_FLAG_REBUILD | \
 188				 CTR_FLAG_DAEMON_SLEEP | \
 189				 CTR_FLAG_MIN_RECOVERY_RATE | \
 190				 CTR_FLAG_MAX_RECOVERY_RATE | \
 191				 CTR_FLAG_STRIPE_CACHE | \
 192				 CTR_FLAG_REGION_SIZE | \
 193				 CTR_FLAG_DELTA_DISKS | \
 194				 CTR_FLAG_DATA_OFFSET | \
 195				 CTR_FLAG_JOURNAL_DEV | \
 196				 CTR_FLAG_JOURNAL_MODE)
 197/* ...valid options definitions per raid level */
 198
 199/*
 200 * Flags for rs->runtime_flags field
 201 * (RT_FLAG prefix meaning "runtime flag")
 202 *
 203 * These are all internal and used to define runtime state,
 204 * e.g. to prevent another resume from preresume processing
 205 * the raid set all over again.
 206 */
 207#define RT_FLAG_RS_PRERESUMED		0
 208#define RT_FLAG_RS_RESUMED		1
 209#define RT_FLAG_RS_BITMAP_LOADED	2
 210#define RT_FLAG_UPDATE_SBS		3
 211#define RT_FLAG_RESHAPE_RS		4
 212#define RT_FLAG_RS_SUSPENDED		5
 213#define RT_FLAG_RS_IN_SYNC		6
 214#define RT_FLAG_RS_RESYNCING		7
 215#define RT_FLAG_RS_GROW			8
 216#define RT_FLAG_RS_FROZEN		9
 217
 218/* Array elements of 64 bit needed for rebuild/failed disk bits */
 219#define DISKS_ARRAY_ELEMS ((MAX_RAID_DEVICES + (sizeof(uint64_t) * 8 - 1)) / sizeof(uint64_t) / 8)
 220
 221/*
 222 * raid set level, layout and chunk sectors backup/restore
 223 */
 224struct rs_layout {
 225	int new_level;
 226	int new_layout;
 227	int new_chunk_sectors;
 228};
 229
 230struct raid_set {
 231	struct dm_target *ti;
 232
 233	uint32_t stripe_cache_entries;
 234	unsigned long ctr_flags;
 235	unsigned long runtime_flags;
 236
 237	uint64_t rebuild_disks[DISKS_ARRAY_ELEMS];
 238
 239	int raid_disks;
 240	int delta_disks;
 241	int data_offset;
 242	int raid10_copies;
 243	int requested_bitmap_chunk_sectors;
 244
 245	struct mddev md;
 246	struct raid_type *raid_type;
 247
 248	sector_t array_sectors;
 249	sector_t dev_sectors;
 250
 251	/* Optional raid4/5/6 journal device */
 252	struct journal_dev {
 253		struct dm_dev *dev;
 254		struct md_rdev rdev;
 255		int mode;
 256	} journal_dev;
 257
 258	struct raid_dev dev[] __counted_by(raid_disks);
 259};
 260
 261static void rs_config_backup(struct raid_set *rs, struct rs_layout *l)
 262{
 263	struct mddev *mddev = &rs->md;
 264
 265	l->new_level = mddev->new_level;
 266	l->new_layout = mddev->new_layout;
 267	l->new_chunk_sectors = mddev->new_chunk_sectors;
 268}
 269
 270static void rs_config_restore(struct raid_set *rs, struct rs_layout *l)
 271{
 272	struct mddev *mddev = &rs->md;
 273
 274	mddev->new_level = l->new_level;
 275	mddev->new_layout = l->new_layout;
 276	mddev->new_chunk_sectors = l->new_chunk_sectors;
 277}
 278
 279/* raid10 algorithms (i.e. formats) */
 280#define	ALGORITHM_RAID10_DEFAULT	0
 281#define	ALGORITHM_RAID10_NEAR		1
 282#define	ALGORITHM_RAID10_OFFSET		2
 283#define	ALGORITHM_RAID10_FAR		3
 284
 285/* Supported raid types and properties. */
 286static struct raid_type {
 287	const char *name;		/* RAID algorithm. */
 288	const char *descr;		/* Descriptor text for logging. */
 289	const unsigned int parity_devs;	/* # of parity devices. */
 290	const unsigned int minimal_devs;/* minimal # of devices in set. */
 291	const unsigned int level;	/* RAID level. */
 292	const unsigned int algorithm;	/* RAID algorithm. */
 293} raid_types[] = {
 294	{"raid0",	  "raid0 (striping)",			    0, 2, 0,  0 /* NONE */},
 295	{"raid1",	  "raid1 (mirroring)",			    0, 2, 1,  0 /* NONE */},
 296	{"raid10_far",	  "raid10 far (striped mirrors)",	    0, 2, 10, ALGORITHM_RAID10_FAR},
 297	{"raid10_offset", "raid10 offset (striped mirrors)",	    0, 2, 10, ALGORITHM_RAID10_OFFSET},
 298	{"raid10_near",	  "raid10 near (striped mirrors)",	    0, 2, 10, ALGORITHM_RAID10_NEAR},
 299	{"raid10",	  "raid10 (striped mirrors)",		    0, 2, 10, ALGORITHM_RAID10_DEFAULT},
 300	{"raid4",	  "raid4 (dedicated first parity disk)",    1, 2, 5,  ALGORITHM_PARITY_0}, /* raid4 layout = raid5_0 */
 301	{"raid5_n",	  "raid5 (dedicated last parity disk)",	    1, 2, 5,  ALGORITHM_PARITY_N},
 302	{"raid5_ls",	  "raid5 (left symmetric)",		    1, 2, 5,  ALGORITHM_LEFT_SYMMETRIC},
 303	{"raid5_rs",	  "raid5 (right symmetric)",		    1, 2, 5,  ALGORITHM_RIGHT_SYMMETRIC},
 304	{"raid5_la",	  "raid5 (left asymmetric)",		    1, 2, 5,  ALGORITHM_LEFT_ASYMMETRIC},
 305	{"raid5_ra",	  "raid5 (right asymmetric)",		    1, 2, 5,  ALGORITHM_RIGHT_ASYMMETRIC},
 306	{"raid6_zr",	  "raid6 (zero restart)",		    2, 4, 6,  ALGORITHM_ROTATING_ZERO_RESTART},
 307	{"raid6_nr",	  "raid6 (N restart)",			    2, 4, 6,  ALGORITHM_ROTATING_N_RESTART},
 308	{"raid6_nc",	  "raid6 (N continue)",			    2, 4, 6,  ALGORITHM_ROTATING_N_CONTINUE},
 309	{"raid6_n_6",	  "raid6 (dedicated parity/Q n/6)",	    2, 4, 6,  ALGORITHM_PARITY_N_6},
 310	{"raid6_ls_6",	  "raid6 (left symmetric dedicated Q 6)",   2, 4, 6,  ALGORITHM_LEFT_SYMMETRIC_6},
 311	{"raid6_rs_6",	  "raid6 (right symmetric dedicated Q 6)",  2, 4, 6,  ALGORITHM_RIGHT_SYMMETRIC_6},
 312	{"raid6_la_6",	  "raid6 (left asymmetric dedicated Q 6)",  2, 4, 6,  ALGORITHM_LEFT_ASYMMETRIC_6},
 313	{"raid6_ra_6",	  "raid6 (right asymmetric dedicated Q 6)", 2, 4, 6,  ALGORITHM_RIGHT_ASYMMETRIC_6}
 314};
 315
 316/* True, if @v is in inclusive range [@min, @max] */
 317static bool __within_range(long v, long min, long max)
 318{
 319	return v >= min && v <= max;
 320}
 321
 322/* All table line arguments are defined here */
 323static struct arg_name_flag {
 324	const unsigned long flag;
 325	const char *name;
 326} __arg_name_flags[] = {
 327	{ CTR_FLAG_SYNC, "sync"},
 328	{ CTR_FLAG_NOSYNC, "nosync"},
 329	{ CTR_FLAG_REBUILD, "rebuild"},
 330	{ CTR_FLAG_DAEMON_SLEEP, "daemon_sleep"},
 331	{ CTR_FLAG_MIN_RECOVERY_RATE, "min_recovery_rate"},
 332	{ CTR_FLAG_MAX_RECOVERY_RATE, "max_recovery_rate"},
 333	{ CTR_FLAG_MAX_WRITE_BEHIND, "max_write_behind"},
 334	{ CTR_FLAG_WRITE_MOSTLY, "write_mostly"},
 335	{ CTR_FLAG_STRIPE_CACHE, "stripe_cache"},
 336	{ CTR_FLAG_REGION_SIZE, "region_size"},
 337	{ CTR_FLAG_RAID10_COPIES, "raid10_copies"},
 338	{ CTR_FLAG_RAID10_FORMAT, "raid10_format"},
 339	{ CTR_FLAG_DATA_OFFSET, "data_offset"},
 340	{ CTR_FLAG_DELTA_DISKS, "delta_disks"},
 341	{ CTR_FLAG_RAID10_USE_NEAR_SETS, "raid10_use_near_sets"},
 342	{ CTR_FLAG_JOURNAL_DEV, "journal_dev" },
 343	{ CTR_FLAG_JOURNAL_MODE, "journal_mode" },
 344};
 345
 346/* Return argument name string for given @flag */
 347static const char *dm_raid_arg_name_by_flag(const uint32_t flag)
 348{
 349	if (hweight32(flag) == 1) {
 350		struct arg_name_flag *anf = __arg_name_flags + ARRAY_SIZE(__arg_name_flags);
 351
 352		while (anf-- > __arg_name_flags)
 353			if (flag & anf->flag)
 354				return anf->name;
 355
 356	} else
 357		DMERR("%s called with more than one flag!", __func__);
 358
 359	return NULL;
 360}
 361
 362/* Define correlation of raid456 journal cache modes and dm-raid target line parameters */
 363static struct {
 364	const int mode;
 365	const char *param;
 366} _raid456_journal_mode[] = {
 367	{ R5C_JOURNAL_MODE_WRITE_THROUGH, "writethrough" },
 368	{ R5C_JOURNAL_MODE_WRITE_BACK,    "writeback" }
 369};
 370
 371/* Return MD raid4/5/6 journal mode for dm @journal_mode one */
 372static int dm_raid_journal_mode_to_md(const char *mode)
 373{
 374	int m = ARRAY_SIZE(_raid456_journal_mode);
 375
 376	while (m--)
 377		if (!strcasecmp(mode, _raid456_journal_mode[m].param))
 378			return _raid456_journal_mode[m].mode;
 379
 380	return -EINVAL;
 381}
 382
 383/* Return dm-raid raid4/5/6 journal mode string for @mode */
 384static const char *md_journal_mode_to_dm_raid(const int mode)
 385{
 386	int m = ARRAY_SIZE(_raid456_journal_mode);
 387
 388	while (m--)
 389		if (mode == _raid456_journal_mode[m].mode)
 390			return _raid456_journal_mode[m].param;
 391
 392	return "unknown";
 393}
 394
 395/*
 396 * Bool helpers to test for various raid levels of a raid set.
 397 * It's level as reported by the superblock rather than
 398 * the requested raid_type passed to the constructor.
 399 */
 400/* Return true, if raid set in @rs is raid0 */
 401static bool rs_is_raid0(struct raid_set *rs)
 402{
 403	return !rs->md.level;
 404}
 405
 406/* Return true, if raid set in @rs is raid1 */
 407static bool rs_is_raid1(struct raid_set *rs)
 408{
 409	return rs->md.level == 1;
 410}
 411
 412/* Return true, if raid set in @rs is raid10 */
 413static bool rs_is_raid10(struct raid_set *rs)
 414{
 415	return rs->md.level == 10;
 416}
 417
 418/* Return true, if raid set in @rs is level 6 */
 419static bool rs_is_raid6(struct raid_set *rs)
 420{
 421	return rs->md.level == 6;
 422}
 423
 424/* Return true, if raid set in @rs is level 4, 5 or 6 */
 425static bool rs_is_raid456(struct raid_set *rs)
 426{
 427	return __within_range(rs->md.level, 4, 6);
 428}
 429
 430/* Return true, if raid set in @rs is reshapable */
 431static bool __is_raid10_far(int layout);
 432static bool rs_is_reshapable(struct raid_set *rs)
 433{
 434	return rs_is_raid456(rs) ||
 435	       (rs_is_raid10(rs) && !__is_raid10_far(rs->md.new_layout));
 436}
 437
 438/* Return true, if raid set in @rs is recovering */
 439static bool rs_is_recovering(struct raid_set *rs)
 440{
 441	return rs->md.resync_offset < rs->md.dev_sectors;
 442}
 443
 444/* Return true, if raid set in @rs is reshaping */
 445static bool rs_is_reshaping(struct raid_set *rs)
 446{
 447	return rs->md.reshape_position != MaxSector;
 448}
 449
 450/*
 451 * bool helpers to test for various raid levels of a raid type @rt
 452 */
 453
 454/* Return true, if raid type in @rt is raid0 */
 455static bool rt_is_raid0(struct raid_type *rt)
 456{
 457	return !rt->level;
 458}
 459
 460/* Return true, if raid type in @rt is raid1 */
 461static bool rt_is_raid1(struct raid_type *rt)
 462{
 463	return rt->level == 1;
 464}
 465
 466/* Return true, if raid type in @rt is raid10 */
 467static bool rt_is_raid10(struct raid_type *rt)
 468{
 469	return rt->level == 10;
 470}
 471
 472/* Return true, if raid type in @rt is raid4/5 */
 473static bool rt_is_raid45(struct raid_type *rt)
 474{
 475	return __within_range(rt->level, 4, 5);
 476}
 477
 478/* Return true, if raid type in @rt is raid6 */
 479static bool rt_is_raid6(struct raid_type *rt)
 480{
 481	return rt->level == 6;
 482}
 483
 484/* Return true, if raid type in @rt is raid4/5/6 */
 485static bool rt_is_raid456(struct raid_type *rt)
 486{
 487	return __within_range(rt->level, 4, 6);
 488}
 489/* END: raid level bools */
 490
 491/* Return valid ctr flags for the raid level of @rs */
 492static unsigned long __valid_flags(struct raid_set *rs)
 493{
 494	if (rt_is_raid0(rs->raid_type))
 495		return RAID0_VALID_FLAGS;
 496	else if (rt_is_raid1(rs->raid_type))
 497		return RAID1_VALID_FLAGS;
 498	else if (rt_is_raid10(rs->raid_type))
 499		return RAID10_VALID_FLAGS;
 500	else if (rt_is_raid45(rs->raid_type))
 501		return RAID45_VALID_FLAGS;
 502	else if (rt_is_raid6(rs->raid_type))
 503		return RAID6_VALID_FLAGS;
 504
 505	return 0;
 506}
 507
 508/*
 509 * Check for valid flags set on @rs
 510 *
 511 * Has to be called after parsing of the ctr flags!
 512 */
 513static int rs_check_for_valid_flags(struct raid_set *rs)
 514{
 515	if (rs->ctr_flags & ~__valid_flags(rs)) {
 516		rs->ti->error = "Invalid flags combination";
 517		return -EINVAL;
 518	}
 519
 520	return 0;
 521}
 522
 523/* MD raid10 bit definitions and helpers */
 524#define RAID10_OFFSET			(1 << 16) /* stripes with data copies area adjacent on devices */
 525#define RAID10_BROCKEN_USE_FAR_SETS	(1 << 17) /* Broken in raid10.c: use sets instead of whole stripe rotation */
 526#define RAID10_USE_FAR_SETS		(1 << 18) /* Use sets instead of whole stripe rotation */
 527#define RAID10_FAR_COPIES_SHIFT		8	  /* raid10 # far copies shift (2nd byte of layout) */
 528
 529/* Return md raid10 near copies for @layout */
 530static unsigned int __raid10_near_copies(int layout)
 531{
 532	return layout & 0xFF;
 533}
 534
 535/* Return md raid10 far copies for @layout */
 536static unsigned int __raid10_far_copies(int layout)
 537{
 538	return __raid10_near_copies(layout >> RAID10_FAR_COPIES_SHIFT);
 539}
 540
 541/* Return true if md raid10 offset for @layout */
 542static bool __is_raid10_offset(int layout)
 543{
 544	return !!(layout & RAID10_OFFSET);
 545}
 546
 547/* Return true if md raid10 near for @layout */
 548static bool __is_raid10_near(int layout)
 549{
 550	return !__is_raid10_offset(layout) && __raid10_near_copies(layout) > 1;
 551}
 552
 553/* Return true if md raid10 far for @layout */
 554static bool __is_raid10_far(int layout)
 555{
 556	return !__is_raid10_offset(layout) && __raid10_far_copies(layout) > 1;
 557}
 558
 559/* Return md raid10 layout string for @layout */
 560static const char *raid10_md_layout_to_format(int layout)
 561{
 562	/*
 563	 * Bit 16 stands for "offset"
 564	 * (i.e. adjacent stripes hold copies)
 565	 *
 566	 * Refer to MD's raid10.c for details
 567	 */
 568	if (__is_raid10_offset(layout))
 569		return "offset";
 570
 571	if (__raid10_near_copies(layout) > 1)
 572		return "near";
 573
 574	if (__raid10_far_copies(layout) > 1)
 575		return "far";
 576
 577	return "unknown";
 578}
 579
 580/* Return md raid10 algorithm for @name */
 581static int raid10_name_to_format(const char *name)
 582{
 583	if (!strcasecmp(name, "near"))
 584		return ALGORITHM_RAID10_NEAR;
 585	else if (!strcasecmp(name, "offset"))
 586		return ALGORITHM_RAID10_OFFSET;
 587	else if (!strcasecmp(name, "far"))
 588		return ALGORITHM_RAID10_FAR;
 589
 590	return -EINVAL;
 591}
 592
 593/* Return md raid10 copies for @layout */
 594static unsigned int raid10_md_layout_to_copies(int layout)
 595{
 596	return max(__raid10_near_copies(layout), __raid10_far_copies(layout));
 597}
 598
 599/* Return md raid10 format id for @format string */
 600static int raid10_format_to_md_layout(struct raid_set *rs,
 601				      unsigned int algorithm,
 602				      unsigned int copies)
 603{
 604	unsigned int n = 1, f = 1, r = 0;
 605
 606	/*
 607	 * MD resilienece flaw:
 608	 *
 609	 * enabling use_far_sets for far/offset formats causes copies
 610	 * to be colocated on the same devs together with their origins!
 611	 *
 612	 * -> disable it for now in the definition above
 613	 */
 614	if (algorithm == ALGORITHM_RAID10_DEFAULT ||
 615	    algorithm == ALGORITHM_RAID10_NEAR)
 616		n = copies;
 617
 618	else if (algorithm == ALGORITHM_RAID10_OFFSET) {
 619		f = copies;
 620		r = RAID10_OFFSET;
 621		if (!test_bit(__CTR_FLAG_RAID10_USE_NEAR_SETS, &rs->ctr_flags))
 622			r |= RAID10_USE_FAR_SETS;
 623
 624	} else if (algorithm == ALGORITHM_RAID10_FAR) {
 625		f = copies;
 626		if (!test_bit(__CTR_FLAG_RAID10_USE_NEAR_SETS, &rs->ctr_flags))
 627			r |= RAID10_USE_FAR_SETS;
 628
 629	} else
 630		return -EINVAL;
 631
 632	return r | (f << RAID10_FAR_COPIES_SHIFT) | n;
 633}
 634/* END: MD raid10 bit definitions and helpers */
 635
 636/* Check for any of the raid10 algorithms */
 637static bool __got_raid10(struct raid_type *rtp, const int layout)
 638{
 639	if (rtp->level == 10) {
 640		switch (rtp->algorithm) {
 641		case ALGORITHM_RAID10_DEFAULT:
 642		case ALGORITHM_RAID10_NEAR:
 643			return __is_raid10_near(layout);
 644		case ALGORITHM_RAID10_OFFSET:
 645			return __is_raid10_offset(layout);
 646		case ALGORITHM_RAID10_FAR:
 647			return __is_raid10_far(layout);
 648		default:
 649			break;
 650		}
 651	}
 652
 653	return false;
 654}
 655
 656/* Return raid_type for @name */
 657static struct raid_type *get_raid_type(const char *name)
 658{
 659	struct raid_type *rtp = raid_types + ARRAY_SIZE(raid_types);
 660
 661	while (rtp-- > raid_types)
 662		if (!strcasecmp(rtp->name, name))
 663			return rtp;
 664
 665	return NULL;
 666}
 667
 668/* Return raid_type for @name based derived from @level and @layout */
 669static struct raid_type *get_raid_type_by_ll(const int level, const int layout)
 670{
 671	struct raid_type *rtp = raid_types + ARRAY_SIZE(raid_types);
 672
 673	while (rtp-- > raid_types) {
 674		/* RAID10 special checks based on @layout flags/properties */
 675		if (rtp->level == level &&
 676		    (__got_raid10(rtp, layout) || rtp->algorithm == layout))
 677			return rtp;
 678	}
 679
 680	return NULL;
 681}
 682
 683/* Adjust rdev sectors */
 684static void rs_set_rdev_sectors(struct raid_set *rs)
 685{
 686	struct mddev *mddev = &rs->md;
 687	struct md_rdev *rdev;
 688
 689	/*
 690	 * raid10 sets rdev->sector to the device size, which
 691	 * is unintended in case of out-of-place reshaping
 692	 */
 693	rdev_for_each(rdev, mddev)
 694		if (!test_bit(Journal, &rdev->flags))
 695			rdev->sectors = mddev->dev_sectors;
 696}
 697
 698/*
 699 * Change bdev capacity of @rs in case of a disk add/remove reshape
 700 */
 701static void rs_set_capacity(struct raid_set *rs)
 702{
 703	struct gendisk *gendisk = dm_disk(dm_table_get_md(rs->ti->table));
 704
 705	set_capacity_and_notify(gendisk, rs->md.array_sectors);
 706}
 707
 708/*
 709 * Set the mddev properties in @rs to the current
 710 * ones retrieved from the freshest superblock
 711 */
 712static void rs_set_cur(struct raid_set *rs)
 713{
 714	struct mddev *mddev = &rs->md;
 715
 716	mddev->new_level = mddev->level;
 717	mddev->new_layout = mddev->layout;
 718	mddev->new_chunk_sectors = mddev->chunk_sectors;
 719}
 720
 721/*
 722 * Set the mddev properties in @rs to the new
 723 * ones requested by the ctr
 724 */
 725static void rs_set_new(struct raid_set *rs)
 726{
 727	struct mddev *mddev = &rs->md;
 728
 729	mddev->level = mddev->new_level;
 730	mddev->layout = mddev->new_layout;
 731	mddev->chunk_sectors = mddev->new_chunk_sectors;
 732	mddev->raid_disks = rs->raid_disks;
 733	mddev->delta_disks = 0;
 734}
 735
 736static struct raid_set *raid_set_alloc(struct dm_target *ti, struct raid_type *raid_type,
 737				       unsigned int raid_devs)
 738{
 739	unsigned int i;
 740	struct raid_set *rs;
 741
 742	if (raid_devs <= raid_type->parity_devs) {
 743		ti->error = "Insufficient number of devices";
 744		return ERR_PTR(-EINVAL);
 745	}
 746
 747	rs = kzalloc(struct_size(rs, dev, raid_devs), GFP_KERNEL);
 748	if (!rs) {
 749		ti->error = "Cannot allocate raid context";
 750		return ERR_PTR(-ENOMEM);
 751	}
 752
 753	if (mddev_init(&rs->md)) {
 754		kfree(rs);
 755		ti->error = "Cannot initialize raid context";
 756		return ERR_PTR(-ENOMEM);
 757	}
 758
 759	rs->raid_disks = raid_devs;
 760	rs->delta_disks = 0;
 761
 762	rs->ti = ti;
 763	rs->raid_type = raid_type;
 764	rs->stripe_cache_entries = 256;
 765	rs->md.raid_disks = raid_devs;
 766	rs->md.level = raid_type->level;
 767	rs->md.new_level = rs->md.level;
 768	rs->md.layout = raid_type->algorithm;
 769	rs->md.new_layout = rs->md.layout;
 770	rs->md.delta_disks = 0;
 771	rs->md.resync_offset = MaxSector;
 772
 773	for (i = 0; i < raid_devs; i++)
 774		md_rdev_init(&rs->dev[i].rdev);
 775
 776	/*
 777	 * Remaining items to be initialized by further RAID params:
 778	 *  rs->md.persistent
 779	 *  rs->md.external
 780	 *  rs->md.chunk_sectors
 781	 *  rs->md.new_chunk_sectors
 782	 *  rs->md.dev_sectors
 783	 */
 784
 785	return rs;
 786}
 787
 788/* Free all @rs allocations */
 789static void raid_set_free(struct raid_set *rs)
 790{
 791	int i;
 792
 793	if (rs->journal_dev.dev) {
 794		md_rdev_clear(&rs->journal_dev.rdev);
 795		dm_put_device(rs->ti, rs->journal_dev.dev);
 796	}
 797
 798	for (i = 0; i < rs->raid_disks; i++) {
 799		if (rs->dev[i].meta_dev)
 800			dm_put_device(rs->ti, rs->dev[i].meta_dev);
 801		md_rdev_clear(&rs->dev[i].rdev);
 802		if (rs->dev[i].data_dev)
 803			dm_put_device(rs->ti, rs->dev[i].data_dev);
 804	}
 805
 806	mddev_destroy(&rs->md);
 807	kfree(rs);
 808}
 809
 810/*
 811 * For every device we have two words
 812 *  <meta_dev>: meta device name or '-' if missing
 813 *  <data_dev>: data device name or '-' if missing
 814 *
 815 * The following are permitted:
 816 *    - -
 817 *    - <data_dev>
 818 *    <meta_dev> <data_dev>
 819 *
 820 * The following is not allowed:
 821 *    <meta_dev> -
 822 *
 823 * This code parses those words.  If there is a failure,
 824 * the caller must use raid_set_free() to unwind the operations.
 825 */
 826static int parse_dev_params(struct raid_set *rs, struct dm_arg_set *as)
 827{
 828	int i;
 829	int rebuild = 0;
 830	int metadata_available = 0;
 831	int r = 0;
 832	const char *arg;
 833
 834	/* Put off the number of raid devices argument to get to dev pairs */
 835	arg = dm_shift_arg(as);
 836	if (!arg)
 837		return -EINVAL;
 838
 839	for (i = 0; i < rs->raid_disks; i++) {
 840		rs->dev[i].rdev.raid_disk = i;
 841
 842		rs->dev[i].meta_dev = NULL;
 843		rs->dev[i].data_dev = NULL;
 844
 845		/*
 846		 * There are no offsets initially.
 847		 * Out of place reshape will set them accordingly.
 848		 */
 849		rs->dev[i].rdev.data_offset = 0;
 850		rs->dev[i].rdev.new_data_offset = 0;
 851		rs->dev[i].rdev.mddev = &rs->md;
 852
 853		arg = dm_shift_arg(as);
 854		if (!arg)
 855			return -EINVAL;
 856
 857		if (strcmp(arg, "-")) {
 858			r = dm_get_device(rs->ti, arg, dm_table_get_mode(rs->ti->table),
 859					  &rs->dev[i].meta_dev);
 860			if (r) {
 861				rs->ti->error = "RAID metadata device lookup failure";
 862				return r;
 863			}
 864
 865			rs->dev[i].rdev.sb_page = alloc_page(GFP_KERNEL);
 866			if (!rs->dev[i].rdev.sb_page) {
 867				rs->ti->error = "Failed to allocate superblock page";
 868				return -ENOMEM;
 869			}
 870		}
 871
 872		arg = dm_shift_arg(as);
 873		if (!arg)
 874			return -EINVAL;
 875
 876		if (!strcmp(arg, "-")) {
 877			if (!test_bit(In_sync, &rs->dev[i].rdev.flags) &&
 878			    (!rs->dev[i].rdev.recovery_offset)) {
 879				rs->ti->error = "Drive designated for rebuild not specified";
 880				return -EINVAL;
 881			}
 882
 883			if (rs->dev[i].meta_dev) {
 884				rs->ti->error = "No data device supplied with metadata device";
 885				return -EINVAL;
 886			}
 887
 888			continue;
 889		}
 890
 891		r = dm_get_device(rs->ti, arg, dm_table_get_mode(rs->ti->table),
 892				  &rs->dev[i].data_dev);
 893		if (r) {
 894			rs->ti->error = "RAID device lookup failure";
 895			return r;
 896		}
 897
 898		if (rs->dev[i].meta_dev) {
 899			metadata_available = 1;
 900			rs->dev[i].rdev.meta_bdev = rs->dev[i].meta_dev->bdev;
 901		}
 902		rs->dev[i].rdev.bdev = rs->dev[i].data_dev->bdev;
 903		list_add_tail(&rs->dev[i].rdev.same_set, &rs->md.disks);
 904		if (!test_bit(In_sync, &rs->dev[i].rdev.flags))
 905			rebuild++;
 906	}
 907
 908	if (rs->journal_dev.dev)
 909		list_add_tail(&rs->journal_dev.rdev.same_set, &rs->md.disks);
 910
 911	if (metadata_available) {
 912		rs->md.external = 0;
 913		rs->md.persistent = 1;
 914		rs->md.major_version = 2;
 915	} else if (rebuild && !rs->md.resync_offset) {
 916		/*
 917		 * Without metadata, we will not be able to tell if the array
 918		 * is in-sync or not - we must assume it is not.  Therefore,
 919		 * it is impossible to rebuild a drive.
 920		 *
 921		 * Even if there is metadata, the on-disk information may
 922		 * indicate that the array is not in-sync and it will then
 923		 * fail at that time.
 924		 *
 925		 * User could specify 'nosync' option if desperate.
 926		 */
 927		rs->ti->error = "Unable to rebuild drive while array is not in-sync";
 928		return -EINVAL;
 929	}
 930
 931	return 0;
 932}
 933
 934/*
 935 * validate_region_size
 936 * @rs
 937 * @region_size:  region size in sectors.  If 0, pick a size (4MiB default).
 938 *
 939 * Set rs->md.bitmap_info.chunksize (which really refers to 'region size').
 940 * Ensure that (ti->len/region_size < 2^21) - required by MD bitmap.
 941 *
 942 * Returns: 0 on success, -EINVAL on failure.
 943 */
 944static int validate_region_size(struct raid_set *rs, unsigned long region_size)
 945{
 946	unsigned long min_region_size = rs->ti->len / (1 << 21);
 947
 948	if (rs_is_raid0(rs))
 949		return 0;
 950
 951	if (!region_size) {
 952		/*
 953		 * Choose a reasonable default.	 All figures in sectors.
 954		 */
 955		if (min_region_size > (1 << 13)) {
 956			/* If not a power of 2, make it the next power of 2 */
 957			region_size = roundup_pow_of_two(min_region_size);
 958			DMINFO("Choosing default region size of %lu sectors",
 959			       region_size);
 960		} else {
 961			DMINFO("Choosing default region size of 4MiB");
 962			region_size = 1 << 13; /* sectors */
 963		}
 964	} else {
 965		/*
 966		 * Validate user-supplied value.
 967		 */
 968		if (region_size > rs->ti->len) {
 969			rs->ti->error = "Supplied region size is too large";
 970			return -EINVAL;
 971		}
 972
 973		if (region_size < min_region_size) {
 974			DMERR("Supplied region_size (%lu sectors) below minimum (%lu)",
 975			      region_size, min_region_size);
 976			rs->ti->error = "Supplied region size is too small";
 977			return -EINVAL;
 978		}
 979
 980		if (!is_power_of_2(region_size)) {
 981			rs->ti->error = "Region size is not a power of 2";
 982			return -EINVAL;
 983		}
 984
 985		if (region_size < rs->md.chunk_sectors) {
 986			rs->ti->error = "Region size is smaller than the chunk size";
 987			return -EINVAL;
 988		}
 989	}
 990
 991	/*
 992	 * Convert sectors to bytes.
 993	 */
 994	rs->md.bitmap_info.chunksize = to_bytes(region_size);
 995
 996	return 0;
 997}
 998
 999/*
1000 * validate_raid_redundancy
1001 * @rs
1002 *
1003 * Determine if there are enough devices in the array that haven't
1004 * failed (or are being rebuilt) to form a usable array.
1005 *
1006 * Returns: 0 on success, -EINVAL on failure.
1007 */
1008static int validate_raid_redundancy(struct raid_set *rs)
1009{
1010	unsigned int i, rebuild_cnt = 0;
1011	unsigned int rebuilds_per_group = 0, copies, raid_disks;
1012	unsigned int group_size, last_group_start;
1013
1014	for (i = 0; i < rs->raid_disks; i++)
1015		if (!test_bit(FirstUse, &rs->dev[i].rdev.flags) &&
1016		    ((!test_bit(In_sync, &rs->dev[i].rdev.flags) ||
1017		      !rs->dev[i].rdev.sb_page)))
1018			rebuild_cnt++;
1019
1020	switch (rs->md.level) {
1021	case 0:
1022		break;
1023	case 1:
1024		if (rebuild_cnt >= rs->md.raid_disks)
1025			goto too_many;
1026		break;
1027	case 4:
1028	case 5:
1029	case 6:
1030		if (rebuild_cnt > rs->raid_type->parity_devs)
1031			goto too_many;
1032		break;
1033	case 10:
1034		copies = raid10_md_layout_to_copies(rs->md.new_layout);
1035		if (copies < 2) {
1036			DMERR("Bogus raid10 data copies < 2!");
1037			return -EINVAL;
1038		}
1039
1040		if (rebuild_cnt < copies)
1041			break;
1042
1043		/*
1044		 * It is possible to have a higher rebuild count for RAID10,
1045		 * as long as the failed devices occur in different mirror
1046		 * groups (i.e. different stripes).
1047		 *
1048		 * When checking "near" format, make sure no adjacent devices
1049		 * have failed beyond what can be handled.  In addition to the
1050		 * simple case where the number of devices is a multiple of the
1051		 * number of copies, we must also handle cases where the number
1052		 * of devices is not a multiple of the number of copies.
1053		 * E.g.	   dev1 dev2 dev3 dev4 dev5
1054		 *	    A	 A    B	   B	C
1055		 *	    C	 D    D	   E	E
1056		 */
1057		raid_disks = min(rs->raid_disks, rs->md.raid_disks);
1058		if (__is_raid10_near(rs->md.new_layout)) {
1059			for (i = 0; i < raid_disks; i++) {
1060				if (!(i % copies))
1061					rebuilds_per_group = 0;
1062				if ((!rs->dev[i].rdev.sb_page ||
1063				    !test_bit(In_sync, &rs->dev[i].rdev.flags)) &&
1064				    (++rebuilds_per_group >= copies))
1065					goto too_many;
1066			}
1067			break;
1068		}
1069
1070		/*
1071		 * When checking "far" and "offset" formats, we need to ensure
1072		 * that the device that holds its copy is not also dead or
1073		 * being rebuilt.  (Note that "far" and "offset" formats only
1074		 * support two copies right now.  These formats also only ever
1075		 * use the 'use_far_sets' variant.)
1076		 *
1077		 * This check is somewhat complicated by the need to account
1078		 * for arrays that are not a multiple of (far) copies.	This
1079		 * results in the need to treat the last (potentially larger)
1080		 * set differently.
1081		 */
1082		group_size = (raid_disks / copies);
1083		last_group_start = (raid_disks / group_size) - 1;
1084		last_group_start *= group_size;
1085		for (i = 0; i < raid_disks; i++) {
1086			if (!(i % copies) && !(i > last_group_start))
1087				rebuilds_per_group = 0;
1088			if ((!rs->dev[i].rdev.sb_page ||
1089			     !test_bit(In_sync, &rs->dev[i].rdev.flags)) &&
1090			    (++rebuilds_per_group >= copies))
1091				goto too_many;
1092		}
1093		break;
1094	default:
1095		if (rebuild_cnt)
1096			return -EINVAL;
1097	}
1098
1099	return 0;
1100
1101too_many:
1102	return -EINVAL;
1103}
1104
1105/*
1106 * Possible arguments are...
1107 *	<chunk_size> [optional_args]
1108 *
1109 * Argument definitions
1110 *    <chunk_size>			The number of sectors per disk that
1111 *					will form the "stripe"
1112 *    [[no]sync]			Force or prevent recovery of the
1113 *					entire array
1114 *    [rebuild <idx>]			Rebuild the drive indicated by the index
1115 *    [daemon_sleep <ms>]		Time between bitmap daemon work to
1116 *					clear bits
1117 *    [min_recovery_rate <kB/sec/disk>]	Throttle RAID initialization
1118 *    [max_recovery_rate <kB/sec/disk>]	Throttle RAID initialization
1119 *    [write_mostly <idx>]		Indicate a write mostly drive via index
1120 *    [max_write_behind <sectors>]	See '-write-behind=' (man mdadm)
1121 *    [stripe_cache <sectors>]		Stripe cache size for higher RAIDs
1122 *    [region_size <sectors>]		Defines granularity of bitmap
1123 *    [journal_dev <dev>]		raid4/5/6 journaling deviice
1124 *					(i.e. write hole closing log)
1125 *
1126 * RAID10-only options:
1127 *    [raid10_copies <# copies>]	Number of copies.  (Default: 2)
1128 *    [raid10_format <near|far|offset>] Layout algorithm.  (Default: near)
1129 */
1130static int parse_raid_params(struct raid_set *rs, struct dm_arg_set *as,
1131			     unsigned int num_raid_params)
1132{
1133	int value, raid10_format = ALGORITHM_RAID10_DEFAULT;
1134	unsigned int raid10_copies = 2;
1135	unsigned int i, write_mostly = 0;
1136	unsigned int region_size = 0;
1137	sector_t max_io_len;
1138	const char *arg, *key;
1139	struct raid_dev *rd;
1140	struct raid_type *rt = rs->raid_type;
1141
1142	arg = dm_shift_arg(as);
1143	num_raid_params--; /* Account for chunk_size argument */
1144
1145	if (kstrtoint(arg, 10, &value) < 0) {
1146		rs->ti->error = "Bad numerical argument given for chunk_size";
1147		return -EINVAL;
1148	}
1149
1150	/*
1151	 * First, parse the in-order required arguments
1152	 * "chunk_size" is the only argument of this type.
1153	 */
1154	if (rt_is_raid1(rt)) {
1155		if (value)
1156			DMERR("Ignoring chunk size parameter for RAID 1");
1157		value = 0;
1158	} else if (!is_power_of_2(value)) {
1159		rs->ti->error = "Chunk size must be a power of 2";
1160		return -EINVAL;
1161	} else if (value < 8) {
1162		rs->ti->error = "Chunk size value is too small";
1163		return -EINVAL;
1164	}
1165
1166	rs->md.new_chunk_sectors = rs->md.chunk_sectors = value;
1167
1168	/*
1169	 * We set each individual device as In_sync with a completed
1170	 * 'recovery_offset'.  If there has been a device failure or
1171	 * replacement then one of the following cases applies:
1172	 *
1173	 *   1) User specifies 'rebuild'.
1174	 *	- Device is reset when param is read.
1175	 *   2) A new device is supplied.
1176	 *	- No matching superblock found, resets device.
1177	 *   3) Device failure was transient and returns on reload.
1178	 *	- Failure noticed, resets device for bitmap replay.
1179	 *   4) Device hadn't completed recovery after previous failure.
1180	 *	- Superblock is read and overrides recovery_offset.
1181	 *
1182	 * What is found in the superblocks of the devices is always
1183	 * authoritative, unless 'rebuild' or '[no]sync' was specified.
1184	 */
1185	for (i = 0; i < rs->raid_disks; i++) {
1186		set_bit(In_sync, &rs->dev[i].rdev.flags);
1187		rs->dev[i].rdev.recovery_offset = MaxSector;
1188	}
1189
1190	/*
1191	 * Second, parse the unordered optional arguments
1192	 */
1193	for (i = 0; i < num_raid_params; i++) {
1194		key = dm_shift_arg(as);
1195		if (!key) {
1196			rs->ti->error = "Not enough raid parameters given";
1197			return -EINVAL;
1198		}
1199
1200		if (!strcasecmp(key, dm_raid_arg_name_by_flag(CTR_FLAG_NOSYNC))) {
1201			if (test_and_set_bit(__CTR_FLAG_NOSYNC, &rs->ctr_flags)) {
1202				rs->ti->error = "Only one 'nosync' argument allowed";
1203				return -EINVAL;
1204			}
1205			continue;
1206		}
1207		if (!strcasecmp(key, dm_raid_arg_name_by_flag(CTR_FLAG_SYNC))) {
1208			if (test_and_set_bit(__CTR_FLAG_SYNC, &rs->ctr_flags)) {
1209				rs->ti->error = "Only one 'sync' argument allowed";
1210				return -EINVAL;
1211			}
1212			continue;
1213		}
1214		if (!strcasecmp(key, dm_raid_arg_name_by_flag(CTR_FLAG_RAID10_USE_NEAR_SETS))) {
1215			if (test_and_set_bit(__CTR_FLAG_RAID10_USE_NEAR_SETS, &rs->ctr_flags)) {
1216				rs->ti->error = "Only one 'raid10_use_new_sets' argument allowed";
1217				return -EINVAL;
1218			}
1219			continue;
1220		}
1221
1222		arg = dm_shift_arg(as);
1223		i++; /* Account for the argument pairs */
1224		if (!arg) {
1225			rs->ti->error = "Wrong number of raid parameters given";
1226			return -EINVAL;
1227		}
1228
1229		/*
1230		 * Parameters that take a string value are checked here.
1231		 */
1232		/* "raid10_format {near|offset|far} */
1233		if (!strcasecmp(key, dm_raid_arg_name_by_flag(CTR_FLAG_RAID10_FORMAT))) {
1234			if (test_and_set_bit(__CTR_FLAG_RAID10_FORMAT, &rs->ctr_flags)) {
1235				rs->ti->error = "Only one 'raid10_format' argument pair allowed";
1236				return -EINVAL;
1237			}
1238			if (!rt_is_raid10(rt)) {
1239				rs->ti->error = "'raid10_format' is an invalid parameter for this RAID type";
1240				return -EINVAL;
1241			}
1242			raid10_format = raid10_name_to_format(arg);
1243			if (raid10_format < 0) {
1244				rs->ti->error = "Invalid 'raid10_format' value given";
1245				return raid10_format;
1246			}
1247			continue;
1248		}
1249
1250		/* "journal_dev <dev>" */
1251		if (!strcasecmp(key, dm_raid_arg_name_by_flag(CTR_FLAG_JOURNAL_DEV))) {
1252			int r;
1253			struct md_rdev *jdev;
1254
1255			if (test_and_set_bit(__CTR_FLAG_JOURNAL_DEV, &rs->ctr_flags)) {
1256				rs->ti->error = "Only one raid4/5/6 set journaling device allowed";
1257				return -EINVAL;
1258			}
1259			if (!rt_is_raid456(rt)) {
1260				rs->ti->error = "'journal_dev' is an invalid parameter for this RAID type";
1261				return -EINVAL;
1262			}
1263			r = dm_get_device(rs->ti, arg, dm_table_get_mode(rs->ti->table),
1264					  &rs->journal_dev.dev);
1265			if (r) {
1266				rs->ti->error = "raid4/5/6 journal device lookup failure";
1267				return r;
1268			}
1269			jdev = &rs->journal_dev.rdev;
1270			md_rdev_init(jdev);
1271			jdev->mddev = &rs->md;
1272			jdev->bdev = rs->journal_dev.dev->bdev;
1273			jdev->sectors = bdev_nr_sectors(jdev->bdev);
1274			if (jdev->sectors < MIN_RAID456_JOURNAL_SPACE) {
1275				rs->ti->error = "No space for raid4/5/6 journal";
1276				return -ENOSPC;
1277			}
1278			rs->journal_dev.mode = R5C_JOURNAL_MODE_WRITE_THROUGH;
1279			set_bit(Journal, &jdev->flags);
1280			continue;
1281		}
1282
1283		/* "journal_mode <mode>" ("journal_dev" mandatory!) */
1284		if (!strcasecmp(key, dm_raid_arg_name_by_flag(CTR_FLAG_JOURNAL_MODE))) {
1285			int r;
1286
1287			if (!test_bit(__CTR_FLAG_JOURNAL_DEV, &rs->ctr_flags)) {
1288				rs->ti->error = "raid4/5/6 'journal_mode' is invalid without 'journal_dev'";
1289				return -EINVAL;
1290			}
1291			if (test_and_set_bit(__CTR_FLAG_JOURNAL_MODE, &rs->ctr_flags)) {
1292				rs->ti->error = "Only one raid4/5/6 'journal_mode' argument allowed";
1293				return -EINVAL;
1294			}
1295			r = dm_raid_journal_mode_to_md(arg);
1296			if (r < 0) {
1297				rs->ti->error = "Invalid 'journal_mode' argument";
1298				return r;
1299			}
1300			rs->journal_dev.mode = r;
1301			continue;
1302		}
1303
1304		/*
1305		 * Parameters with number values from here on.
1306		 */
1307		if (kstrtoint(arg, 10, &value) < 0) {
1308			rs->ti->error = "Bad numerical argument given in raid params";
1309			return -EINVAL;
1310		}
1311
1312		if (!strcasecmp(key, dm_raid_arg_name_by_flag(CTR_FLAG_REBUILD))) {
1313			/*
1314			 * "rebuild" is being passed in by userspace to provide
1315			 * indexes of replaced devices and to set up additional
1316			 * devices on raid level takeover.
1317			 */
1318			if (!__within_range(value, 0, rs->raid_disks - 1)) {
1319				rs->ti->error = "Invalid rebuild index given";
1320				return -EINVAL;
1321			}
1322
1323			if (test_and_set_bit(value, (void *) rs->rebuild_disks)) {
1324				rs->ti->error = "rebuild for this index already given";
1325				return -EINVAL;
1326			}
1327
1328			rd = rs->dev + value;
1329			clear_bit(In_sync, &rd->rdev.flags);
1330			clear_bit(Faulty, &rd->rdev.flags);
1331			rd->rdev.recovery_offset = 0;
1332			set_bit(__CTR_FLAG_REBUILD, &rs->ctr_flags);
1333		} else if (!strcasecmp(key, dm_raid_arg_name_by_flag(CTR_FLAG_WRITE_MOSTLY))) {
1334			if (!rt_is_raid1(rt)) {
1335				rs->ti->error = "write_mostly option is only valid for RAID1";
1336				return -EINVAL;
1337			}
1338
1339			if (!__within_range(value, 0, rs->md.raid_disks - 1)) {
1340				rs->ti->error = "Invalid write_mostly index given";
1341				return -EINVAL;
1342			}
1343
1344			write_mostly++;
1345			set_bit(WriteMostly, &rs->dev[value].rdev.flags);
1346			set_bit(__CTR_FLAG_WRITE_MOSTLY, &rs->ctr_flags);
1347		} else if (!strcasecmp(key, dm_raid_arg_name_by_flag(CTR_FLAG_MAX_WRITE_BEHIND))) {
1348			if (!rt_is_raid1(rt)) {
1349				rs->ti->error = "max_write_behind option is only valid for RAID1";
1350				return -EINVAL;
1351			}
1352
1353			if (test_and_set_bit(__CTR_FLAG_MAX_WRITE_BEHIND, &rs->ctr_flags)) {
1354				rs->ti->error = "Only one max_write_behind argument pair allowed";
1355				return -EINVAL;
1356			}
1357
1358			if (value < 0) {
1359				rs->ti->error = "Max write-behind limit out of range";
1360				return -EINVAL;
1361			}
1362
1363			rs->md.bitmap_info.max_write_behind = value / 2;
1364		} else if (!strcasecmp(key, dm_raid_arg_name_by_flag(CTR_FLAG_DAEMON_SLEEP))) {
1365			if (test_and_set_bit(__CTR_FLAG_DAEMON_SLEEP, &rs->ctr_flags)) {
1366				rs->ti->error = "Only one daemon_sleep argument pair allowed";
1367				return -EINVAL;
1368			}
1369			if (value < 0) {
1370				rs->ti->error = "daemon sleep period out of range";
1371				return -EINVAL;
1372			}
1373			rs->md.bitmap_info.daemon_sleep = value;
1374		} else if (!strcasecmp(key, dm_raid_arg_name_by_flag(CTR_FLAG_DATA_OFFSET))) {
1375			/* Userspace passes new data_offset after having extended the data image LV */
1376			if (test_and_set_bit(__CTR_FLAG_DATA_OFFSET, &rs->ctr_flags)) {
1377				rs->ti->error = "Only one data_offset argument pair allowed";
1378				return -EINVAL;
1379			}
1380			/* Ensure sensible data offset */
1381			if (value < 0 ||
1382			    (value && (value < MIN_FREE_RESHAPE_SPACE || value % to_sector(PAGE_SIZE)))) {
1383				rs->ti->error = "Bogus data_offset value";
1384				return -EINVAL;
1385			}
1386			rs->data_offset = value;
1387		} else if (!strcasecmp(key, dm_raid_arg_name_by_flag(CTR_FLAG_DELTA_DISKS))) {
1388			/* Define the +/-# of disks to add to/remove from the given raid set */
1389			if (test_and_set_bit(__CTR_FLAG_DELTA_DISKS, &rs->ctr_flags)) {
1390				rs->ti->error = "Only one delta_disks argument pair allowed";
1391				return -EINVAL;
1392			}
1393			/* Ensure MAX_RAID_DEVICES and raid type minimal_devs! */
1394			if (!__within_range(abs(value), 1, MAX_RAID_DEVICES - rt->minimal_devs)) {
1395				rs->ti->error = "Too many delta_disk requested";
1396				return -EINVAL;
1397			}
1398
1399			rs->delta_disks = value;
1400		} else if (!strcasecmp(key, dm_raid_arg_name_by_flag(CTR_FLAG_STRIPE_CACHE))) {
1401			if (test_and_set_bit(__CTR_FLAG_STRIPE_CACHE, &rs->ctr_flags)) {
1402				rs->ti->error = "Only one stripe_cache argument pair allowed";
1403				return -EINVAL;
1404			}
1405
1406			if (!rt_is_raid456(rt)) {
1407				rs->ti->error = "Inappropriate argument: stripe_cache";
1408				return -EINVAL;
1409			}
1410
1411			if (value < 0) {
1412				rs->ti->error = "Bogus stripe cache entries value";
1413				return -EINVAL;
1414			}
1415			rs->stripe_cache_entries = value;
1416		} else if (!strcasecmp(key, dm_raid_arg_name_by_flag(CTR_FLAG_MIN_RECOVERY_RATE))) {
1417			if (test_and_set_bit(__CTR_FLAG_MIN_RECOVERY_RATE, &rs->ctr_flags)) {
1418				rs->ti->error = "Only one min_recovery_rate argument pair allowed";
1419				return -EINVAL;
1420			}
1421
1422			if (value < 0) {
1423				rs->ti->error = "min_recovery_rate out of range";
1424				return -EINVAL;
1425			}
1426			rs->md.sync_speed_min = value;
1427		} else if (!strcasecmp(key, dm_raid_arg_name_by_flag(CTR_FLAG_MAX_RECOVERY_RATE))) {
1428			if (test_and_set_bit(__CTR_FLAG_MAX_RECOVERY_RATE, &rs->ctr_flags)) {
1429				rs->ti->error = "Only one max_recovery_rate argument pair allowed";
1430				return -EINVAL;
1431			}
1432
1433			if (value < 0) {
1434				rs->ti->error = "max_recovery_rate out of range";
1435				return -EINVAL;
1436			}
1437			rs->md.sync_speed_max = value;
1438		} else if (!strcasecmp(key, dm_raid_arg_name_by_flag(CTR_FLAG_REGION_SIZE))) {
1439			if (test_and_set_bit(__CTR_FLAG_REGION_SIZE, &rs->ctr_flags)) {
1440				rs->ti->error = "Only one region_size argument pair allowed";
1441				return -EINVAL;
1442			}
1443
1444			region_size = value;
1445			rs->requested_bitmap_chunk_sectors = value;
1446		} else if (!strcasecmp(key, dm_raid_arg_name_by_flag(CTR_FLAG_RAID10_COPIES))) {
1447			if (test_and_set_bit(__CTR_FLAG_RAID10_COPIES, &rs->ctr_flags)) {
1448				rs->ti->error = "Only one raid10_copies argument pair allowed";
1449				return -EINVAL;
1450			}
1451
1452			if (!__within_range(value, 2, rs->md.raid_disks)) {
1453				rs->ti->error = "Bad value for 'raid10_copies'";
1454				return -EINVAL;
1455			}
1456
1457			raid10_copies = value;
1458		} else {
1459			DMERR("Unable to parse RAID parameter: %s", key);
1460			rs->ti->error = "Unable to parse RAID parameter";
1461			return -EINVAL;
1462		}
1463	}
1464
1465	if (test_bit(__CTR_FLAG_SYNC, &rs->ctr_flags) &&
1466	    test_bit(__CTR_FLAG_NOSYNC, &rs->ctr_flags)) {
1467		rs->ti->error = "sync and nosync are mutually exclusive";
1468		return -EINVAL;
1469	}
1470
1471	if (test_bit(__CTR_FLAG_REBUILD, &rs->ctr_flags) &&
1472	    (test_bit(__CTR_FLAG_SYNC, &rs->ctr_flags) ||
1473	     test_bit(__CTR_FLAG_NOSYNC, &rs->ctr_flags))) {
1474		rs->ti->error = "sync/nosync and rebuild are mutually exclusive";
1475		return -EINVAL;
1476	}
1477
1478	if (write_mostly >= rs->md.raid_disks) {
1479		rs->ti->error = "Can't set all raid1 devices to write_mostly";
1480		return -EINVAL;
1481	}
1482
1483	if (rs->md.sync_speed_max &&
1484	    rs->md.sync_speed_min > rs->md.sync_speed_max) {
1485		rs->ti->error = "Bogus recovery rates";
1486		return -EINVAL;
1487	}
1488
1489	if (validate_region_size(rs, region_size))
1490		return -EINVAL;
1491
1492	if (rs->md.chunk_sectors)
1493		max_io_len = rs->md.chunk_sectors;
1494	else
1495		max_io_len = region_size;
1496
1497	if (dm_set_target_max_io_len(rs->ti, max_io_len))
1498		return -EINVAL;
1499
1500	if (rt_is_raid10(rt)) {
1501		if (raid10_copies > rs->md.raid_disks) {
1502			rs->ti->error = "Not enough devices to satisfy specification";
1503			return -EINVAL;
1504		}
1505
1506		rs->md.new_layout = raid10_format_to_md_layout(rs, raid10_format, raid10_copies);
1507		if (rs->md.new_layout < 0) {
1508			rs->ti->error = "Error getting raid10 format";
1509			return rs->md.new_layout;
1510		}
1511
1512		rt = get_raid_type_by_ll(10, rs->md.new_layout);
1513		if (!rt) {
1514			rs->ti->error = "Failed to recognize new raid10 layout";
1515			return -EINVAL;
1516		}
1517
1518		if ((rt->algorithm == ALGORITHM_RAID10_DEFAULT ||
1519		     rt->algorithm == ALGORITHM_RAID10_NEAR) &&
1520		    test_bit(__CTR_FLAG_RAID10_USE_NEAR_SETS, &rs->ctr_flags)) {
1521			rs->ti->error = "RAID10 format 'near' and 'raid10_use_near_sets' are incompatible";
1522			return -EINVAL;
1523		}
1524	}
1525
1526	rs->raid10_copies = raid10_copies;
1527
1528	/* Assume there are no metadata devices until the drives are parsed */
1529	rs->md.persistent = 0;
1530	rs->md.external = 1;
1531
1532	/* Check, if any invalid ctr arguments have been passed in for the raid level */
1533	return rs_check_for_valid_flags(rs);
1534}
1535
1536/* Set raid4/5/6 cache size */
1537static int rs_set_raid456_stripe_cache(struct raid_set *rs)
1538{
1539	int r;
1540	struct r5conf *conf;
1541	struct mddev *mddev = &rs->md;
1542	uint32_t min_stripes = max(mddev->chunk_sectors, mddev->new_chunk_sectors) / 2;
1543	uint32_t nr_stripes = rs->stripe_cache_entries;
1544
1545	if (!rt_is_raid456(rs->raid_type)) {
1546		rs->ti->error = "Inappropriate raid level; cannot change stripe_cache size";
1547		return -EINVAL;
1548	}
1549
1550	if (nr_stripes < min_stripes) {
1551		DMINFO("Adjusting requested %u stripe cache entries to %u to suit stripe size",
1552		       nr_stripes, min_stripes);
1553		nr_stripes = min_stripes;
1554	}
1555
1556	conf = mddev->private;
1557	if (!conf) {
1558		rs->ti->error = "Cannot change stripe_cache size on inactive RAID set";
1559		return -EINVAL;
1560	}
1561
1562	/* Try setting number of stripes in raid456 stripe cache */
1563	if (conf->min_nr_stripes != nr_stripes) {
1564		r = raid5_set_cache_size(mddev, nr_stripes);
1565		if (r) {
1566			rs->ti->error = "Failed to set raid4/5/6 stripe cache size";
1567			return r;
1568		}
1569
1570		DMINFO("%u stripe cache entries", nr_stripes);
1571	}
1572
1573	return 0;
1574}
1575
1576/* Return # of data stripes as kept in mddev as of @rs (i.e. as of superblock) */
1577static unsigned int mddev_data_stripes(struct raid_set *rs)
1578{
1579	return rs->md.raid_disks - rs->raid_type->parity_devs;
1580}
1581
1582/* Return # of data stripes of @rs (i.e. as of ctr) */
1583static unsigned int rs_data_stripes(struct raid_set *rs)
1584{
1585	return rs->raid_disks - rs->raid_type->parity_devs;
1586}
1587
1588/*
1589 * Retrieve rdev->sectors from any valid raid device of @rs
1590 * to allow userpace to pass in arbitray "- -" device tupples.
1591 */
1592static sector_t __rdev_sectors(struct raid_set *rs)
1593{
1594	int i;
1595
1596	for (i = 0; i < rs->raid_disks; i++) {
1597		struct md_rdev *rdev = &rs->dev[i].rdev;
1598
1599		if (!test_bit(Journal, &rdev->flags) &&
1600		    rdev->bdev && rdev->sectors)
1601			return rdev->sectors;
1602	}
1603
1604	return 0;
1605}
1606
1607/* Check that calculated dev_sectors fits all component devices. */
1608static int _check_data_dev_sectors(struct raid_set *rs)
1609{
1610	sector_t ds = ~0;
1611	struct md_rdev *rdev;
1612
1613	rdev_for_each(rdev, &rs->md)
1614		if (!test_bit(Journal, &rdev->flags) && rdev->bdev) {
1615			ds = min(ds, bdev_nr_sectors(rdev->bdev));
1616			if (ds < rs->md.dev_sectors) {
1617				rs->ti->error = "Component device(s) too small";
1618				return -EINVAL;
1619			}
1620		}
1621
1622	return 0;
1623}
1624
1625/* Get reshape sectors from data_offsets or raid set */
1626static sector_t _get_reshape_sectors(struct raid_set *rs)
1627{
1628	struct md_rdev *rdev;
1629	sector_t reshape_sectors = 0;
1630
1631	rdev_for_each(rdev, &rs->md)
1632		if (!test_bit(Journal, &rdev->flags)) {
1633			reshape_sectors = (rdev->data_offset > rdev->new_data_offset) ?
1634					rdev->data_offset - rdev->new_data_offset :
1635					rdev->new_data_offset - rdev->data_offset;
1636			break;
1637		}
1638
1639	return max(reshape_sectors, (sector_t) rs->data_offset);
1640}
1641
1642/* Calculate the sectors per device and per array used for @rs */
1643static int rs_set_dev_and_array_sectors(struct raid_set *rs, sector_t sectors, bool use_mddev)
1644{
1645	int delta_disks;
1646	unsigned int data_stripes;
1647	sector_t array_sectors = sectors, dev_sectors = sectors;
1648	struct mddev *mddev = &rs->md;
1649
1650	if (use_mddev) {
1651		delta_disks = mddev->delta_disks;
1652		data_stripes = mddev_data_stripes(rs);
1653	} else {
1654		delta_disks = rs->delta_disks;
1655		data_stripes = rs_data_stripes(rs);
1656	}
1657
1658	/* Special raid1 case w/o delta_disks support (yet) */
1659	if (rt_is_raid1(rs->raid_type))
1660		;
1661	else if (rt_is_raid10(rs->raid_type)) {
1662		if (rs->raid10_copies < 2 ||
1663		    delta_disks < 0) {
1664			rs->ti->error = "Bogus raid10 data copies or delta disks";
1665			return -EINVAL;
1666		}
1667
1668		dev_sectors *= rs->raid10_copies;
1669		if (sector_div(dev_sectors, data_stripes))
1670			goto bad;
1671
1672		array_sectors = (data_stripes + delta_disks) * (dev_sectors - _get_reshape_sectors(rs));
1673		if (sector_div(array_sectors, rs->raid10_copies))
1674			goto bad;
1675
1676	} else if (sector_div(dev_sectors, data_stripes))
1677		goto bad;
1678
1679	else
1680		/* Striped layouts */
1681		array_sectors = (data_stripes + delta_disks) * (dev_sectors - _get_reshape_sectors(rs));
1682
1683	mddev->array_sectors = array_sectors;
1684	mddev->dev_sectors = dev_sectors;
1685	rs_set_rdev_sectors(rs);
1686
1687	return _check_data_dev_sectors(rs);
1688bad:
1689	rs->ti->error = "Target length not divisible by number of data devices";
1690	return -EINVAL;
1691}
1692
1693/* Setup recovery on @rs */
1694static void rs_setup_recovery(struct raid_set *rs, sector_t dev_sectors)
1695{
1696	/* raid0 does not recover */
1697	if (rs_is_raid0(rs))
1698		rs->md.resync_offset = MaxSector;
1699	/*
1700	 * A raid6 set has to be recovered either
1701	 * completely or for the grown part to
1702	 * ensure proper parity and Q-Syndrome
1703	 */
1704	else if (rs_is_raid6(rs))
1705		rs->md.resync_offset = dev_sectors;
1706	/*
1707	 * Other raid set types may skip recovery
1708	 * depending on the 'nosync' flag.
1709	 */
1710	else
1711		rs->md.resync_offset = test_bit(__CTR_FLAG_NOSYNC, &rs->ctr_flags)
1712				     ? MaxSector : dev_sectors;
1713}
1714
1715static void do_table_event(struct work_struct *ws)
1716{
1717	struct raid_set *rs = container_of(ws, struct raid_set, md.event_work);
1718
1719	smp_rmb(); /* Make sure we access most actual mddev properties */
1720
1721	/* Only grow size resulting from added stripe(s) after reshape ended. */
1722	if (!rs_is_reshaping(rs) &&
1723	    rs->array_sectors > rs->md.array_sectors &&
1724	    !rs->md.delta_disks &&
1725	    rs->md.raid_disks == rs->raid_disks) {
1726		/* The raid10 personality doesn't provide proper device sizes -> correct. */
1727		if (rs_is_raid10(rs))
1728			rs_set_rdev_sectors(rs);
1729
1730		rs->md.array_sectors = rs->array_sectors;
1731		rs_set_capacity(rs);
1732	}
1733
1734	dm_table_event(rs->ti->table);
1735}
1736
1737/*
1738 * Make sure a valid takover (level switch) is being requested on @rs
1739 *
1740 * Conversions of raid sets from one MD personality to another
1741 * have to conform to restrictions which are enforced here.
1742 */
1743static int rs_check_takeover(struct raid_set *rs)
1744{
1745	struct mddev *mddev = &rs->md;
1746	unsigned int near_copies;
1747
1748	if (rs->md.degraded) {
1749		rs->ti->error = "Can't takeover degraded raid set";
1750		return -EPERM;
1751	}
1752
1753	if (rs_is_reshaping(rs)) {
1754		rs->ti->error = "Can't takeover reshaping raid set";
1755		return -EPERM;
1756	}
1757
1758	switch (mddev->level) {
1759	case 0:
1760		/* raid0 -> raid1/5 with one disk */
1761		if ((mddev->new_level == 1 || mddev->new_level == 5) &&
1762		    mddev->raid_disks == 1)
1763			return 0;
1764
1765		/* raid0 -> raid10 */
1766		if (mddev->new_level == 10 &&
1767		    !(rs->raid_disks % mddev->raid_disks))
1768			return 0;
1769
1770		/* raid0 with multiple disks -> raid4/5/6 */
1771		if (__within_range(mddev->new_level, 4, 6) &&
1772		    mddev->new_layout == ALGORITHM_PARITY_N &&
1773		    mddev->raid_disks > 1)
1774			return 0;
1775
1776		break;
1777
1778	case 10:
1779		/* Can't takeover raid10_offset! */
1780		if (__is_raid10_offset(mddev->layout))
1781			break;
1782
1783		near_copies = __raid10_near_copies(mddev->layout);
1784
1785		/* raid10* -> raid0 */
1786		if (mddev->new_level == 0) {
1787			/* Can takeover raid10_near with raid disks divisable by data copies! */
1788			if (near_copies > 1 &&
1789			    !(mddev->raid_disks % near_copies)) {
1790				mddev->raid_disks /= near_copies;
1791				mddev->delta_disks = mddev->raid_disks;
1792				return 0;
1793			}
1794
1795			/* Can takeover raid10_far */
1796			if (near_copies == 1 &&
1797			    __raid10_far_copies(mddev->layout) > 1)
1798				return 0;
1799
1800			break;
1801		}
1802
1803		/* raid10_{near,far} -> raid1 */
1804		if (mddev->new_level == 1 &&
1805		    max(near_copies, __raid10_far_copies(mddev->layout)) == mddev->raid_disks)
1806			return 0;
1807
1808		/* raid10_{near,far} with 2 disks -> raid4/5 */
1809		if (__within_range(mddev->new_level, 4, 5) &&
1810		    mddev->raid_disks == 2)
1811			return 0;
1812		break;
1813
1814	case 1:
1815		/* raid1 with 2 disks -> raid4/5 */
1816		if (__within_range(mddev->new_level, 4, 5) &&
1817		    mddev->raid_disks == 2) {
1818			mddev->degraded = 1;
1819			return 0;
1820		}
1821
1822		/* raid1 -> raid0 */
1823		if (mddev->new_level == 0 &&
1824		    mddev->raid_disks == 1)
1825			return 0;
1826
1827		/* raid1 -> raid10 */
1828		if (mddev->new_level == 10)
1829			return 0;
1830		break;
1831
1832	case 4:
1833		/* raid4 -> raid0 */
1834		if (mddev->new_level == 0)
1835			return 0;
1836
1837		/* raid4 -> raid1/5 with 2 disks */
1838		if ((mddev->new_level == 1 || mddev->new_level == 5) &&
1839		    mddev->raid_disks == 2)
1840			return 0;
1841
1842		/* raid4 -> raid5/6 with parity N */
1843		if (__within_range(mddev->new_level, 5, 6) &&
1844		    mddev->layout == ALGORITHM_PARITY_N)
1845			return 0;
1846		break;
1847
1848	case 5:
1849		/* raid5 with parity N -> raid0 */
1850		if (mddev->new_level == 0 &&
1851		    mddev->layout == ALGORITHM_PARITY_N)
1852			return 0;
1853
1854		/* raid5 with parity N -> raid4 */
1855		if (mddev->new_level == 4 &&
1856		    mddev->layout == ALGORITHM_PARITY_N)
1857			return 0;
1858
1859		/* raid5 with 2 disks -> raid1/4/10 */
1860		if ((mddev->new_level == 1 || mddev->new_level == 4 || mddev->new_level == 10) &&
1861		    mddev->raid_disks == 2)
1862			return 0;
1863
1864		/* raid5_* ->  raid6_*_6 with Q-Syndrome N (e.g. raid5_ra -> raid6_ra_6 */
1865		if (mddev->new_level == 6 &&
1866		    ((mddev->layout == ALGORITHM_PARITY_N && mddev->new_layout == ALGORITHM_PARITY_N) ||
1867		      __within_range(mddev->new_layout, ALGORITHM_LEFT_ASYMMETRIC_6, ALGORITHM_RIGHT_SYMMETRIC_6)))
1868			return 0;
1869		break;
1870
1871	case 6:
1872		/* raid6 with parity N -> raid0 */
1873		if (mddev->new_level == 0 &&
1874		    mddev->layout == ALGORITHM_PARITY_N)
1875			return 0;
1876
1877		/* raid6 with parity N -> raid4 */
1878		if (mddev->new_level == 4 &&
1879		    mddev->layout == ALGORITHM_PARITY_N)
1880			return 0;
1881
1882		/* raid6_*_n with Q-Syndrome N -> raid5_* */
1883		if (mddev->new_level == 5 &&
1884		    ((mddev->layout == ALGORITHM_PARITY_N && mddev->new_layout == ALGORITHM_PARITY_N) ||
1885		     __within_range(mddev->new_layout, ALGORITHM_LEFT_ASYMMETRIC, ALGORITHM_RIGHT_SYMMETRIC)))
1886			return 0;
1887		break;
1888
1889	default:
1890		break;
1891	}
1892
1893	rs->ti->error = "takeover not possible";
1894	return -EINVAL;
1895}
1896
1897/* True if @rs requested to be taken over */
1898static bool rs_takeover_requested(struct raid_set *rs)
1899{
1900	return rs->md.new_level != rs->md.level;
1901}
1902
1903/* True if layout is set to reshape. */
1904static bool rs_is_layout_change(struct raid_set *rs, bool use_mddev)
1905{
1906	return (use_mddev ? rs->md.delta_disks : rs->delta_disks) ||
1907	       rs->md.new_layout != rs->md.layout ||
1908	       rs->md.new_chunk_sectors != rs->md.chunk_sectors;
1909}
1910
1911/* True if @rs is requested to reshape by ctr */
1912static bool rs_reshape_requested(struct raid_set *rs)
1913{
1914	bool change;
1915	struct mddev *mddev = &rs->md;
1916
1917	if (rs_takeover_requested(rs))
1918		return false;
1919
1920	if (rs_is_raid0(rs))
1921		return false;
1922
1923	change = rs_is_layout_change(rs, false);
1924
1925	/* Historical case to support raid1 reshape without delta disks */
1926	if (rs_is_raid1(rs)) {
1927		if (rs->delta_disks)
1928			return !!rs->delta_disks;
1929
1930		return !change &&
1931		       mddev->raid_disks != rs->raid_disks;
1932	}
1933
1934	if (rs_is_raid10(rs))
1935		return change &&
1936		       !__is_raid10_far(mddev->new_layout) &&
1937		       rs->delta_disks >= 0;
1938
1939	return change;
1940}
1941
1942/*  Features */
1943#define	FEATURE_FLAG_SUPPORTS_V190	0x1 /* Supports extended superblock */
1944
1945/* State flags for sb->flags */
1946#define	SB_FLAG_RESHAPE_ACTIVE		0x1
1947#define	SB_FLAG_RESHAPE_BACKWARDS	0x2
1948
1949/*
1950 * This structure is never routinely used by userspace, unlike md superblocks.
1951 * Devices with this superblock should only ever be accessed via device-mapper.
1952 */
1953#define DM_RAID_MAGIC 0x64526D44
1954struct dm_raid_superblock {
1955	__le32 magic;		/* "DmRd" */
1956	__le32 compat_features;	/* Used to indicate compatible features (like 1.9.0 ondisk metadata extension) */
1957
1958	__le32 num_devices;	/* Number of devices in this raid set. (Max 64) */
1959	__le32 array_position;	/* The position of this drive in the raid set */
1960
1961	__le64 events;		/* Incremented by md when superblock updated */
1962	__le64 failed_devices;	/* Pre 1.9.0 part of bit field of devices to */
1963				/* indicate failures (see extension below) */
1964
1965	/*
1966	 * This offset tracks the progress of the repair or replacement of
1967	 * an individual drive.
1968	 */
1969	__le64 disk_recovery_offset;
1970
1971	/*
1972	 * This offset tracks the progress of the initial raid set
1973	 * synchronisation/parity calculation.
1974	 */
1975	__le64 array_resync_offset;
1976
1977	/*
1978	 * raid characteristics
1979	 */
1980	__le32 level;
1981	__le32 layout;
1982	__le32 stripe_sectors;
1983
1984	/********************************************************************
1985	 * BELOW FOLLOW V1.9.0 EXTENSIONS TO THE PRISTINE SUPERBLOCK FORMAT!!!
1986	 *
1987	 * FEATURE_FLAG_SUPPORTS_V190 in the compat_features member indicates that those exist
1988	 */
1989
1990	__le32 flags; /* Flags defining array states for reshaping */
1991
1992	/*
1993	 * This offset tracks the progress of a raid
1994	 * set reshape in order to be able to restart it
1995	 */
1996	__le64 reshape_position;
1997
1998	/*
1999	 * These define the properties of the array in case of an interrupted reshape
2000	 */
2001	__le32 new_level;
2002	__le32 new_layout;
2003	__le32 new_stripe_sectors;
2004	__le32 delta_disks;
2005
2006	__le64 array_sectors; /* Array size in sectors */
2007
2008	/*
2009	 * Sector offsets to data on devices (reshaping).
2010	 * Needed to support out of place reshaping, thus
2011	 * not writing over any stripes whilst converting
2012	 * them from old to new layout
2013	 */
2014	__le64 data_offset;
2015	__le64 new_data_offset;
2016
2017	__le64 sectors; /* Used device size in sectors */
2018
2019	/*
2020	 * Additional Bit field of devices indicating failures to support
2021	 * up to 256 devices with the 1.9.0 on-disk metadata format
2022	 */
2023	__le64 extended_failed_devices[DISKS_ARRAY_ELEMS - 1];
2024
2025	__le32 incompat_features;	/* Used to indicate any incompatible features */
2026
2027	/* Always set rest up to logical block size to 0 when writing (see get_metadata_device() below). */
2028} __packed;
2029
2030/*
2031 * Check for reshape constraints on raid set @rs:
2032 *
2033 * - reshape function non-existent
2034 * - degraded set
2035 * - ongoing recovery
2036 * - ongoing reshape
2037 *
2038 * Returns 0 if none or -EPERM if given constraint
2039 * and error message reference in @errmsg
2040 */
2041static int rs_check_reshape(struct raid_set *rs)
2042{
2043	struct mddev *mddev = &rs->md;
2044
2045	if (!mddev->pers || !mddev->pers->check_reshape)
2046		rs->ti->error = "Reshape not supported";
2047	else if (mddev->degraded)
2048		rs->ti->error = "Can't reshape degraded raid set";
2049	else if (rs_is_recovering(rs))
2050		rs->ti->error = "Convert request on recovering raid set prohibited";
2051	else if (rs_is_reshaping(rs))
2052		rs->ti->error = "raid set already reshaping!";
2053	else if (!(rs_is_raid1(rs) || rs_is_raid10(rs) || rs_is_raid456(rs)))
2054		rs->ti->error = "Reshaping only supported for raid1/4/5/6/10";
2055	else
2056		return 0;
2057
2058	return -EPERM;
2059}
2060
2061static int read_disk_sb(struct md_rdev *rdev, int size, bool force_reload)
2062{
2063	BUG_ON(!rdev->sb_page);
2064
2065	if (rdev->sb_loaded && !force_reload)
2066		return 0;
2067
2068	rdev->sb_loaded = 0;
2069
2070	if (!sync_page_io(rdev, 0, size, rdev->sb_page, REQ_OP_READ, true)) {
2071		DMERR("Failed to read superblock of device at position %d",
2072		      rdev->raid_disk);
2073		md_error(rdev->mddev, rdev);
2074		set_bit(Faulty, &rdev->flags);
2075		return -EIO;
2076	}
2077
2078	rdev->sb_loaded = 1;
2079
2080	return 0;
2081}
2082
2083static void sb_retrieve_failed_devices(struct dm_raid_superblock *sb, uint64_t *failed_devices)
2084{
2085	failed_devices[0] = le64_to_cpu(sb->failed_devices);
2086	memset(failed_devices + 1, 0, sizeof(sb->extended_failed_devices));
2087
2088	if (le32_to_cpu(sb->compat_features) & FEATURE_FLAG_SUPPORTS_V190) {
2089		int i = ARRAY_SIZE(sb->extended_failed_devices);
2090
2091		while (i--)
2092			failed_devices[i+1] = le64_to_cpu(sb->extended_failed_devices[i]);
2093	}
2094}
2095
2096static void sb_update_failed_devices(struct dm_raid_superblock *sb, uint64_t *failed_devices)
2097{
2098	int i = ARRAY_SIZE(sb->extended_failed_devices);
2099
2100	sb->failed_devices = cpu_to_le64(failed_devices[0]);
2101	while (i--)
2102		sb->extended_failed_devices[i] = cpu_to_le64(failed_devices[i+1]);
2103}
2104
2105/*
2106 * Synchronize the superblock members with the raid set properties
2107 *
2108 * All superblock data is little endian.
2109 */
2110static void super_sync(struct mddev *mddev, struct md_rdev *rdev)
2111{
2112	bool update_failed_devices = false;
2113	unsigned int i;
2114	uint64_t failed_devices[DISKS_ARRAY_ELEMS];
2115	struct dm_raid_superblock *sb;
2116	struct raid_set *rs = container_of(mddev, struct raid_set, md);
2117
2118	/* No metadata device, no superblock */
2119	if (!rdev->meta_bdev)
2120		return;
2121
2122	BUG_ON(!rdev->sb_page);
2123
2124	sb = page_address(rdev->sb_page);
2125
2126	sb_retrieve_failed_devices(sb, failed_devices);
2127
2128	for (i = 0; i < rs->raid_disks; i++)
2129		if (!rs->dev[i].data_dev || test_bit(Faulty, &rs->dev[i].rdev.flags)) {
2130			update_failed_devices = true;
2131			set_bit(i, (void *) failed_devices);
2132		}
2133
2134	if (update_failed_devices)
2135		sb_update_failed_devices(sb, failed_devices);
2136
2137	sb->magic = cpu_to_le32(DM_RAID_MAGIC);
2138	sb->compat_features = cpu_to_le32(FEATURE_FLAG_SUPPORTS_V190);
2139
2140	sb->num_devices = cpu_to_le32(mddev->raid_disks);
2141	sb->array_position = cpu_to_le32(rdev->raid_disk);
2142
2143	sb->events = cpu_to_le64(mddev->events);
2144
2145	sb->disk_recovery_offset = cpu_to_le64(rdev->recovery_offset);
2146	sb->array_resync_offset = cpu_to_le64(mddev->resync_offset);
2147
2148	sb->level = cpu_to_le32(mddev->level);
2149	sb->layout = cpu_to_le32(mddev->layout);
2150	sb->stripe_sectors = cpu_to_le32(mddev->chunk_sectors);
2151
2152	/********************************************************************
2153	 * BELOW FOLLOW V1.9.0 EXTENSIONS TO THE PRISTINE SUPERBLOCK FORMAT!!!
2154	 *
2155	 * FEATURE_FLAG_SUPPORTS_V190 in the compat_features member indicates that those exist
2156	 */
2157	sb->new_level = cpu_to_le32(mddev->new_level);
2158	sb->new_layout = cpu_to_le32(mddev->new_layout);
2159	sb->new_stripe_sectors = cpu_to_le32(mddev->new_chunk_sectors);
2160
2161	sb->delta_disks = cpu_to_le32(mddev->delta_disks);
2162
2163	smp_rmb(); /* Make sure we access most recent reshape position */
2164	sb->reshape_position = cpu_to_le64(mddev->reshape_position);
2165	if (le64_to_cpu(sb->reshape_position) != MaxSector) {
2166		/* Flag ongoing reshape */
2167		sb->flags |= cpu_to_le32(SB_FLAG_RESHAPE_ACTIVE);
2168
2169		if (mddev->delta_disks < 0 || mddev->reshape_backwards)
2170			sb->flags |= cpu_to_le32(SB_FLAG_RESHAPE_BACKWARDS);
2171	} else {
2172		/* Clear reshape flags */
2173		sb->flags &= ~(cpu_to_le32(SB_FLAG_RESHAPE_ACTIVE|SB_FLAG_RESHAPE_BACKWARDS));
2174	}
2175
2176	sb->array_sectors = cpu_to_le64(mddev->array_sectors);
2177	sb->data_offset = cpu_to_le64(rdev->data_offset);
2178	sb->new_data_offset = cpu_to_le64(rdev->new_data_offset);
2179	sb->sectors = cpu_to_le64(rdev->sectors);
2180	sb->incompat_features = cpu_to_le32(0);
2181
2182	/* Zero out the rest of the payload after the size of the superblock */
2183	memset(sb + 1, 0, rdev->sb_size - sizeof(*sb));
2184}
2185
2186/*
2187 * super_load
2188 *
2189 * This function creates a superblock if one is not found on the device
2190 * and will decide which superblock to use if there's a choice.
2191 *
2192 * Return: 1 if use rdev, 0 if use refdev, -Exxx otherwise
2193 */
2194static int super_load(struct md_rdev *rdev, struct md_rdev *refdev)
2195{
2196	int r;
2197	struct dm_raid_superblock *sb;
2198	struct dm_raid_superblock *refsb;
2199	uint64_t events_sb, events_refsb;
2200
2201	r = read_disk_sb(rdev, rdev->sb_size, false);
2202	if (r)
2203		return r;
2204
2205	sb = page_address(rdev->sb_page);
2206
2207	/*
2208	 * Two cases that we want to write new superblocks and rebuild:
2209	 * 1) New device (no matching magic number)
2210	 * 2) Device specified for rebuild (!In_sync w/ offset == 0)
2211	 */
2212	if ((sb->magic != cpu_to_le32(DM_RAID_MAGIC)) ||
2213	    (!test_bit(In_sync, &rdev->flags) && !rdev->recovery_offset)) {
2214		super_sync(rdev->mddev, rdev);
2215
2216		set_bit(FirstUse, &rdev->flags);
2217		sb->compat_features = cpu_to_le32(FEATURE_FLAG_SUPPORTS_V190);
2218
2219		/* Force writing of superblocks to disk */
2220		set_bit(MD_SB_CHANGE_DEVS, &rdev->mddev->sb_flags);
2221
2222		/* Any superblock is better than none, choose that if given */
2223		return refdev ? 0 : 1;
2224	}
2225
2226	if (!refdev)
2227		return 1;
2228
2229	events_sb = le64_to_cpu(sb->events);
2230
2231	refsb = page_address(refdev->sb_page);
2232	events_refsb = le64_to_cpu(refsb->events);
2233
2234	return (events_sb > events_refsb) ? 1 : 0;
2235}
2236
2237static int super_init_validation(struct raid_set *rs, struct md_rdev *rdev)
2238{
2239	int role;
2240	struct mddev *mddev = &rs->md;
2241	uint64_t events_sb;
2242	uint64_t failed_devices[DISKS_ARRAY_ELEMS];
2243	struct dm_raid_superblock *sb;
2244	uint32_t new_devs = 0, rebuild_and_new = 0, rebuilds = 0;
2245	struct md_rdev *r;
2246	struct dm_raid_superblock *sb2;
2247
2248	sb = page_address(rdev->sb_page);
2249	events_sb = le64_to_cpu(sb->events);
2250
2251	/*
2252	 * Initialise to 1 if this is a new superblock.
2253	 */
2254	mddev->events = events_sb ? : 1;
2255
2256	mddev->reshape_position = MaxSector;
2257
2258	mddev->raid_disks = le32_to_cpu(sb->num_devices);
2259	mddev->level = le32_to_cpu(sb->level);
2260	mddev->layout = le32_to_cpu(sb->layout);
2261	mddev->chunk_sectors = le32_to_cpu(sb->stripe_sectors);
2262
2263	/*
2264	 * Reshaping is supported, e.g. reshape_position is valid
2265	 * in superblock and superblock content is authoritative.
2266	 */
2267	if (le32_to_cpu(sb->compat_features) & FEATURE_FLAG_SUPPORTS_V190) {
2268		/* Superblock is authoritative wrt given raid set layout! */
2269		mddev->new_level = le32_to_cpu(sb->new_level);
2270		mddev->new_layout = le32_to_cpu(sb->new_layout);
2271		mddev->new_chunk_sectors = le32_to_cpu(sb->new_stripe_sectors);
2272		mddev->delta_disks = le32_to_cpu(sb->delta_disks);
2273		mddev->array_sectors = le64_to_cpu(sb->array_sectors);
2274
2275		/* raid was reshaping and got interrupted */
2276		if (le32_to_cpu(sb->flags) & SB_FLAG_RESHAPE_ACTIVE) {
2277			if (test_bit(__CTR_FLAG_DELTA_DISKS, &rs->ctr_flags)) {
2278				DMERR("Reshape requested but raid set is still reshaping");
2279				return -EINVAL;
2280			}
2281
2282			if (mddev->delta_disks < 0 ||
2283			    (!mddev->delta_disks && (le32_to_cpu(sb->flags) & SB_FLAG_RESHAPE_BACKWARDS)))
2284				mddev->reshape_backwards = 1;
2285			else
2286				mddev->reshape_backwards = 0;
2287
2288			mddev->reshape_position = le64_to_cpu(sb->reshape_position);
2289			rs->raid_type = get_raid_type_by_ll(mddev->level, mddev->layout);
2290			if (!rs->raid_type)
2291				return -EINVAL;
2292		}
2293
2294	} else {
2295		/*
2296		 * No takeover/reshaping, because we don't have the extended v1.9.0 metadata
2297		 */
2298		struct raid_type *rt_cur = get_raid_type_by_ll(mddev->level, mddev->layout);
2299		struct raid_type *rt_new = get_raid_type_by_ll(mddev->new_level, mddev->new_layout);
2300
2301		if (rs_takeover_requested(rs)) {
2302			if (rt_cur && rt_new)
2303				DMERR("Takeover raid sets from %s to %s not yet supported by metadata. (raid level change)",
2304				      rt_cur->name, rt_new->name);
2305			else
2306				DMERR("Takeover raid sets not yet supported by metadata. (raid level change)");
2307			return -EINVAL;
2308		} else if (rs_reshape_requested(rs)) {
2309			DMERR("Reshaping raid sets not yet supported by metadata. (raid layout change keeping level)");
2310			if (mddev->layout != mddev->new_layout) {
2311				if (rt_cur && rt_new)
2312					DMERR("	 current layout %s vs new layout %s",
2313					      rt_cur->name, rt_new->name);
2314				else
2315					DMERR("	 current layout 0x%X vs new layout 0x%X",
2316					      le32_to_cpu(sb->layout), mddev->new_layout);
2317			}
2318			if (mddev->chunk_sectors != mddev->new_chunk_sectors)
2319				DMERR("	 current stripe sectors %u vs new stripe sectors %u",
2320				      mddev->chunk_sectors, mddev->new_chunk_sectors);
2321			if (rs->delta_disks)
2322				DMERR("	 current %u disks vs new %u disks",
2323				      mddev->raid_disks, mddev->raid_disks + rs->delta_disks);
2324			if (rs_is_raid10(rs)) {
2325				DMERR("	 Old layout: %s w/ %u copies",
2326				      raid10_md_layout_to_format(mddev->layout),
2327				      raid10_md_layout_to_copies(mddev->layout));
2328				DMERR("	 New layout: %s w/ %u copies",
2329				      raid10_md_layout_to_format(mddev->new_layout),
2330				      raid10_md_layout_to_copies(mddev->new_layout));
2331			}
2332			return -EINVAL;
2333		}
2334
2335		DMINFO("Discovered old metadata format; upgrading to extended metadata format");
2336	}
2337
2338	if (!test_bit(__CTR_FLAG_NOSYNC, &rs->ctr_flags))
2339		mddev->resync_offset = le64_to_cpu(sb->array_resync_offset);
2340
2341	/*
2342	 * During load, we set FirstUse if a new superblock was written.
2343	 * There are two reasons we might not have a superblock:
2344	 * 1) The raid set is brand new - in which case, all of the
2345	 *    devices must have their In_sync bit set.	Also,
2346	 *    resync_offset must be 0, unless forced.
2347	 * 2) This is a new device being added to an old raid set
2348	 *    and the new device needs to be rebuilt - in which
2349	 *    case the In_sync bit will /not/ be set and
2350	 *    resync_offset must be MaxSector.
2351	 * 3) This is/are a new device(s) being added to an old
2352	 *    raid set during takeover to a higher raid level
2353	 *    to provide capacity for redundancy or during reshape
2354	 *    to add capacity to grow the raid set.
2355	 */
2356	rdev_for_each(r, mddev) {
2357		if (test_bit(Journal, &rdev->flags))
2358			continue;
2359
2360		if (test_bit(FirstUse, &r->flags))
2361			new_devs++;
2362
2363		if (!test_bit(In_sync, &r->flags)) {
2364			DMINFO("Device %d specified for rebuild; clearing superblock",
2365				r->raid_disk);
2366			rebuilds++;
2367
2368			if (test_bit(FirstUse, &r->flags))
2369				rebuild_and_new++;
2370		}
2371	}
2372
2373	if (new_devs == rs->raid_disks || !rebuilds) {
2374		/* Replace a broken device */
2375		if (new_devs == rs->raid_disks) {
2376			DMINFO("Superblocks created for new raid set");
2377			set_bit(MD_ARRAY_FIRST_USE, &mddev->flags);
2378		} else if (new_devs != rebuilds &&
2379			   new_devs != rs->delta_disks) {
2380			DMERR("New device injected into existing raid set without "
2381			      "'delta_disks' or 'rebuild' parameter specified");
2382			return -EINVAL;
2383		}
2384	} else if (new_devs && new_devs != rebuilds) {
2385		DMERR("%u 'rebuild' devices cannot be injected into"
2386		      " a raid set with %u other first-time devices",
2387		      rebuilds, new_devs);
2388		return -EINVAL;
2389	} else if (rebuilds) {
2390		if (rebuild_and_new && rebuilds != rebuild_and_new) {
2391			DMERR("new device%s provided without 'rebuild'",
2392			      new_devs > 1 ? "s" : "");
2393			return -EINVAL;
2394		} else if (!test_bit(__CTR_FLAG_REBUILD, &rs->ctr_flags) && rs_is_recovering(rs)) {
2395			DMERR("'rebuild' specified while raid set is not in-sync (resync_offset=%llu)",
2396			      (unsigned long long) mddev->resync_offset);
2397			return -EINVAL;
2398		} else if (rs_is_reshaping(rs)) {
2399			DMERR("'rebuild' specified while raid set is being reshaped (reshape_position=%llu)",
2400			      (unsigned long long) mddev->reshape_position);
2401			return -EINVAL;
2402		}
2403	}
2404
2405	/*
2406	 * Now we set the Faulty bit for those devices that are
2407	 * recorded in the superblock as failed.
2408	 */
2409	sb_retrieve_failed_devices(sb, failed_devices);
2410	rdev_for_each(r, mddev) {
2411		if (test_bit(Journal, &r->flags) ||
2412		    !r->sb_page)
2413			continue;
2414		sb2 = page_address(r->sb_page);
2415		sb2->failed_devices = 0;
2416		memset(sb2->extended_failed_devices, 0, sizeof(sb2->extended_failed_devices));
2417
2418		/*
2419		 * Check for any device re-ordering.
2420		 */
2421		if (!test_bit(FirstUse, &r->flags) && (r->raid_disk >= 0)) {
2422			role = le32_to_cpu(sb2->array_position);
2423			if (role < 0)
2424				continue;
2425
2426			if (role != r->raid_disk) {
2427				if (rs_is_raid10(rs) && __is_raid10_near(mddev->layout)) {
2428					if (mddev->raid_disks % __raid10_near_copies(mddev->layout) ||
2429					    rs->raid_disks % rs->raid10_copies) {
2430						rs->ti->error =
2431							"Cannot change raid10 near set to odd # of devices!";
2432						return -EINVAL;
2433					}
2434
2435					sb2->array_position = cpu_to_le32(r->raid_disk);
2436
2437				} else if (!(rs_is_raid10(rs) && rt_is_raid0(rs->raid_type)) &&
2438					   !(rs_is_raid0(rs) && rt_is_raid10(rs->raid_type)) &&
2439					   !rt_is_raid1(rs->raid_type)) {
2440					rs->ti->error = "Cannot change device positions in raid set";
2441					return -EINVAL;
2442				}
2443
2444				DMINFO("raid device #%d now at position #%d", role, r->raid_disk);
2445			}
2446
2447			/*
2448			 * Partial recovery is performed on
2449			 * returning failed devices.
2450			 */
2451			if (test_bit(role, (void *) failed_devices))
2452				set_bit(Faulty, &r->flags);
2453		}
2454	}
2455
2456	return 0;
2457}
2458
2459static int super_validate(struct raid_set *rs, struct md_rdev *rdev)
2460{
2461	struct mddev *mddev = &rs->md;
2462	struct dm_raid_superblock *sb;
2463
2464	if (rs_is_raid0(rs) || !rdev->sb_page || rdev->raid_disk < 0)
2465		return 0;
2466
2467	sb = page_address(rdev->sb_page);
2468
2469	/*
2470	 * If mddev->events is not set, we know we have not yet initialized
2471	 * the array.
2472	 */
2473	if (!mddev->events && super_init_validation(rs, rdev))
2474		return -EINVAL;
2475
2476	if (le32_to_cpu(sb->compat_features) &&
2477	    le32_to_cpu(sb->compat_features) != FEATURE_FLAG_SUPPORTS_V190) {
2478		rs->ti->error = "Unable to assemble array: Unknown flag(s) in compatible feature flags";
2479		return -EINVAL;
2480	}
2481
2482	if (sb->incompat_features) {
2483		rs->ti->error = "Unable to assemble array: No incompatible feature flags supported yet";
2484		return -EINVAL;
2485	}
2486
2487	/* Enable bitmap creation on @rs unless no metadevs or raid0 or journaled raid4/5/6 set. */
2488	mddev->bitmap_info.offset = (rt_is_raid0(rs->raid_type) || rs->journal_dev.dev) ? 0 : to_sector(4096);
2489	mddev->bitmap_info.default_offset = mddev->bitmap_info.offset;
2490
2491	if (!test_and_clear_bit(FirstUse, &rdev->flags)) {
2492		/*
2493		 * Retrieve rdev size stored in superblock to be prepared for shrink.
2494		 * Check extended superblock members are present otherwise the size
2495		 * will not be set!
2496		 */
2497		if (le32_to_cpu(sb->compat_features) & FEATURE_FLAG_SUPPORTS_V190)
2498			rdev->sectors = le64_to_cpu(sb->sectors);
2499
2500		rdev->recovery_offset = le64_to_cpu(sb->disk_recovery_offset);
2501		if (rdev->recovery_offset == MaxSector)
2502			set_bit(In_sync, &rdev->flags);
2503		/*
2504		 * If no reshape in progress -> we're recovering single
2505		 * disk(s) and have to set the device(s) to out-of-sync
2506		 */
2507		else if (!rs_is_reshaping(rs))
2508			clear_bit(In_sync, &rdev->flags); /* Mandatory for recovery */
2509	}
2510
2511	/*
2512	 * If a device comes back, set it as not In_sync and no longer faulty.
2513	 */
2514	if (test_and_clear_bit(Faulty, &rdev->flags)) {
2515		rdev->recovery_offset = 0;
2516		clear_bit(In_sync, &rdev->flags);
2517		rdev->saved_raid_disk = rdev->raid_disk;
2518	}
2519
2520	/* Reshape support -> restore respective data offsets */
2521	rdev->data_offset = le64_to_cpu(sb->data_offset);
2522	rdev->new_data_offset = le64_to_cpu(sb->new_data_offset);
2523
2524	return 0;
2525}
2526
2527/*
2528 * Analyse superblocks and select the freshest.
2529 */
2530static int analyse_superblocks(struct dm_target *ti, struct raid_set *rs)
2531{
2532	int r;
2533	struct md_rdev *rdev, *freshest;
2534	struct mddev *mddev = &rs->md;
2535
2536	/* Respect resynchronization requested with "sync" argument. */
2537	if (test_bit(__CTR_FLAG_SYNC, &rs->ctr_flags))
2538		set_bit(MD_ARRAY_FIRST_USE, &mddev->flags);
2539
2540	freshest = NULL;
2541	rdev_for_each(rdev, mddev) {
2542		if (test_bit(Journal, &rdev->flags))
2543			continue;
2544
2545		if (!rdev->meta_bdev)
2546			continue;
2547
2548		/* Set superblock offset/size for metadata device. */
2549		rdev->sb_start = 0;
2550		rdev->sb_size = bdev_logical_block_size(rdev->meta_bdev);
2551		if (rdev->sb_size < sizeof(struct dm_raid_superblock) || rdev->sb_size > PAGE_SIZE) {
2552			DMERR("superblock size of a logical block is no longer valid");
2553			return -EINVAL;
2554		}
2555
2556		/*
2557		 * Skipping super_load due to CTR_FLAG_SYNC will cause
2558		 * the array to undergo initialization again as
2559		 * though it were new.	This is the intended effect
2560		 * of the "sync" directive.
2561		 *
2562		 * With reshaping capability added, we must ensure that
2563		 * the "sync" directive is disallowed during the reshape.
2564		 */
2565		if (test_bit(__CTR_FLAG_SYNC, &rs->ctr_flags))
2566			continue;
2567
2568		r = super_load(rdev, freshest);
2569
2570		switch (r) {
2571		case 1:
2572			freshest = rdev;
2573			break;
2574		case 0:
2575			break;
2576		default:
2577			/* This is a failure to read the superblock from the metadata device. */
2578			/*
2579			 * We have to keep any raid0 data/metadata device pairs or
2580			 * the MD raid0 personality will fail to start the array.
2581			 */
2582			if (rs_is_raid0(rs))
2583				continue;
2584
2585			/*
2586			 * We keep the dm_devs to be able to emit the device tuple
2587			 * properly on the table line in raid_status() (rather than
2588			 * mistakenly acting as if '- -' got passed into the constructor).
2589			 *
2590			 * The rdev has to stay on the same_set list to allow for
2591			 * the attempt to restore faulty devices on second resume.
2592			 */
2593			rdev->raid_disk = rdev->saved_raid_disk = -1;
2594			break;
2595		}
2596	}
2597
2598	if (!freshest)
2599		return 0;
2600
2601	/*
2602	 * Validation of the freshest device provides the source of
2603	 * validation for the remaining devices.
2604	 */
2605	rs->ti->error = "Unable to assemble array: Invalid superblocks";
2606	if (super_validate(rs, freshest))
2607		return -EINVAL;
2608
2609	if (validate_raid_redundancy(rs)) {
2610		rs->ti->error = "Insufficient redundancy to activate array";
2611		return -EINVAL;
2612	}
2613
2614	rdev_for_each(rdev, mddev)
2615		if (!test_bit(Journal, &rdev->flags) &&
2616		    rdev != freshest &&
2617		    super_validate(rs, rdev))
2618			return -EINVAL;
2619	return 0;
2620}
2621
2622/*
2623 * Adjust data_offset and new_data_offset on all disk members of @rs
2624 * for out of place reshaping if requested by constructor
2625 *
2626 * We need free space at the beginning of each raid disk for forward
2627 * and at the end for backward reshapes which userspace has to provide
2628 * via remapping/reordering of space.
2629 */
2630static int rs_adjust_data_offsets(struct raid_set *rs)
2631{
2632	sector_t data_offset = 0, new_data_offset = 0;
2633	struct md_rdev *rdev;
2634
2635	/* Constructor did not request data offset change */
2636	if (!test_bit(__CTR_FLAG_DATA_OFFSET, &rs->ctr_flags)) {
2637		if (!rs_is_reshapable(rs))
2638			goto out;
2639
2640		return 0;
2641	}
2642
2643	/* HM FIXME: get In_Sync raid_dev? */
2644	rdev = &rs->dev[0].rdev;
2645
2646	if (rs->delta_disks < 0) {
2647		/*
2648		 * Removing disks (reshaping backwards):
2649		 *
2650		 * - before reshape: data is at offset 0 and free space
2651		 *		     is at end of each component LV
2652		 *
2653		 * - after reshape: data is at offset rs->data_offset != 0 on each component LV
2654		 */
2655		data_offset = 0;
2656		new_data_offset = rs->data_offset;
2657
2658	} else if (rs->delta_disks > 0) {
2659		/*
2660		 * Adding disks (reshaping forwards):
2661		 *
2662		 * - before reshape: data is at offset rs->data_offset != 0 and
2663		 *		     free space is at begin of each component LV
2664		 *
2665		 * - after reshape: data is at offset 0 on each component LV
2666		 */
2667		data_offset = rs->data_offset;
2668		new_data_offset = 0;
2669
2670	} else {
2671		/*
2672		 * User space passes in 0 for data offset after having removed reshape space
2673		 *
2674		 * - or - (data offset != 0)
2675		 *
2676		 * Changing RAID layout or chunk size -> toggle offsets
2677		 *
2678		 * - before reshape: data is at offset rs->data_offset 0 and
2679		 *		     free space is at end of each component LV
2680		 *		     -or-
2681		 *                   data is at offset rs->data_offset != 0 and
2682		 *		     free space is at begin of each component LV
2683		 *
2684		 * - after reshape: data is at offset 0 if it was at offset != 0
2685		 *                  or at offset != 0 if it was at offset 0
2686		 *                  on each component LV
2687		 *
2688		 */
2689		data_offset = rs->data_offset ? rdev->data_offset : 0;
2690		new_data_offset = data_offset ? 0 : rs->data_offset;
2691		set_bit(RT_FLAG_UPDATE_SBS, &rs->runtime_flags);
2692	}
2693
2694	/*
2695	 * Make sure we got a minimum amount of free sectors per device
2696	 */
2697	if (rs->data_offset &&
2698	    bdev_nr_sectors(rdev->bdev) - rs->md.dev_sectors < MIN_FREE_RESHAPE_SPACE) {
2699		rs->ti->error = data_offset ? "No space for forward reshape" :
2700					      "No space for backward reshape";
2701		return -ENOSPC;
2702	}
2703out:
2704	/*
2705	 * Raise resync_offset in case data_offset != 0 to
2706	 * avoid false recovery positives in the constructor.
2707	 */
2708	if (rs->md.resync_offset < rs->md.dev_sectors)
2709		rs->md.resync_offset += rs->dev[0].rdev.data_offset;
2710
2711	/* Adjust data offsets on all rdevs but on any raid4/5/6 journal device */
2712	rdev_for_each(rdev, &rs->md) {
2713		if (!test_bit(Journal, &rdev->flags)) {
2714			rdev->data_offset = data_offset;
2715			rdev->new_data_offset = new_data_offset;
2716		}
2717	}
2718
2719	return 0;
2720}
2721
2722/* Userpace reordered disks -> adjust raid_disk indexes in @rs */
2723static void __reorder_raid_disk_indexes(struct raid_set *rs)
2724{
2725	int i = 0;
2726	struct md_rdev *rdev;
2727
2728	rdev_for_each(rdev, &rs->md) {
2729		if (!test_bit(Journal, &rdev->flags)) {
2730			rdev->raid_disk = i++;
2731			rdev->saved_raid_disk = rdev->new_raid_disk = -1;
2732		}
2733	}
2734}
2735
2736/*
2737 * Setup @rs for takeover by a different raid level
2738 */
2739static int rs_setup_takeover(struct raid_set *rs)
2740{
2741	struct mddev *mddev = &rs->md;
2742	struct md_rdev *rdev;
2743	unsigned int d = mddev->raid_disks = rs->raid_disks;
2744	sector_t new_data_offset = rs->dev[0].rdev.data_offset ? 0 : rs->data_offset;
2745
2746	if (rt_is_raid10(rs->raid_type)) {
2747		if (rs_is_raid0(rs)) {
2748			/* Userpace reordered disks -> adjust raid_disk indexes */
2749			__reorder_raid_disk_indexes(rs);
2750
2751			/* raid0 -> raid10_far layout */
2752			mddev->layout = raid10_format_to_md_layout(rs, ALGORITHM_RAID10_FAR,
2753								   rs->raid10_copies);
2754		} else if (rs_is_raid1(rs))
2755			/* raid1 -> raid10_near layout */
2756			mddev->layout = raid10_format_to_md_layout(rs, ALGORITHM_RAID10_NEAR,
2757								   rs->raid_disks);
2758		else
2759			return -EINVAL;
2760
2761	}
2762
2763	clear_bit(MD_ARRAY_FIRST_USE, &mddev->flags);
2764	mddev->resync_offset = MaxSector;
2765
2766	while (d--) {
2767		rdev = &rs->dev[d].rdev;
2768
2769		if (test_bit(d, (void *) rs->rebuild_disks)) {
2770			clear_bit(In_sync, &rdev->flags);
2771			clear_bit(Faulty, &rdev->flags);
2772			mddev->resync_offset = rdev->recovery_offset = 0;
2773			/* Bitmap has to be created when we do an "up" takeover */
2774			set_bit(MD_ARRAY_FIRST_USE, &mddev->flags);
2775		}
2776
2777		rdev->new_data_offset = new_data_offset;
2778	}
2779
2780	return 0;
2781}
2782
2783/* Prepare @rs for reshape */
2784static int rs_prepare_reshape(struct raid_set *rs)
2785{
2786	bool reshape;
2787	struct mddev *mddev = &rs->md;
2788
2789	if (rs_is_raid10(rs)) {
2790		if (rs->raid_disks != mddev->raid_disks &&
2791		    __is_raid10_near(mddev->layout) &&
2792		    rs->raid10_copies &&
2793		    rs->raid10_copies != __raid10_near_copies(mddev->layout)) {
2794			/*
2795			 * raid disk have to be multiple of data copies to allow this conversion,
2796			 *
2797			 * This is actually not a reshape it is a
2798			 * rebuild of any additional mirrors per group
2799			 */
2800			if (rs->raid_disks % rs->raid10_copies) {
2801				rs->ti->error = "Can't reshape raid10 mirror groups";
2802				return -EINVAL;
2803			}
2804
2805			/* Userpace reordered disks to add/remove mirrors -> adjust raid_disk indexes */
2806			__reorder_raid_disk_indexes(rs);
2807			mddev->layout = raid10_format_to_md_layout(rs, ALGORITHM_RAID10_NEAR,
2808								   rs->raid10_copies);
2809			mddev->new_layout = mddev->layout;
2810			reshape = false;
2811		} else
2812			reshape = true;
2813
2814	} else if (rs_is_raid456(rs))
2815		reshape = true;
2816
2817	else if (rs_is_raid1(rs)) {
2818		if (rs->delta_disks) {
2819			/* Process raid1 via delta_disks */
2820			mddev->degraded = rs->delta_disks < 0 ? -rs->delta_disks : rs->delta_disks;
2821			reshape = true;
2822		} else {
2823			/* Process raid1 without delta_disks */
2824			mddev->raid_disks = rs->raid_disks;
2825			reshape = false;
2826		}
2827	} else {
2828		rs->ti->error = "Called with bogus raid type";
2829		return -EINVAL;
2830	}
2831
2832	if (reshape) {
2833		set_bit(RT_FLAG_RESHAPE_RS, &rs->runtime_flags);
2834		set_bit(RT_FLAG_UPDATE_SBS, &rs->runtime_flags);
2835	} else if (mddev->raid_disks < rs->raid_disks)
2836		/* Create new superblocks and bitmaps, if any new disks */
2837		set_bit(RT_FLAG_UPDATE_SBS, &rs->runtime_flags);
2838
2839	return 0;
2840}
2841
2842/*
2843 * Reshape:
2844 * - change raid layout
2845 * - change chunk size
2846 * - add disks
2847 * - remove disks
2848 */
2849static int rs_setup_reshape(struct raid_set *rs)
2850{
2851	int r = 0;
2852	unsigned int cur_raid_devs, d;
2853	sector_t reshape_sectors = _get_reshape_sectors(rs);
2854	struct mddev *mddev = &rs->md;
2855	struct md_rdev *rdev;
2856
2857	mddev->delta_disks = rs->delta_disks;
2858	cur_raid_devs = mddev->raid_disks;
2859
2860	/* Ignore impossible layout change whilst adding/removing disks */
2861	if (mddev->delta_disks &&
2862	    mddev->layout != mddev->new_layout) {
2863		DMINFO("Ignoring invalid layout change with delta_disks=%d", rs->delta_disks);
2864		mddev->new_layout = mddev->layout;
2865	}
2866
2867	/*
2868	 * Adjust array size:
2869	 *
2870	 * - in case of adding disk(s), array size has
2871	 *   to grow after the disk adding reshape,
2872	 *   which'll happen in the event handler;
2873	 *   reshape will happen forward, so space has to
2874	 *   be available at the beginning of each disk
2875	 *
2876	 * - in case of removing disk(s), array size
2877	 *   has to shrink before starting the reshape,
2878	 *   which'll happen here;
2879	 *   reshape will happen backward, so space has to
2880	 *   be available at the end of each disk
2881	 *
2882	 * - data_offset and new_data_offset are
2883	 *   adjusted for aforementioned out of place
2884	 *   reshaping based on userspace passing in
2885	 *   the "data_offset <sectors>" key/value
2886	 *   pair via the constructor
2887	 */
2888
2889	/* Add disk(s) */
2890	if (rs->delta_disks > 0) {
2891		/* Prepare disks for check in raid4/5/6/10 {check|start}_reshape */
2892		for (d = cur_raid_devs; d < rs->raid_disks; d++) {
2893			rdev = &rs->dev[d].rdev;
2894			clear_bit(In_sync, &rdev->flags);
2895
2896			/*
2897			 * save_raid_disk needs to be -1, or recovery_offset will be set to 0
2898			 * by md, which'll store that erroneously in the superblock on reshape
2899			 */
2900			rdev->saved_raid_disk = -1;
2901			rdev->raid_disk = d;
2902
2903			rdev->sectors = mddev->dev_sectors;
2904			rdev->recovery_offset = rs_is_raid1(rs) ? 0 : MaxSector;
2905		}
2906
2907		mddev->reshape_backwards = 0; /* adding disk(s) -> forward reshape */
2908
2909	/* Remove disk(s) */
2910	} else if (rs->delta_disks < 0) {
2911		r = rs_set_dev_and_array_sectors(rs, rs->ti->len, true);
2912		mddev->reshape_backwards = 1; /* removing disk(s) -> backward reshape */
2913
2914	/* Change layout and/or chunk size */
2915	} else {
2916		/*
2917		 * Reshape layout (e.g. raid5_ls -> raid5_n) and/or chunk size:
2918		 *
2919		 * keeping number of disks and do layout change ->
2920		 *
2921		 * toggle reshape_backward depending on data_offset:
2922		 *
2923		 * - free space upfront -> reshape forward
2924		 *
2925		 * - free space at the end -> reshape backward
2926		 *
2927		 *
2928		 * This utilizes free reshape space avoiding the need
2929		 * for userspace to move (parts of) LV segments in
2930		 * case of layout/chunksize change  (for disk
2931		 * adding/removing reshape space has to be at
2932		 * the proper address (see above with delta_disks):
2933		 *
2934		 * add disk(s)   -> begin
2935		 * remove disk(s)-> end
2936		 */
2937		mddev->reshape_backwards = rs->dev[0].rdev.data_offset ? 0 : 1;
2938	}
2939
2940	/*
2941	 * Adjust device size for forward reshape
2942	 * because md_finish_reshape() reduces it.
2943	 */
2944	if (!mddev->reshape_backwards)
2945		rdev_for_each(rdev, &rs->md)
2946			if (!test_bit(Journal, &rdev->flags))
2947				rdev->sectors += reshape_sectors;
2948
2949	return r;
2950}
2951
2952/*
2953 * If the md resync thread has updated superblock with max reshape position
2954 * at the end of a reshape but not (yet) reset the layout configuration
2955 * changes -> reset the latter.
2956 */
2957static void rs_reset_inconclusive_reshape(struct raid_set *rs)
2958{
2959	if (!rs_is_reshaping(rs) && rs_is_layout_change(rs, true)) {
2960		rs_set_cur(rs);
2961		rs->md.delta_disks = 0;
2962		rs->md.reshape_backwards = 0;
2963	}
2964}
2965
2966/*
2967 * Enable/disable discard support on RAID set depending on
2968 * RAID level and discard properties of underlying RAID members.
2969 */
2970static void configure_discard_support(struct raid_set *rs)
2971{
2972	int i;
2973	bool raid456;
2974	struct dm_target *ti = rs->ti;
2975
2976	/*
2977	 * XXX: RAID level 4,5,6 require zeroing for safety.
2978	 */
2979	raid456 = rs_is_raid456(rs);
2980
2981	for (i = 0; i < rs->raid_disks; i++) {
2982		if (!rs->dev[i].rdev.bdev ||
2983		    !bdev_max_discard_sectors(rs->dev[i].rdev.bdev))
2984			return;
2985
2986		if (raid456) {
2987			if (!devices_handle_discard_safely) {
2988				DMERR("raid456 discard support disabled due to discard_zeroes_data uncertainty.");
2989				DMERR("Set dm-raid.devices_handle_discard_safely=Y to override.");
2990				return;
2991			}
2992		}
2993	}
2994
2995	ti->num_discard_bios = 1;
2996}
2997
2998/*
2999 * Construct a RAID0/1/10/4/5/6 mapping:
3000 * Args:
3001 *	<raid_type> <#raid_params> <raid_params>{0,}	\
3002 *	<#raid_devs> [<meta_dev1> <dev1>]{1,}
3003 *
3004 * <raid_params> varies by <raid_type>.	 See 'parse_raid_params' for
3005 * details on possible <raid_params>.
3006 *
3007 * Userspace is free to initialize the metadata devices, hence the superblocks to
3008 * enforce recreation based on the passed in table parameters.
3009 *
3010 */
3011static int raid_ctr(struct dm_target *ti, unsigned int argc, char **argv)
3012{
3013	int r;
3014	bool resize = false;
3015	struct raid_type *rt;
3016	unsigned int num_raid_params, num_raid_devs;
3017	sector_t sb_array_sectors, rdev_sectors, reshape_sectors;
3018	struct raid_set *rs = NULL;
3019	const char *arg;
3020	struct rs_layout rs_layout;
3021	struct dm_arg_set as = { argc, argv }, as_nrd;
3022	struct dm_arg _args[] = {
3023		{ 0, as.argc, "Cannot understand number of raid parameters" },
3024		{ 1, 254, "Cannot understand number of raid devices parameters" }
3025	};
3026
3027	arg = dm_shift_arg(&as);
3028	if (!arg) {
3029		ti->error = "No arguments";
3030		return -EINVAL;
3031	}
3032
3033	rt = get_raid_type(arg);
3034	if (!rt) {
3035		ti->error = "Unrecognised raid_type";
3036		return -EINVAL;
3037	}
3038
3039	/* Must have <#raid_params> */
3040	if (dm_read_arg_group(_args, &as, &num_raid_params, &ti->error))
3041		return -EINVAL;
3042
3043	/* number of raid device tupples <meta_dev data_dev> */
3044	as_nrd = as;
3045	dm_consume_args(&as_nrd, num_raid_params);
3046	_args[1].max = (as_nrd.argc - 1) / 2;
3047	if (dm_read_arg(_args + 1, &as_nrd, &num_raid_devs, &ti->error))
3048		return -EINVAL;
3049
3050	if (!__within_range(num_raid_devs, 1, MAX_RAID_DEVICES)) {
3051		ti->error = "Invalid number of supplied raid devices";
3052		return -EINVAL;
3053	}
3054
3055	rs = raid_set_alloc(ti, rt, num_raid_devs);
3056	if (IS_ERR(rs))
3057		return PTR_ERR(rs);
3058
3059	r = parse_raid_params(rs, &as, num_raid_params);
3060	if (r)
3061		goto bad;
3062
3063	r = parse_dev_params(rs, &as);
3064	if (r)
3065		goto bad;
3066
3067	rs->md.sync_super = super_sync;
3068
3069	/*
3070	 * Calculate ctr requested array and device sizes to allow
3071	 * for superblock analysis needing device sizes defined.
3072	 *
3073	 * Any existing superblock will overwrite the array and device sizes
3074	 */
3075	r = rs_set_dev_and_array_sectors(rs, rs->ti->len, false);
3076	if (r)
3077		goto bad;
3078
3079	/* Memorize just calculated, potentially larger sizes to grow the raid set in preresume */
3080	rs->array_sectors = rs->md.array_sectors;
3081	rs->dev_sectors = rs->md.dev_sectors;
3082
3083	/*
3084	 * Backup any new raid set level, layout, ...
3085	 * requested to be able to compare to superblock
3086	 * members for conversion decisions.
3087	 */
3088	rs_config_backup(rs, &rs_layout);
3089
3090	r = analyse_superblocks(ti, rs);
3091	if (r)
3092		goto bad;
3093
3094	/* All in-core metadata now as of current superblocks after calling analyse_superblocks() */
3095	sb_array_sectors = rs->md.array_sectors;
3096	rdev_sectors = __rdev_sectors(rs);
3097	if (!rdev_sectors) {
3098		ti->error = "Invalid rdev size";
3099		r = -EINVAL;
3100		goto bad;
3101	}
3102
3103
3104	reshape_sectors = _get_reshape_sectors(rs);
3105	if (rs->dev_sectors != rdev_sectors) {
3106		resize = (rs->dev_sectors != rdev_sectors - reshape_sectors);
3107		if (rs->dev_sectors > rdev_sectors - reshape_sectors)
3108			set_bit(RT_FLAG_RS_GROW, &rs->runtime_flags);
3109	}
3110
3111	INIT_WORK(&rs->md.event_work, do_table_event);
3112	ti->private = rs;
3113	ti->num_flush_bios = 1;
3114	ti->needs_bio_set_dev = true;
3115
3116	/* Restore any requested new layout for conversion decision */
3117	rs_config_restore(rs, &rs_layout);
3118
3119	/*
3120	 * Now that we have any superblock metadata available,
3121	 * check for new, recovering, reshaping, to be taken over,
3122	 * to be reshaped or an existing, unchanged raid set to
3123	 * run in sequence.
3124	 */
3125	if (test_bit(MD_ARRAY_FIRST_USE, &rs->md.flags)) {
3126		/* A new raid6 set has to be recovered to ensure proper parity and Q-Syndrome */
3127		if (rs_is_raid6(rs) &&
3128		    test_bit(__CTR_FLAG_NOSYNC, &rs->ctr_flags)) {
3129			ti->error = "'nosync' not allowed for new raid6 set";
3130			r = -EINVAL;
3131			goto bad;
3132		}
3133		rs_setup_recovery(rs, 0);
3134		set_bit(RT_FLAG_UPDATE_SBS, &rs->runtime_flags);
3135		rs_set_new(rs);
3136	} else if (rs_is_recovering(rs)) {
3137		/* A recovering raid set may be resized */
3138		goto size_check;
3139	} else if (rs_is_reshaping(rs)) {
3140		/* Have to reject size change request during reshape */
3141		if (resize) {
3142			ti->error = "Can't resize a reshaping raid set";
3143			r = -EPERM;
3144			goto bad;
3145		}
3146		/* skip setup rs */
3147	} else if (rs_takeover_requested(rs)) {
3148		if (rs_is_reshaping(rs)) {
3149			ti->error = "Can't takeover a reshaping raid set";
3150			r = -EPERM;
3151			goto bad;
3152		}
3153
3154		/* We can't takeover a journaled raid4/5/6 */
3155		if (test_bit(__CTR_FLAG_JOURNAL_DEV, &rs->ctr_flags)) {
3156			ti->error = "Can't takeover a journaled raid4/5/6 set";
3157			r = -EPERM;
3158			goto bad;
3159		}
3160
3161		/*
3162		 * If a takeover is needed, userspace sets any additional
3163		 * devices to rebuild and we can check for a valid request here.
3164		 *
3165		 * If acceptable, set the level to the new requested
3166		 * one, prohibit requesting recovery, allow the raid
3167		 * set to run and store superblocks during resume.
3168		 */
3169		r = rs_check_takeover(rs);
3170		if (r)
3171			goto bad;
3172
3173		r = rs_setup_takeover(rs);
3174		if (r)
3175			goto bad;
3176
3177		set_bit(RT_FLAG_UPDATE_SBS, &rs->runtime_flags);
3178		/* Takeover ain't recovery, so disable recovery */
3179		rs_setup_recovery(rs, MaxSector);
3180		rs_set_new(rs);
3181	} else if (rs_reshape_requested(rs)) {
3182		/* Only request grow on raid set size extensions, not on reshapes. */
3183		clear_bit(RT_FLAG_RS_GROW, &rs->runtime_flags);
3184
3185		/*
3186		 * No need to check for 'ongoing' takeover here, because takeover
3187		 * is an instant operation as oposed to an ongoing reshape.
3188		 */
3189
3190		/* We can't reshape a journaled raid4/5/6 */
3191		if (test_bit(__CTR_FLAG_JOURNAL_DEV, &rs->ctr_flags)) {
3192			ti->error = "Can't reshape a journaled raid4/5/6 set";
3193			r = -EPERM;
3194			goto bad;
3195		}
3196
3197		/* Out-of-place space has to be available to allow for a reshape unless raid1! */
3198		if (reshape_sectors || rs_is_raid1(rs)) {
3199			/*
3200			 * We can only prepare for a reshape here, because the
3201			 * raid set needs to run to provide the respective reshape
3202			 * check functions via its MD personality instance.
3203			 *
3204			 * So do the reshape check after md_run() succeeded.
3205			 */
3206			r = rs_prepare_reshape(rs);
3207			if (r)
3208				goto bad;
3209
3210			/* Reshaping ain't recovery, so disable recovery */
3211			rs_setup_recovery(rs, MaxSector);
3212		}
3213		rs_set_cur(rs);
3214	} else {
3215size_check:
3216		/* May not set recovery when a device rebuild is requested */
3217		if (test_bit(__CTR_FLAG_REBUILD, &rs->ctr_flags)) {
3218			clear_bit(RT_FLAG_RS_GROW, &rs->runtime_flags);
3219			set_bit(RT_FLAG_UPDATE_SBS, &rs->runtime_flags);
3220			rs_setup_recovery(rs, MaxSector);
3221		} else if (test_bit(RT_FLAG_RS_GROW, &rs->runtime_flags)) {
3222			/*
3223			 * Set raid set to current size, i.e. size as of
3224			 * superblocks to grow to larger size in preresume.
3225			 */
3226			r = rs_set_dev_and_array_sectors(rs, sb_array_sectors, false);
3227			if (r)
3228				goto bad;
3229
3230			rs_setup_recovery(rs, rs->md.resync_offset < rs->md.dev_sectors ? rs->md.resync_offset : rs->md.dev_sectors);
3231		} else {
3232			/* This is no size change or it is shrinking, update size and record in superblocks */
3233			r = rs_set_dev_and_array_sectors(rs, rs->ti->len, false);
3234			if (r)
3235				goto bad;
3236
3237			if (sb_array_sectors > rs->array_sectors)
3238				set_bit(RT_FLAG_UPDATE_SBS, &rs->runtime_flags);
3239		}
3240		rs_set_cur(rs);
3241	}
3242
3243	/* If constructor requested it, change data and new_data offsets */
3244	r = rs_adjust_data_offsets(rs);
3245	if (r)
3246		goto bad;
3247
3248	/* Catch any inconclusive reshape superblock content. */
3249	rs_reset_inconclusive_reshape(rs);
3250
3251	/* Start raid set read-only and assumed clean to change in raid_resume() */
3252	rs->md.ro = MD_RDONLY;
3253	rs->md.in_sync = 1;
3254
3255	/* Has to be held on running the array */
3256	mddev_suspend_and_lock_nointr(&rs->md);
3257
3258	/* Keep array frozen until resume. */
3259	md_frozen_sync_thread(&rs->md);
3260
3261	r = md_run(&rs->md);
3262	rs->md.in_sync = 0; /* Assume already marked dirty */
3263	if (r) {
3264		ti->error = "Failed to run raid array";
3265		mddev_unlock(&rs->md);
3266		goto bad;
3267	}
3268
3269	r = md_start(&rs->md);
3270	if (r) {
3271		ti->error = "Failed to start raid array";
3272		goto bad_unlock;
3273	}
3274
3275	/* If raid4/5/6 journal mode explicitly requested (only possible with journal dev) -> set it */
3276	if (test_bit(__CTR_FLAG_JOURNAL_MODE, &rs->ctr_flags)) {
3277		r = r5c_journal_mode_set(&rs->md, rs->journal_dev.mode);
3278		if (r) {
3279			ti->error = "Failed to set raid4/5/6 journal mode";
3280			goto bad_unlock;
3281		}
3282	}
3283
3284	set_bit(RT_FLAG_RS_SUSPENDED, &rs->runtime_flags);
3285
3286	/* Try to adjust the raid4/5/6 stripe cache size to the stripe size */
3287	if (rs_is_raid456(rs)) {
3288		r = rs_set_raid456_stripe_cache(rs);
3289		if (r)
3290			goto bad_unlock;
3291	}
3292
3293	/* Now do an early reshape check */
3294	if (test_bit(RT_FLAG_RESHAPE_RS, &rs->runtime_flags)) {
3295		r = rs_check_reshape(rs);
3296		if (r)
3297			goto bad_unlock;
3298
3299		/* Restore new, ctr requested layout to perform check */
3300		rs_config_restore(rs, &rs_layout);
3301
3302		if (rs->md.pers->start_reshape) {
3303			r = rs->md.pers->check_reshape(&rs->md);
3304			if (r) {
3305				ti->error = "Reshape check failed";
3306				goto bad_unlock;
3307			}
3308		}
3309	}
3310
3311	/* Disable/enable discard support on raid set. */
3312	configure_discard_support(rs);
3313	rs->md.dm_gendisk = dm_disk(dm_table_get_md(ti->table));
3314
3315	mddev_unlock(&rs->md);
3316	return 0;
3317
3318bad_unlock:
3319	md_stop(&rs->md);
3320	mddev_unlock(&rs->md);
3321bad:
3322	raid_set_free(rs);
3323
3324	return r;
3325}
3326
3327static void raid_dtr(struct dm_target *ti)
3328{
3329	struct raid_set *rs = ti->private;
3330
3331	mddev_lock_nointr(&rs->md);
3332	md_stop(&rs->md);
3333	rs->md.dm_gendisk = NULL;
3334	mddev_unlock(&rs->md);
3335
3336	if (work_pending(&rs->md.event_work))
3337		flush_work(&rs->md.event_work);
3338	raid_set_free(rs);
3339}
3340
3341static int raid_map(struct dm_target *ti, struct bio *bio)
3342{
3343	struct raid_set *rs = ti->private;
3344	struct mddev *mddev = &rs->md;
3345
3346	/*
3347	 * If we're reshaping to add disk(s), ti->len and
3348	 * mddev->array_sectors will differ during the process
3349	 * (ti->len > mddev->array_sectors), so we have to requeue
3350	 * bios with addresses > mddev->array_sectors here or
3351	 * there will occur accesses past EOD of the component
3352	 * data images thus erroring the raid set.
3353	 */
3354	if (unlikely(bio_has_data(bio) && bio_end_sector(bio) > mddev->array_sectors))
3355		return DM_MAPIO_REQUEUE;
3356
3357	if (unlikely(!md_handle_request(mddev, bio)))
3358		return DM_MAPIO_REQUEUE;
3359
3360	return DM_MAPIO_SUBMITTED;
3361}
3362
3363/* Return sync state string for @state */
3364enum sync_state { st_frozen, st_reshape, st_resync, st_check, st_repair, st_recover, st_idle };
3365static const char *sync_str(enum sync_state state)
3366{
3367	/* Has to be in above sync_state order! */
3368	static const char *sync_strs[] = {
3369		"frozen",
3370		"reshape",
3371		"resync",
3372		"check",
3373		"repair",
3374		"recover",
3375		"idle"
3376	};
3377
3378	return __within_range(state, 0, ARRAY_SIZE(sync_strs) - 1) ? sync_strs[state] : "undef";
3379};
3380
3381/* Return enum sync_state for @mddev derived from @recovery flags */
3382static enum sync_state decipher_sync_action(struct mddev *mddev, unsigned long recovery)
3383{
3384	if (test_bit(MD_RECOVERY_FROZEN, &recovery))
3385		return st_frozen;
3386
3387	/* The MD sync thread can be done with io or be interrupted but still be running */
3388	if (!test_bit(MD_RECOVERY_DONE, &recovery) &&
3389	    (test_bit(MD_RECOVERY_RUNNING, &recovery) ||
3390	     (md_is_rdwr(mddev) && test_bit(MD_RECOVERY_NEEDED, &recovery)))) {
3391		if (test_bit(MD_RECOVERY_RESHAPE, &recovery))
3392			return st_reshape;
3393
3394		if (test_bit(MD_RECOVERY_SYNC, &recovery)) {
3395			if (!test_bit(MD_RECOVERY_REQUESTED, &recovery))
3396				return st_resync;
3397			if (test_bit(MD_RECOVERY_CHECK, &recovery))
3398				return st_check;
3399			return st_repair;
3400		}
3401
3402		if (test_bit(MD_RECOVERY_RECOVER, &recovery))
3403			return st_recover;
3404
3405		if (mddev->reshape_position != MaxSector)
3406			return st_reshape;
3407	}
3408
3409	return st_idle;
3410}
3411
3412/*
3413 * Return status string for @rdev
3414 *
3415 * Status characters:
3416 *
3417 *  'D' = Dead/Failed raid set component or raid4/5/6 journal device
3418 *  'a' = Alive but not in-sync raid set component _or_ alive raid4/5/6 'write_back' journal device
3419 *  'A' = Alive and in-sync raid set component _or_ alive raid4/5/6 'write_through' journal device
3420 *  '-' = Non-existing device (i.e. uspace passed '- -' into the ctr)
3421 */
3422static const char *__raid_dev_status(struct raid_set *rs, struct md_rdev *rdev)
3423{
3424	if (!rdev->bdev)
3425		return "-";
3426	else if (test_bit(Faulty, &rdev->flags))
3427		return "D";
3428	else if (test_bit(Journal, &rdev->flags))
3429		return (rs->journal_dev.mode == R5C_JOURNAL_MODE_WRITE_THROUGH) ? "A" : "a";
3430	else if (test_bit(RT_FLAG_RS_RESYNCING, &rs->runtime_flags) ||
3431		 (!test_bit(RT_FLAG_RS_IN_SYNC, &rs->runtime_flags) &&
3432		  !test_bit(In_sync, &rdev->flags)))
3433		return "a";
3434	else
3435		return "A";
3436}
3437
3438/* Helper to return resync/reshape progress for @rs and runtime flags for raid set in sync / resynching */
3439static sector_t rs_get_progress(struct raid_set *rs, unsigned long recovery,
3440				enum sync_state state, sector_t resync_max_sectors)
3441{
3442	sector_t r;
3443	struct mddev *mddev = &rs->md;
3444
3445	clear_bit(RT_FLAG_RS_IN_SYNC, &rs->runtime_flags);
3446	clear_bit(RT_FLAG_RS_RESYNCING, &rs->runtime_flags);
3447
3448	if (rs_is_raid0(rs)) {
3449		r = resync_max_sectors;
3450		set_bit(RT_FLAG_RS_IN_SYNC, &rs->runtime_flags);
3451
3452	} else {
3453		if (state == st_idle && !test_bit(MD_RECOVERY_INTR, &recovery))
3454			r = mddev->resync_offset;
3455		else
3456			r = mddev->curr_resync_completed;
3457
3458		if (state == st_idle && r >= resync_max_sectors) {
3459			/*
3460			 * Sync complete.
3461			 */
3462			/* In case we have finished recovering, the array is in sync. */
3463			if (test_bit(MD_RECOVERY_RECOVER, &recovery))
3464				set_bit(RT_FLAG_RS_IN_SYNC, &rs->runtime_flags);
3465
3466		} else if (state == st_recover)
3467			/*
3468			 * In case we are recovering, the array is not in sync
3469			 * and health chars should show the recovering legs.
3470			 *
3471			 * Already retrieved recovery offset from curr_resync_completed above.
3472			 */
3473			;
3474
3475		else if (state == st_resync || state == st_reshape)
3476			/*
3477			 * If "resync/reshape" is occurring, the raid set
3478			 * is or may be out of sync hence the health
3479			 * characters shall be 'a'.
3480			 */
3481			set_bit(RT_FLAG_RS_RESYNCING, &rs->runtime_flags);
3482
3483		else if (state == st_check || state == st_repair)
3484			/*
3485			 * If "check" or "repair" is occurring, the raid set has
3486			 * undergone an initial sync and the health characters
3487			 * should not be 'a' anymore.
3488			 */
3489			set_bit(RT_FLAG_RS_IN_SYNC, &rs->runtime_flags);
3490
3491		else if (test_bit(MD_RECOVERY_NEEDED, &recovery))
3492			/*
3493			 * We are idle and recovery is needed, prevent 'A' chars race
3494			 * caused by components still set to in-sync by constructor.
3495			 */
3496			set_bit(RT_FLAG_RS_RESYNCING, &rs->runtime_flags);
3497
3498		else {
3499			/*
3500			 * We are idle and the raid set may be doing an initial
3501			 * sync, or it may be rebuilding individual components.
3502			 * If all the devices are In_sync, then it is the raid set
3503			 * that is being initialized.
3504			 */
3505			struct md_rdev *rdev;
3506
3507			set_bit(RT_FLAG_RS_IN_SYNC, &rs->runtime_flags);
3508			rdev_for_each(rdev, mddev)
3509				if (!test_bit(Journal, &rdev->flags) &&
3510				    !test_bit(In_sync, &rdev->flags)) {
3511					clear_bit(RT_FLAG_RS_IN_SYNC, &rs->runtime_flags);
3512					break;
3513				}
3514		}
3515	}
3516
3517	return min(r, resync_max_sectors);
3518}
3519
3520/* Helper to return @dev name or "-" if !@dev */
3521static const char *__get_dev_name(struct dm_dev *dev)
3522{
3523	return dev ? dev->name : "-";
3524}
3525
3526static void raid_status(struct dm_target *ti, status_type_t type,
3527			unsigned int status_flags, char *result, unsigned int maxlen)
3528{
3529	struct raid_set *rs = ti->private;
3530	struct mddev *mddev = &rs->md;
3531	struct r5conf *conf = rs_is_raid456(rs) ? mddev->private : NULL;
3532	int i, max_nr_stripes = conf ? conf->max_nr_stripes : 0;
3533	unsigned long recovery;
3534	unsigned int raid_param_cnt = 1; /* at least 1 for chunksize */
3535	unsigned int sz = 0;
3536	unsigned int rebuild_writemostly_count = 0;
3537	sector_t progress, resync_max_sectors, resync_mismatches;
3538	enum sync_state state;
3539	struct raid_type *rt;
3540
3541	switch (type) {
3542	case STATUSTYPE_INFO:
3543		/* *Should* always succeed */
3544		rt = get_raid_type_by_ll(mddev->new_level, mddev->new_layout);
3545		if (!rt)
3546			return;
3547
3548		DMEMIT("%s %d ", rt->name, mddev->raid_disks);
3549
3550		/* Access most recent mddev properties for status output */
3551		smp_rmb();
3552		/* Get sensible max sectors even if raid set not yet started */
3553		resync_max_sectors = test_bit(RT_FLAG_RS_PRERESUMED, &rs->runtime_flags) ?
3554				      mddev->resync_max_sectors : mddev->dev_sectors;
3555		recovery = rs->md.recovery;
3556		state = decipher_sync_action(mddev, recovery);
3557		progress = rs_get_progress(rs, recovery, state, resync_max_sectors);
3558		resync_mismatches = mddev->last_sync_action == ACTION_CHECK ?
3559				    atomic64_read(&mddev->resync_mismatches) : 0;
3560
3561		/* HM FIXME: do we want another state char for raid0? It shows 'D'/'A'/'-' now */
3562		for (i = 0; i < rs->raid_disks; i++)
3563			DMEMIT(__raid_dev_status(rs, &rs->dev[i].rdev));
3564
3565		/*
3566		 * In-sync/Reshape ratio:
3567		 *  The in-sync ratio shows the progress of:
3568		 *   - Initializing the raid set
3569		 *   - Rebuilding a subset of devices of the raid set
3570		 *  The user can distinguish between the two by referring
3571		 *  to the status characters.
3572		 *
3573		 *  The reshape ratio shows the progress of
3574		 *  changing the raid layout or the number of
3575		 *  disks of a raid set
3576		 */
3577		DMEMIT(" %llu/%llu", (unsigned long long) progress,
3578				     (unsigned long long) resync_max_sectors);
3579
3580		/*
3581		 * v1.5.0+:
3582		 *
3583		 * Sync action:
3584		 *   See Documentation/admin-guide/device-mapper/dm-raid.rst for
3585		 *   information on each of these states.
3586		 */
3587		DMEMIT(" %s", sync_str(state));
3588
3589		/*
3590		 * v1.5.0+:
3591		 *
3592		 * resync_mismatches/mismatch_cnt
3593		 *   This field shows the number of discrepancies found when
3594		 *   performing a "check" of the raid set.
3595		 */
3596		DMEMIT(" %llu", (unsigned long long) resync_mismatches);
3597
3598		/*
3599		 * v1.9.0+:
3600		 *
3601		 * data_offset (needed for out of space reshaping)
3602		 *   This field shows the data offset into the data
3603		 *   image LV where the first stripes data starts.
3604		 *
3605		 * We keep data_offset equal on all raid disks of the set,
3606		 * so retrieving it from the first raid disk is sufficient.
3607		 */
3608		DMEMIT(" %llu", (unsigned long long) rs->dev[0].rdev.data_offset);
3609
3610		/*
3611		 * v1.10.0+:
3612		 */
3613		DMEMIT(" %s", test_bit(__CTR_FLAG_JOURNAL_DEV, &rs->ctr_flags) ?
3614			      __raid_dev_status(rs, &rs->journal_dev.rdev) : "-");
3615		break;
3616
3617	case STATUSTYPE_TABLE:
3618		/* Report the table line string you would use to construct this raid set */
3619
3620		/*
3621		 * Count any rebuild or writemostly argument pairs and subtract the
3622		 * hweight count being added below of any rebuild and writemostly ctr flags.
3623		 */
3624		for (i = 0; i < rs->raid_disks; i++) {
3625			rebuild_writemostly_count += (test_bit(i, (void *) rs->rebuild_disks) ? 2 : 0) +
3626						     (test_bit(WriteMostly, &rs->dev[i].rdev.flags) ? 2 : 0);
3627		}
3628		rebuild_writemostly_count -= (test_bit(__CTR_FLAG_REBUILD, &rs->ctr_flags) ? 2 : 0) +
3629					     (test_bit(__CTR_FLAG_WRITE_MOSTLY, &rs->ctr_flags) ? 2 : 0);
3630		/* Calculate raid parameter count based on ^ rebuild/writemostly argument counts and ctr flags set. */
3631		raid_param_cnt += rebuild_writemostly_count +
3632				  hweight32(rs->ctr_flags & CTR_FLAG_OPTIONS_NO_ARGS) +
3633				  hweight32(rs->ctr_flags & CTR_FLAG_OPTIONS_ONE_ARG) * 2;
3634		/* Emit table line */
3635		/* This has to be in the documented order for userspace! */
3636		DMEMIT("%s %u %u", rs->raid_type->name, raid_param_cnt, mddev->new_chunk_sectors);
3637		if (test_bit(__CTR_FLAG_SYNC, &rs->ctr_flags))
3638			DMEMIT(" %s", dm_raid_arg_name_by_flag(CTR_FLAG_SYNC));
3639		if (test_bit(__CTR_FLAG_NOSYNC, &rs->ctr_flags))
3640			DMEMIT(" %s", dm_raid_arg_name_by_flag(CTR_FLAG_NOSYNC));
3641		if (test_bit(__CTR_FLAG_REBUILD, &rs->ctr_flags))
3642			for (i = 0; i < rs->raid_disks; i++)
3643				if (test_bit(i, (void *) rs->rebuild_disks))
3644					DMEMIT(" %s %u", dm_raid_arg_name_by_flag(CTR_FLAG_REBUILD), i);
3645		if (test_bit(__CTR_FLAG_DAEMON_SLEEP, &rs->ctr_flags))
3646			DMEMIT(" %s %lu", dm_raid_arg_name_by_flag(CTR_FLAG_DAEMON_SLEEP),
3647					  mddev->bitmap_info.daemon_sleep);
3648		if (test_bit(__CTR_FLAG_MIN_RECOVERY_RATE, &rs->ctr_flags))
3649			DMEMIT(" %s %d", dm_raid_arg_name_by_flag(CTR_FLAG_MIN_RECOVERY_RATE),
3650					 mddev->sync_speed_min);
3651		if (test_bit(__CTR_FLAG_MAX_RECOVERY_RATE, &rs->ctr_flags))
3652			DMEMIT(" %s %d", dm_raid_arg_name_by_flag(CTR_FLAG_MAX_RECOVERY_RATE),
3653					 mddev->sync_speed_max);
3654		if (test_bit(__CTR_FLAG_WRITE_MOSTLY, &rs->ctr_flags))
3655			for (i = 0; i < rs->raid_disks; i++)
3656				if (test_bit(WriteMostly, &rs->dev[i].rdev.flags))
3657					DMEMIT(" %s %d", dm_raid_arg_name_by_flag(CTR_FLAG_WRITE_MOSTLY),
3658					       rs->dev[i].rdev.raid_disk);
3659		if (test_bit(__CTR_FLAG_MAX_WRITE_BEHIND, &rs->ctr_flags))
3660			DMEMIT(" %s %lu", dm_raid_arg_name_by_flag(CTR_FLAG_MAX_WRITE_BEHIND),
3661					  mddev->bitmap_info.max_write_behind);
3662		if (test_bit(__CTR_FLAG_STRIPE_CACHE, &rs->ctr_flags))
3663			DMEMIT(" %s %d", dm_raid_arg_name_by_flag(CTR_FLAG_STRIPE_CACHE),
3664					 max_nr_stripes);
3665		if (test_bit(__CTR_FLAG_REGION_SIZE, &rs->ctr_flags))
3666			DMEMIT(" %s %llu", dm_raid_arg_name_by_flag(CTR_FLAG_REGION_SIZE),
3667					   (unsigned long long) to_sector(mddev->bitmap_info.chunksize));
3668		if (test_bit(__CTR_FLAG_RAID10_COPIES, &rs->ctr_flags))
3669			DMEMIT(" %s %d", dm_raid_arg_name_by_flag(CTR_FLAG_RAID10_COPIES),
3670					 raid10_md_layout_to_copies(mddev->layout));
3671		if (test_bit(__CTR_FLAG_RAID10_FORMAT, &rs->ctr_flags))
3672			DMEMIT(" %s %s", dm_raid_arg_name_by_flag(CTR_FLAG_RAID10_FORMAT),
3673					 raid10_md_layout_to_format(mddev->layout));
3674		if (test_bit(__CTR_FLAG_DELTA_DISKS, &rs->ctr_flags))
3675			DMEMIT(" %s %d", dm_raid_arg_name_by_flag(CTR_FLAG_DELTA_DISKS),
3676					 max(rs->delta_disks, mddev->delta_disks));
3677		if (test_bit(__CTR_FLAG_DATA_OFFSET, &rs->ctr_flags))
3678			DMEMIT(" %s %llu", dm_raid_arg_name_by_flag(CTR_FLAG_DATA_OFFSET),
3679					   (unsigned long long) rs->data_offset);
3680		if (test_bit(__CTR_FLAG_JOURNAL_DEV, &rs->ctr_flags))
3681			DMEMIT(" %s %s", dm_raid_arg_name_by_flag(CTR_FLAG_JOURNAL_DEV),
3682					__get_dev_name(rs->journal_dev.dev));
3683		if (test_bit(__CTR_FLAG_JOURNAL_MODE, &rs->ctr_flags))
3684			DMEMIT(" %s %s", dm_raid_arg_name_by_flag(CTR_FLAG_JOURNAL_MODE),
3685					 md_journal_mode_to_dm_raid(rs->journal_dev.mode));
3686		DMEMIT(" %d", rs->raid_disks);
3687		for (i = 0; i < rs->raid_disks; i++)
3688			DMEMIT(" %s %s", __get_dev_name(rs->dev[i].meta_dev),
3689					 __get_dev_name(rs->dev[i].data_dev));
3690		break;
3691
3692	case STATUSTYPE_IMA:
3693		rt = get_raid_type_by_ll(mddev->new_level, mddev->new_layout);
3694		if (!rt)
3695			return;
3696
3697		DMEMIT_TARGET_NAME_VERSION(ti->type);
3698		DMEMIT(",raid_type=%s,raid_disks=%d", rt->name, mddev->raid_disks);
3699
3700		/* Access most recent mddev properties for status output */
3701		smp_rmb();
3702		recovery = rs->md.recovery;
3703		state = decipher_sync_action(mddev, recovery);
3704		DMEMIT(",raid_state=%s", sync_str(state));
3705
3706		for (i = 0; i < rs->raid_disks; i++) {
3707			DMEMIT(",raid_device_%d_status=", i);
3708			DMEMIT(__raid_dev_status(rs, &rs->dev[i].rdev));
3709		}
3710
3711		if (rt_is_raid456(rt)) {
3712			DMEMIT(",journal_dev_mode=");
3713			switch (rs->journal_dev.mode) {
3714			case R5C_JOURNAL_MODE_WRITE_THROUGH:
3715				DMEMIT("%s",
3716				       _raid456_journal_mode[R5C_JOURNAL_MODE_WRITE_THROUGH].param);
3717				break;
3718			case R5C_JOURNAL_MODE_WRITE_BACK:
3719				DMEMIT("%s",
3720				       _raid456_journal_mode[R5C_JOURNAL_MODE_WRITE_BACK].param);
3721				break;
3722			default:
3723				DMEMIT("invalid");
3724				break;
3725			}
3726		}
3727		DMEMIT(";");
3728		break;
3729	}
3730}
3731
3732static int raid_message(struct dm_target *ti, unsigned int argc, char **argv,
3733			char *result, unsigned int maxlen)
3734{
3735	struct raid_set *rs = ti->private;
3736	struct mddev *mddev = &rs->md;
3737	int ret = 0;
3738
3739	if (!mddev->pers || !mddev->pers->sync_request)
3740		return -EINVAL;
3741
3742	if (test_bit(RT_FLAG_RS_SUSPENDED, &rs->runtime_flags) ||
3743	    test_bit(RT_FLAG_RS_FROZEN, &rs->runtime_flags))
3744		return -EBUSY;
3745
3746	if (!strcasecmp(argv[0], "frozen")) {
3747		ret = mddev_lock(mddev);
3748		if (ret)
3749			return ret;
3750
3751		md_frozen_sync_thread(mddev);
3752		mddev_unlock(mddev);
3753	} else if (!strcasecmp(argv[0], "idle")) {
3754		ret = mddev_lock(mddev);
3755		if (ret)
3756			return ret;
3757
3758		md_idle_sync_thread(mddev);
3759		mddev_unlock(mddev);
3760	}
3761
3762	clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
3763	if (decipher_sync_action(mddev, mddev->recovery) != st_idle)
3764		return -EBUSY;
3765	else if (!strcasecmp(argv[0], "resync"))
3766		; /* MD_RECOVERY_NEEDED set below */
3767	else if (!strcasecmp(argv[0], "recover"))
3768		set_bit(MD_RECOVERY_RECOVER, &mddev->recovery);
3769	else {
3770		if (!strcasecmp(argv[0], "check")) {
3771			set_bit(MD_RECOVERY_CHECK, &mddev->recovery);
3772			set_bit(MD_RECOVERY_REQUESTED, &mddev->recovery);
3773			set_bit(MD_RECOVERY_SYNC, &mddev->recovery);
3774		} else if (!strcasecmp(argv[0], "repair")) {
3775			set_bit(MD_RECOVERY_REQUESTED, &mddev->recovery);
3776			set_bit(MD_RECOVERY_SYNC, &mddev->recovery);
3777		} else
3778			return -EINVAL;
3779	}
3780	if (mddev->ro == MD_AUTO_READ) {
3781		/* A write to sync_action is enough to justify
3782		 * canceling read-auto mode
3783		 */
3784		mddev->ro = MD_RDWR;
3785		if (!mddev->suspended)
3786			md_wakeup_thread(mddev->sync_thread);
3787	}
3788	set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
3789	if (!mddev->suspended)
3790		md_wakeup_thread(mddev->thread);
3791
3792	return 0;
3793}
3794
3795static int raid_iterate_devices(struct dm_target *ti,
3796				iterate_devices_callout_fn fn, void *data)
3797{
3798	struct raid_set *rs = ti->private;
3799	unsigned int i;
3800	int r = 0;
3801
3802	for (i = 0; !r && i < rs->raid_disks; i++) {
3803		if (rs->dev[i].data_dev) {
3804			r = fn(ti, rs->dev[i].data_dev,
3805			       0, /* No offset on data devs */
3806			       rs->md.dev_sectors, data);
3807		}
3808	}
3809
3810	return r;
3811}
3812
3813static void raid_io_hints(struct dm_target *ti, struct queue_limits *limits)
3814{
3815	struct raid_set *rs = ti->private;
3816	unsigned int chunk_size_bytes = to_bytes(rs->md.chunk_sectors);
3817
3818	if (chunk_size_bytes) {
3819		limits->io_min = chunk_size_bytes;
3820		limits->io_opt = chunk_size_bytes * mddev_data_stripes(rs);
3821	}
3822}
3823
3824static void raid_presuspend(struct dm_target *ti)
3825{
3826	struct raid_set *rs = ti->private;
3827	struct mddev *mddev = &rs->md;
3828
3829	/*
3830	 * From now on, disallow raid_message() to change sync_thread until
3831	 * resume, raid_postsuspend() is too late.
3832	 */
3833	set_bit(RT_FLAG_RS_FROZEN, &rs->runtime_flags);
3834
3835	if (!reshape_interrupted(mddev))
3836		return;
3837
3838	/*
3839	 * For raid456, if reshape is interrupted, IO across reshape position
3840	 * will never make progress, while caller will wait for IO to be done.
3841	 * Inform raid456 to handle those IO to prevent deadlock.
3842	 */
3843	if (mddev->pers && mddev->pers->prepare_suspend)
3844		mddev->pers->prepare_suspend(mddev);
3845}
3846
3847static void raid_presuspend_undo(struct dm_target *ti)
3848{
3849	struct raid_set *rs = ti->private;
3850
3851	clear_bit(RT_FLAG_RS_FROZEN, &rs->runtime_flags);
3852}
3853
3854static void raid_postsuspend(struct dm_target *ti)
3855{
3856	struct raid_set *rs = ti->private;
3857
3858	if (!test_and_set_bit(RT_FLAG_RS_SUSPENDED, &rs->runtime_flags)) {
3859		/*
3860		 * sync_thread must be stopped during suspend, and writes have
3861		 * to be stopped before suspending to avoid deadlocks.
3862		 */
3863		md_stop_writes(&rs->md);
3864		mddev_suspend(&rs->md, false);
3865		rs->md.ro = MD_RDONLY;
3866	}
3867}
3868
3869static void attempt_restore_of_faulty_devices(struct raid_set *rs)
3870{
3871	int i;
3872	uint64_t cleared_failed_devices[DISKS_ARRAY_ELEMS];
3873	unsigned long flags;
3874	bool cleared = false;
3875	struct dm_raid_superblock *sb;
3876	struct mddev *mddev = &rs->md;
3877	struct md_rdev *r;
3878
3879	/* RAID personalities have to provide hot add/remove methods or we need to bail out. */
3880	if (!mddev->pers || !mddev->pers->hot_add_disk || !mddev->pers->hot_remove_disk)
3881		return;
3882
3883	memset(cleared_failed_devices, 0, sizeof(cleared_failed_devices));
3884
3885	for (i = 0; i < rs->raid_disks; i++) {
3886		r = &rs->dev[i].rdev;
3887		/* HM FIXME: enhance journal device recovery processing */
3888		if (test_bit(Journal, &r->flags))
3889			continue;
3890
3891		if (test_bit(Faulty, &r->flags) &&
3892		    r->meta_bdev && !read_disk_sb(r, r->sb_size, true)) {
3893			DMINFO("Faulty %s device #%d has readable super block."
3894			       "  Attempting to revive it.",
3895			       rs->raid_type->name, i);
3896
3897			/*
3898			 * Faulty bit may be set, but sometimes the array can
3899			 * be suspended before the personalities can respond
3900			 * by removing the device from the array (i.e. calling
3901			 * 'hot_remove_disk').	If they haven't yet removed
3902			 * the failed device, its 'raid_disk' number will be
3903			 * '>= 0' - meaning we must call this function
3904			 * ourselves.
3905			 */
3906			flags = r->flags;
3907			clear_bit(In_sync, &r->flags); /* Mandatory for hot remove. */
3908			if (r->raid_disk >= 0) {
3909				if (mddev->pers->hot_remove_disk(mddev, r)) {
3910					/* Failed to revive this device, try next */
3911					r->flags = flags;
3912					continue;
3913				}
3914			} else
3915				r->raid_disk = r->saved_raid_disk = i;
3916
3917			clear_bit(Faulty, &r->flags);
3918			clear_bit(WriteErrorSeen, &r->flags);
3919
3920			if (mddev->pers->hot_add_disk(mddev, r)) {
3921				/* Failed to revive this device, try next */
3922				r->raid_disk = r->saved_raid_disk = -1;
3923				r->flags = flags;
3924			} else {
3925				clear_bit(In_sync, &r->flags);
3926				r->recovery_offset = 0;
3927				set_bit(i, (void *) cleared_failed_devices);
3928				cleared = true;
3929			}
3930		}
3931	}
3932
3933	/* If any failed devices could be cleared, update all sbs failed_devices bits */
3934	if (cleared) {
3935		uint64_t failed_devices[DISKS_ARRAY_ELEMS];
3936
3937		rdev_for_each(r, &rs->md) {
3938			if (test_bit(Journal, &r->flags))
3939				continue;
3940
3941			sb = page_address(r->sb_page);
3942			sb_retrieve_failed_devices(sb, failed_devices);
3943
3944			for (i = 0; i < DISKS_ARRAY_ELEMS; i++)
3945				failed_devices[i] &= ~cleared_failed_devices[i];
3946
3947			sb_update_failed_devices(sb, failed_devices);
3948		}
3949	}
3950}
3951
3952static int __load_dirty_region_bitmap(struct raid_set *rs)
3953{
3954	int r = 0;
3955
3956	/* Try loading the bitmap unless "raid0", which does not have one */
3957	if (!rs_is_raid0(rs) &&
3958	    !test_and_set_bit(RT_FLAG_RS_BITMAP_LOADED, &rs->runtime_flags)) {
3959		struct mddev *mddev = &rs->md;
3960
3961		if (md_bitmap_enabled(mddev, false)) {
3962			r = mddev->bitmap_ops->load(mddev);
3963			if (r)
3964				DMERR("Failed to load bitmap");
3965		}
3966	}
3967
3968	return r;
3969}
3970
3971/* Enforce updating all superblocks */
3972static void rs_update_sbs(struct raid_set *rs)
3973{
3974	struct mddev *mddev = &rs->md;
3975	int ro = mddev->ro;
3976
3977	set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags);
3978	mddev->ro = MD_RDWR;
3979	md_update_sb(mddev, 1);
3980	mddev->ro = ro;
3981}
3982
3983/*
3984 * Reshape changes raid algorithm of @rs to new one within personality
3985 * (e.g. raid6_zr -> raid6_nc), changes stripe size, adds/removes
3986 * disks from a raid set thus growing/shrinking it or resizes the set
3987 *
3988 * Call mddev_lock_nointr() before!
3989 */
3990static int rs_start_reshape(struct raid_set *rs)
3991{
3992	int r;
3993	struct mddev *mddev = &rs->md;
3994	struct md_personality *pers = mddev->pers;
3995
3996	/* Don't allow the sync thread to work until the table gets reloaded. */
3997	set_bit(MD_RECOVERY_WAIT, &mddev->recovery);
3998
3999	r = rs_setup_reshape(rs);
4000	if (r)
4001		return r;
4002
4003	/*
4004	 * Check any reshape constraints enforced by the personalility
4005	 *
4006	 * May as well already kick the reshape off so that * pers->start_reshape() becomes optional.
4007	 */
4008	r = pers->check_reshape(mddev);
4009	if (r) {
4010		rs->ti->error = "pers->check_reshape() failed";
4011		return r;
4012	}
4013
4014	/*
4015	 * Personality may not provide start reshape method in which
4016	 * case check_reshape above has already covered everything
4017	 */
4018	if (pers->start_reshape) {
4019		r = pers->start_reshape(mddev);
4020		if (r) {
4021			rs->ti->error = "pers->start_reshape() failed";
4022			return r;
4023		}
4024	}
4025
4026	/*
4027	 * Now reshape got set up, update superblocks to
4028	 * reflect the fact so that a table reload will
4029	 * access proper superblock content in the ctr.
4030	 */
4031	rs_update_sbs(rs);
4032
4033	return 0;
4034}
4035
4036static int raid_preresume(struct dm_target *ti)
4037{
4038	int r;
4039	struct raid_set *rs = ti->private;
4040	struct mddev *mddev = &rs->md;
4041
4042	/* This is a resume after a suspend of the set -> it's already started. */
4043	if (test_and_set_bit(RT_FLAG_RS_PRERESUMED, &rs->runtime_flags))
4044		return 0;
4045
4046	/* If different and no explicit grow request, expose MD array size as of superblock. */
4047	if (!test_bit(RT_FLAG_RS_GROW, &rs->runtime_flags) &&
4048	    rs->array_sectors != mddev->array_sectors)
4049		rs_set_capacity(rs);
4050
4051	/*
4052	 * The superblocks need to be updated on disk if the
4053	 * array is new or new devices got added (thus zeroed
4054	 * out by userspace) or __load_dirty_region_bitmap
4055	 * will overwrite them in core with old data or fail.
4056	 */
4057	if (test_bit(RT_FLAG_UPDATE_SBS, &rs->runtime_flags))
4058		rs_update_sbs(rs);
4059
4060	/* Load the bitmap from disk unless raid0 */
4061	r = __load_dirty_region_bitmap(rs);
4062	if (r)
4063		return r;
4064
4065	/* We are extending the raid set size, adjust mddev/md_rdev sizes and set capacity. */
4066	if (test_bit(RT_FLAG_RS_GROW, &rs->runtime_flags)) {
4067		mddev->array_sectors = rs->array_sectors;
4068		mddev->dev_sectors = rs->dev_sectors;
4069		rs_set_rdev_sectors(rs);
4070		rs_set_capacity(rs);
4071	}
4072
4073	/* Resize bitmap to adjust to changed region size (aka MD bitmap chunksize) or grown device size */
4074	if (test_bit(RT_FLAG_RS_BITMAP_LOADED, &rs->runtime_flags) && mddev->bitmap &&
4075	    (test_bit(RT_FLAG_RS_GROW, &rs->runtime_flags) ||
4076	     (rs->requested_bitmap_chunk_sectors &&
4077	       mddev->bitmap_info.chunksize != to_bytes(rs->requested_bitmap_chunk_sectors)))) {
4078		int chunksize = to_bytes(rs->requested_bitmap_chunk_sectors) ?: mddev->bitmap_info.chunksize;
4079
4080		if (md_bitmap_enabled(mddev, false)) {
4081			r = mddev->bitmap_ops->resize(mddev, mddev->dev_sectors,
4082						      chunksize);
4083			if (r)
4084				DMERR("Failed to resize bitmap");
4085		}
4086	}
4087
4088	/* Check for any resize/reshape on @rs and adjust/initiate */
4089	if (mddev->resync_offset && mddev->resync_offset < MaxSector) {
4090		set_bit(MD_RECOVERY_REQUESTED, &mddev->recovery);
4091		mddev->resync_min = mddev->resync_offset;
4092		if (test_bit(RT_FLAG_RS_GROW, &rs->runtime_flags))
4093			mddev->resync_max_sectors = mddev->dev_sectors;
4094	}
4095
4096	/* Check for any reshape request unless new raid set */
4097	if (test_bit(RT_FLAG_RESHAPE_RS, &rs->runtime_flags)) {
4098		/* Initiate a reshape. */
4099		rs_set_rdev_sectors(rs);
4100		mddev_lock_nointr(mddev);
4101		r = rs_start_reshape(rs);
4102		mddev_unlock(mddev);
4103		if (r)
4104			DMWARN("Failed to check/start reshape, continuing without change");
4105		r = 0;
4106	}
4107
4108	return r;
4109}
4110
4111static void raid_resume(struct dm_target *ti)
4112{
4113	struct raid_set *rs = ti->private;
4114	struct mddev *mddev = &rs->md;
4115
4116	if (test_and_set_bit(RT_FLAG_RS_RESUMED, &rs->runtime_flags)) {
4117		/*
4118		 * A secondary resume while the device is active.
4119		 * Take this opportunity to check whether any failed
4120		 * devices are reachable again.
4121		 */
4122		mddev_lock_nointr(mddev);
4123		attempt_restore_of_faulty_devices(rs);
4124		mddev_unlock(mddev);
4125	}
4126
4127	if (test_and_clear_bit(RT_FLAG_RS_SUSPENDED, &rs->runtime_flags)) {
4128		/* Only reduce raid set size before running a disk removing reshape. */
4129		if (mddev->delta_disks < 0)
4130			rs_set_capacity(rs);
4131
4132		mddev_lock_nointr(mddev);
4133		WARN_ON_ONCE(!test_bit(MD_RECOVERY_FROZEN, &mddev->recovery));
4134		WARN_ON_ONCE(rcu_dereference_protected(mddev->sync_thread,
4135						       lockdep_is_held(&mddev->reconfig_mutex)));
4136		clear_bit(RT_FLAG_RS_FROZEN, &rs->runtime_flags);
4137		mddev->ro = MD_RDWR;
4138		mddev->in_sync = 0;
4139		md_unfrozen_sync_thread(mddev);
4140		mddev_unlock_and_resume(mddev);
4141	}
4142}
4143
4144static struct target_type raid_target = {
4145	.name = "raid",
4146	.version = {1, 15, 1},
4147	.module = THIS_MODULE,
4148	.ctr = raid_ctr,
4149	.dtr = raid_dtr,
4150	.map = raid_map,
4151	.status = raid_status,
4152	.message = raid_message,
4153	.iterate_devices = raid_iterate_devices,
4154	.io_hints = raid_io_hints,
4155	.presuspend = raid_presuspend,
4156	.presuspend_undo = raid_presuspend_undo,
4157	.postsuspend = raid_postsuspend,
4158	.preresume = raid_preresume,
4159	.resume = raid_resume,
4160};
4161module_dm(raid);
4162
4163module_param(devices_handle_discard_safely, bool, 0644);
4164MODULE_PARM_DESC(devices_handle_discard_safely,
4165		 "Set to Y if all devices in each array reliably return zeroes on reads from discarded regions");
4166
4167MODULE_DESCRIPTION(DM_NAME " raid0/1/10/4/5/6 target");
4168MODULE_ALIAS("dm-raid0");
4169MODULE_ALIAS("dm-raid1");
4170MODULE_ALIAS("dm-raid10");
4171MODULE_ALIAS("dm-raid4");
4172MODULE_ALIAS("dm-raid5");
4173MODULE_ALIAS("dm-raid6");
4174MODULE_AUTHOR("Neil Brown <dm-devel@lists.linux.dev>");
4175MODULE_AUTHOR("Heinz Mauelshagen <dm-devel@lists.linux.dev>");
4176MODULE_LICENSE("GPL");
~/ Read-only file preview.