xref: /linux/drivers/md/md.c (revision 55ab7e14222e5f0b0fd9f7711ca391d2924b35e3)
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3    md.c : Multiple Devices driver for Linux
4      Copyright (C) 1998, 1999, 2000 Ingo Molnar
5 
6      completely rewritten, based on the MD driver code from Marc Zyngier
7 
8    Changes:
9 
10    - RAID-1/RAID-5 extensions by Miguel de Icaza, Gadi Oxman, Ingo Molnar
11    - RAID-6 extensions by H. Peter Anvin <hpa@zytor.com>
12    - boot support for linear and striped mode by Harald Hoyer <HarryH@Royal.Net>
13    - kerneld support by Boris Tobotras <boris@xtalk.msk.su>
14    - kmod support by: Cyrus Durgin
15    - RAID0 bugfixes: Mark Anthony Lisher <markal@iname.com>
16    - Devfs support by Richard Gooch <rgooch@atnf.csiro.au>
17 
18    - lots of fixes and improvements to the RAID1/RAID5 and generic
19      RAID code (such as request based resynchronization):
20 
21      Neil Brown <neilb@cse.unsw.edu.au>.
22 
23    - persistent bitmap code
24      Copyright (C) 2003-2004, Paul Clements, SteelEye Technology, Inc.
25 
26 
27    Errors, Warnings, etc.
28    Please use:
29      pr_crit() for error conditions that risk data loss
30      pr_err() for error conditions that are unexpected, like an IO error
31          or internal inconsistency
32      pr_warn() for error conditions that could have been predicated, like
33          adding a device to an array when it has incompatible metadata
34      pr_info() for every interesting, very rare events, like an array starting
35          or stopping, or resync starting or stopping
36      pr_debug() for everything else.
37 
38 */
39 
40 #include <linux/sched/mm.h>
41 #include <linux/sched/signal.h>
42 #include <linux/kthread.h>
43 #include <linux/blkdev.h>
44 #include <linux/blk-integrity.h>
45 #include <linux/badblocks.h>
46 #include <linux/sysctl.h>
47 #include <linux/seq_file.h>
48 #include <linux/fs.h>
49 #include <linux/poll.h>
50 #include <linux/ctype.h>
51 #include <linux/string.h>
52 #include <linux/hdreg.h>
53 #include <linux/proc_fs.h>
54 #include <linux/random.h>
55 #include <linux/major.h>
56 #include <linux/module.h>
57 #include <linux/reboot.h>
58 #include <linux/file.h>
59 #include <linux/compat.h>
60 #include <linux/delay.h>
61 #include <linux/raid/md_p.h>
62 #include <linux/raid/md_u.h>
63 #include <linux/raid/detect.h>
64 #include <linux/slab.h>
65 #include <linux/percpu-refcount.h>
66 #include <linux/part_stat.h>
67 
68 #include "md.h"
69 #include "md-bitmap.h"
70 #include "md-cluster.h"
71 
72 static const char *action_name[NR_SYNC_ACTIONS] = {
73 	[ACTION_RESYNC]		= "resync",
74 	[ACTION_RECOVER]	= "recover",
75 	[ACTION_CHECK]		= "check",
76 	[ACTION_REPAIR]		= "repair",
77 	[ACTION_RESHAPE]	= "reshape",
78 	[ACTION_FROZEN]		= "frozen",
79 	[ACTION_IDLE]		= "idle",
80 };
81 
82 static DEFINE_XARRAY(md_submodule);
83 
84 static const struct kobj_type md_ktype;
85 
86 static DECLARE_WAIT_QUEUE_HEAD(resync_wait);
87 
88 /*
89  * This workqueue is used for sync_work to register new sync_thread, and for
90  * del_work to remove rdev, and for event_work that is only set by dm-raid.
91  *
92  * Noted that sync_work will grab reconfig_mutex, hence never flush this
93  * workqueue whith reconfig_mutex grabbed.
94  */
95 static struct workqueue_struct *md_misc_wq;
96 
97 static int remove_and_add_spares(struct mddev *mddev,
98 				 struct md_rdev *this);
99 static void mddev_detach(struct mddev *mddev);
100 static void export_rdev(struct md_rdev *rdev);
101 static void md_wakeup_thread_directly(struct md_thread __rcu **thread);
102 
103 /*
104  * Default number of read corrections we'll attempt on an rdev
105  * before ejecting it from the array. We divide the read error
106  * count by 2 for every hour elapsed between read errors.
107  */
108 #define MD_DEFAULT_MAX_CORRECTED_READ_ERRORS 20
109 /* Default safemode delay: 200 msec */
110 #define DEFAULT_SAFEMODE_DELAY ((200 * HZ)/1000 +1)
111 /*
112  * Current RAID-1,4,5,6,10 parallel reconstruction 'guaranteed speed limit'
113  * is sysctl_speed_limit_min, 1000 KB/sec by default, so the extra system load
114  * does not show up that much. Increase it if you want to have more guaranteed
115  * speed. Note that the RAID driver will use the maximum bandwidth
116  * sysctl_speed_limit_max, 200 MB/sec by default, if the IO subsystem is idle.
117  *
118  * Background sync IO speed control:
119  *
120  * - below speed min:
121  *   no limit;
122  * - above speed min and below speed max:
123  *   a) if mddev is idle, then no limit;
124  *   b) if mddev is busy handling normal IO, then limit inflight sync IO
125  *   to sync_io_depth;
126  * - above speed max:
127  *   sync IO can't be issued;
128  *
129  * Following configurations can be changed via /proc/sys/dev/raid/ for system
130  * or /sys/block/mdX/md/ for one array.
131  */
132 static int sysctl_speed_limit_min = 1000;
133 static int sysctl_speed_limit_max = 200000;
134 static int sysctl_sync_io_depth = 32;
135 
speed_min(struct mddev * mddev)136 static int speed_min(struct mddev *mddev)
137 {
138 	return mddev->sync_speed_min ?
139 		mddev->sync_speed_min : sysctl_speed_limit_min;
140 }
141 
speed_max(struct mddev * mddev)142 static int speed_max(struct mddev *mddev)
143 {
144 	return mddev->sync_speed_max ?
145 		mddev->sync_speed_max : sysctl_speed_limit_max;
146 }
147 
sync_io_depth(struct mddev * mddev)148 static int sync_io_depth(struct mddev *mddev)
149 {
150 	return mddev->sync_io_depth ?
151 		mddev->sync_io_depth : sysctl_sync_io_depth;
152 }
153 
rdev_uninit_serial(struct md_rdev * rdev)154 static void rdev_uninit_serial(struct md_rdev *rdev)
155 {
156 	if (!test_and_clear_bit(CollisionCheck, &rdev->flags))
157 		return;
158 
159 	kvfree(rdev->serial);
160 	rdev->serial = NULL;
161 }
162 
rdevs_uninit_serial(struct mddev * mddev)163 static void rdevs_uninit_serial(struct mddev *mddev)
164 {
165 	struct md_rdev *rdev;
166 
167 	rdev_for_each(rdev, mddev)
168 		rdev_uninit_serial(rdev);
169 }
170 
rdev_init_serial(struct md_rdev * rdev)171 static int rdev_init_serial(struct md_rdev *rdev)
172 {
173 	/* serial_nums equals with BARRIER_BUCKETS_NR */
174 	int i, serial_nums = 1 << ((PAGE_SHIFT - ilog2(sizeof(atomic_t))));
175 	struct serial_in_rdev *serial = NULL;
176 
177 	if (test_bit(CollisionCheck, &rdev->flags))
178 		return 0;
179 
180 	serial = kvmalloc(sizeof(struct serial_in_rdev) * serial_nums,
181 			  GFP_KERNEL);
182 	if (!serial)
183 		return -ENOMEM;
184 
185 	for (i = 0; i < serial_nums; i++) {
186 		struct serial_in_rdev *serial_tmp = &serial[i];
187 
188 		spin_lock_init(&serial_tmp->serial_lock);
189 		serial_tmp->serial_rb = RB_ROOT_CACHED;
190 	}
191 
192 	rdev->serial = serial;
193 	set_bit(CollisionCheck, &rdev->flags);
194 
195 	return 0;
196 }
197 
rdevs_init_serial(struct mddev * mddev)198 static int rdevs_init_serial(struct mddev *mddev)
199 {
200 	struct md_rdev *rdev;
201 	int ret = 0;
202 
203 	rdev_for_each(rdev, mddev) {
204 		ret = rdev_init_serial(rdev);
205 		if (ret)
206 			break;
207 	}
208 
209 	/* Free all resources if pool is not existed */
210 	if (ret && !mddev->serial_info_pool)
211 		rdevs_uninit_serial(mddev);
212 
213 	return ret;
214 }
215 
216 /*
217  * rdev needs to enable serial stuffs if it meets the conditions:
218  * 1. it is multi-queue device flaged with writemostly.
219  * 2. the write-behind mode is enabled.
220  */
rdev_need_serial(struct md_rdev * rdev)221 static int rdev_need_serial(struct md_rdev *rdev)
222 {
223 	return (rdev && rdev->mddev->bitmap_info.max_write_behind > 0 &&
224 		rdev->bdev->bd_disk->queue->nr_hw_queues != 1 &&
225 		test_bit(WriteMostly, &rdev->flags));
226 }
227 
228 /*
229  * Init resource for rdev(s), then create serial_info_pool if:
230  * 1. rdev is the first device which return true from rdev_enable_serial.
231  * 2. rdev is NULL, means we want to enable serialization for all rdevs.
232  */
mddev_create_serial_pool(struct mddev * mddev,struct md_rdev * rdev)233 void mddev_create_serial_pool(struct mddev *mddev, struct md_rdev *rdev)
234 {
235 	int ret = 0;
236 	unsigned int noio_flags;
237 
238 	if (!test_bit(MD_SERIALIZE_POLICY, &mddev->flags) &&
239 	    rdev && !rdev_need_serial(rdev) &&
240 	    !test_bit(CollisionCheck, &rdev->flags))
241 		return;
242 
243 	noio_flags = memalloc_noio_save();
244 	if (!rdev)
245 		ret = rdevs_init_serial(mddev);
246 	else
247 		ret = rdev_init_serial(rdev);
248 	if (ret)
249 		goto out;
250 
251 	if (mddev->serial_info_pool == NULL) {
252 		mddev->serial_info_pool =
253 			mempool_create_kmalloc_pool(NR_SERIAL_INFOS,
254 						sizeof(struct serial_info));
255 		if (!mddev->serial_info_pool) {
256 			rdevs_uninit_serial(mddev);
257 			pr_err("can't alloc memory pool for serialization\n");
258 		}
259 	}
260 out:
261 	memalloc_noio_restore(noio_flags);
262 }
263 
264 /*
265  * Free resource from rdev(s), and destroy serial_info_pool under conditions:
266  * 1. rdev is the last device flaged with CollisionCheck.
267  * 2. when bitmap is destroyed while policy is not enabled.
268  * 3. for disable policy, the pool is destroyed only when no rdev needs it.
269  */
mddev_destroy_serial_pool(struct mddev * mddev,struct md_rdev * rdev)270 void mddev_destroy_serial_pool(struct mddev *mddev, struct md_rdev *rdev)
271 {
272 	if (rdev && !test_bit(CollisionCheck, &rdev->flags))
273 		return;
274 
275 	if (mddev->serial_info_pool) {
276 		struct md_rdev *temp;
277 		int num = 0; /* used to track if other rdevs need the pool */
278 
279 		rdev_for_each(temp, mddev) {
280 			if (!rdev) {
281 				if (!test_bit(MD_SERIALIZE_POLICY,
282 					      &mddev->flags) ||
283 				    !rdev_need_serial(temp))
284 					rdev_uninit_serial(temp);
285 				else
286 					num++;
287 			} else if (temp != rdev &&
288 				   test_bit(CollisionCheck, &temp->flags))
289 				num++;
290 		}
291 
292 		if (rdev)
293 			rdev_uninit_serial(rdev);
294 
295 		if (num)
296 			pr_info("The mempool could be used by other devices\n");
297 		else {
298 			mempool_destroy(mddev->serial_info_pool);
299 			mddev->serial_info_pool = NULL;
300 		}
301 	}
302 }
303 
304 static struct ctl_table_header *raid_table_header;
305 
306 static const struct ctl_table raid_table[] = {
307 	{
308 		.procname	= "speed_limit_min",
309 		.data		= &sysctl_speed_limit_min,
310 		.maxlen		= sizeof(int),
311 		.mode		= 0644,
312 		.proc_handler	= proc_dointvec,
313 	},
314 	{
315 		.procname	= "speed_limit_max",
316 		.data		= &sysctl_speed_limit_max,
317 		.maxlen		= sizeof(int),
318 		.mode		= 0644,
319 		.proc_handler	= proc_dointvec,
320 	},
321 	{
322 		.procname	= "sync_io_depth",
323 		.data		= &sysctl_sync_io_depth,
324 		.maxlen		= sizeof(int),
325 		.mode		= 0644,
326 		.proc_handler	= proc_dointvec,
327 	},
328 };
329 
330 static int start_readonly;
331 
332 /*
333  * The original mechanism for creating an md device is to create
334  * a device node in /dev and to open it.  This causes races with device-close.
335  * The preferred method is to write to the "new_array" module parameter.
336  * This can avoid races.
337  * Setting create_on_open to false disables the original mechanism
338  * so all the races disappear.
339  */
340 static bool create_on_open = true;
341 static bool legacy_async_del_gendisk = true;
342 static bool check_new_feature = true;
343 
344 /*
345  * We have a system wide 'event count' that is incremented
346  * on any 'interesting' event, and readers of /proc/mdstat
347  * can use 'poll' or 'select' to find out when the event
348  * count increases.
349  *
350  * Events are:
351  *  start array, stop array, error, add device, remove device,
352  *  start build, activate spare
353  */
354 static DECLARE_WAIT_QUEUE_HEAD(md_event_waiters);
355 static atomic_t md_event_count;
md_new_event(void)356 void md_new_event(void)
357 {
358 	atomic_inc(&md_event_count);
359 	wake_up(&md_event_waiters);
360 }
361 EXPORT_SYMBOL_GPL(md_new_event);
362 
363 /*
364  * Enables to iterate over all existing md arrays
365  * all_mddevs_lock protects this list.
366  */
367 static LIST_HEAD(all_mddevs);
368 static DEFINE_SPINLOCK(all_mddevs_lock);
369 
is_md_suspended(struct mddev * mddev)370 static bool is_md_suspended(struct mddev *mddev)
371 {
372 	return percpu_ref_is_dying(&mddev->active_io);
373 }
374 /* Rather than calling directly into the personality make_request function,
375  * IO requests come here first so that we can check if the device is
376  * being suspended pending a reconfiguration.
377  * We hold a refcount over the call to ->make_request.  By the time that
378  * call has finished, the bio has been linked into some internal structure
379  * and so is visible to ->quiesce(), so we don't need the refcount any more.
380  */
is_suspended(struct mddev * mddev,struct bio * bio)381 static bool is_suspended(struct mddev *mddev, struct bio *bio)
382 {
383 	if (is_md_suspended(mddev))
384 		return true;
385 	if (bio_data_dir(bio) != WRITE)
386 		return false;
387 	if (READ_ONCE(mddev->suspend_lo) >= READ_ONCE(mddev->suspend_hi))
388 		return false;
389 	if (bio->bi_iter.bi_sector >= READ_ONCE(mddev->suspend_hi))
390 		return false;
391 	if (bio_end_sector(bio) < READ_ONCE(mddev->suspend_lo))
392 		return false;
393 	return true;
394 }
395 
md_handle_request(struct mddev * mddev,struct bio * bio)396 bool md_handle_request(struct mddev *mddev, struct bio *bio)
397 {
398 check_suspended:
399 	if (unlikely(md_cloned_bio(mddev, bio))) {
400 		/*
401 		 * This bio is an MD cloned bio and already holds an
402 		 * active_io reference, so percpu_ref_get() is safe here.
403 		 */
404 		percpu_ref_get(&mddev->active_io);
405 	} else {
406 		if (is_suspended(mddev, bio)) {
407 			/* Bail out if REQ_NOWAIT is set for the bio */
408 			if (bio->bi_opf & REQ_NOWAIT) {
409 				bio_wouldblock_error(bio);
410 				return true;
411 			}
412 			wait_event(mddev->sb_wait, !is_suspended(mddev, bio));
413 		}
414 		if (!percpu_ref_tryget_live(&mddev->active_io))
415 			goto check_suspended;
416 	}
417 	if (!mddev->pers->make_request(mddev, bio)) {
418 		percpu_ref_put(&mddev->active_io);
419 		if (mddev_is_dm(mddev) && mddev->pers->prepare_suspend)
420 			return false;
421 		goto check_suspended;
422 	}
423 
424 	percpu_ref_put(&mddev->active_io);
425 	return true;
426 }
427 EXPORT_SYMBOL(md_handle_request);
428 
md_submit_bio(struct bio * bio)429 static void md_submit_bio(struct bio *bio)
430 {
431 	const int rw = bio_data_dir(bio);
432 	struct mddev *mddev = bio->bi_bdev->bd_disk->private_data;
433 
434 	if (mddev == NULL || mddev->pers == NULL) {
435 		bio_io_error(bio);
436 		return;
437 	}
438 
439 	if (unlikely(test_bit(MD_BROKEN, &mddev->flags)) && (rw == WRITE)) {
440 		bio_io_error(bio);
441 		return;
442 	}
443 
444 	bio = bio_split_to_limits(bio);
445 	if (!bio)
446 		return;
447 
448 	if (mddev->ro == MD_RDONLY && unlikely(rw == WRITE)) {
449 		if (bio_sectors(bio) != 0)
450 			bio->bi_status = BLK_STS_IOERR;
451 		bio_endio(bio);
452 		return;
453 	}
454 
455 	/* bio could be mergeable after passing to underlayer */
456 	bio->bi_opf &= ~REQ_NOMERGE;
457 
458 	md_handle_request(mddev, bio);
459 }
460 
461 /*
462  * Make sure no new requests are submitted to the device, and any requests that
463  * have been submitted are completely handled.
464  */
mddev_suspend(struct mddev * mddev,bool interruptible)465 int mddev_suspend(struct mddev *mddev, bool interruptible)
466 {
467 	int err = 0;
468 
469 	/*
470 	 * hold reconfig_mutex to wait for normal io will deadlock, because
471 	 * other context can't update super_block, and normal io can rely on
472 	 * updating super_block.
473 	 */
474 	lockdep_assert_not_held(&mddev->reconfig_mutex);
475 
476 	if (interruptible)
477 		err = mutex_lock_interruptible(&mddev->suspend_mutex);
478 	else
479 		mutex_lock(&mddev->suspend_mutex);
480 	if (err)
481 		return err;
482 
483 	if (mddev->suspended) {
484 		WRITE_ONCE(mddev->suspended, mddev->suspended + 1);
485 		mutex_unlock(&mddev->suspend_mutex);
486 		return 0;
487 	}
488 
489 	percpu_ref_kill(&mddev->active_io);
490 
491 	/*
492 	 * RAID456 IO can sleep in wait_for_reshape while still holding an
493 	 * active_io reference. If reshape is already interrupted or frozen,
494 	 * wake those waiters so they can abort and drop the reference instead
495 	 * of deadlocking suspend.
496 	 */
497 	if (mddev->pers && mddev->pers->prepare_suspend &&
498 	    reshape_interrupted(mddev))
499 		mddev->pers->prepare_suspend(mddev);
500 
501 	if (interruptible)
502 		err = wait_event_interruptible(mddev->sb_wait,
503 				percpu_ref_is_zero(&mddev->active_io));
504 	else
505 		wait_event(mddev->sb_wait,
506 				percpu_ref_is_zero(&mddev->active_io));
507 	if (err) {
508 		percpu_ref_resurrect(&mddev->active_io);
509 		mutex_unlock(&mddev->suspend_mutex);
510 		return err;
511 	}
512 
513 	/*
514 	 * For raid456, io might be waiting for reshape to make progress,
515 	 * allow new reshape to start while waiting for io to be done to
516 	 * prevent deadlock.
517 	 */
518 	WRITE_ONCE(mddev->suspended, mddev->suspended + 1);
519 
520 	mutex_unlock(&mddev->suspend_mutex);
521 	return 0;
522 }
523 EXPORT_SYMBOL_GPL(mddev_suspend);
524 
__mddev_resume(struct mddev * mddev,bool recovery_needed)525 static void __mddev_resume(struct mddev *mddev, bool recovery_needed)
526 {
527 	lockdep_assert_not_held(&mddev->reconfig_mutex);
528 
529 	mutex_lock(&mddev->suspend_mutex);
530 	WRITE_ONCE(mddev->suspended, mddev->suspended - 1);
531 	if (mddev->suspended) {
532 		mutex_unlock(&mddev->suspend_mutex);
533 		return;
534 	}
535 
536 	percpu_ref_resurrect(&mddev->active_io);
537 	wake_up(&mddev->sb_wait);
538 
539 	if (recovery_needed)
540 		set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
541 	md_wakeup_thread(mddev->thread);
542 	md_wakeup_thread(mddev->sync_thread); /* possibly kick off a reshape */
543 
544 	mutex_unlock(&mddev->suspend_mutex);
545 }
546 
mddev_resume(struct mddev * mddev)547 void mddev_resume(struct mddev *mddev)
548 {
549 	return __mddev_resume(mddev, true);
550 }
551 EXPORT_SYMBOL_GPL(mddev_resume);
552 
553 /* sync bdev before setting device to readonly or stopping raid*/
mddev_set_closing_and_sync_blockdev(struct mddev * mddev,int opener_num)554 static int mddev_set_closing_and_sync_blockdev(struct mddev *mddev, int opener_num)
555 {
556 	mutex_lock(&mddev->open_mutex);
557 	if (mddev->pers && atomic_read(&mddev->openers) > opener_num) {
558 		mutex_unlock(&mddev->open_mutex);
559 		return -EBUSY;
560 	}
561 	if (test_and_set_bit(MD_CLOSING, &mddev->flags)) {
562 		mutex_unlock(&mddev->open_mutex);
563 		return -EBUSY;
564 	}
565 	mutex_unlock(&mddev->open_mutex);
566 
567 	sync_blockdev(mddev->gendisk->part0);
568 	return 0;
569 }
570 
571 /*
572  * The only difference from bio_chain_endio() is that the current
573  * bi_status of bio does not affect the bi_status of parent.
574  */
md_end_flush(struct bio * bio)575 static void md_end_flush(struct bio *bio)
576 {
577 	struct bio *parent = bio->bi_private;
578 
579 	/*
580 	 * If any flush io error before the power failure,
581 	 * disk data may be lost.
582 	 */
583 	if (bio->bi_status)
584 		pr_err("md: %pg flush io error %d\n", bio->bi_bdev,
585 			blk_status_to_errno(bio->bi_status));
586 
587 	bio_put(bio);
588 	bio_endio(parent);
589 }
590 
md_flush_request(struct mddev * mddev,struct bio * bio)591 bool md_flush_request(struct mddev *mddev, struct bio *bio)
592 {
593 	struct md_rdev *rdev;
594 	struct bio *new;
595 
596 	/*
597 	 * md_flush_reqeust() should be called under md_handle_request() and
598 	 * 'active_io' is already grabbed. Hence it's safe to get rdev directly
599 	 * without rcu protection.
600 	 */
601 	WARN_ON(percpu_ref_is_zero(&mddev->active_io));
602 
603 	rdev_for_each(rdev, mddev) {
604 		if (rdev->raid_disk < 0 || test_bit(Faulty, &rdev->flags))
605 			continue;
606 
607 		new = bio_alloc_bioset(rdev->bdev, 0,
608 				       REQ_OP_WRITE | REQ_PREFLUSH, GFP_NOIO,
609 				       &mddev->bio_set);
610 		new->bi_private = bio;
611 		new->bi_end_io = md_end_flush;
612 		bio_inc_remaining(bio);
613 		submit_bio(new);
614 	}
615 
616 	if (bio_sectors(bio) == 0) {
617 		bio_endio(bio);
618 		return true;
619 	}
620 
621 	bio->bi_opf &= ~REQ_PREFLUSH;
622 	return false;
623 }
624 EXPORT_SYMBOL(md_flush_request);
625 
mddev_get(struct mddev * mddev)626 static inline struct mddev *mddev_get(struct mddev *mddev)
627 {
628 	lockdep_assert_held(&all_mddevs_lock);
629 
630 	if (test_bit(MD_DELETED, &mddev->flags))
631 		return NULL;
632 	atomic_inc(&mddev->active);
633 	return mddev;
634 }
635 
636 static void mddev_delayed_delete(struct work_struct *ws);
637 
__mddev_put(struct mddev * mddev)638 static void __mddev_put(struct mddev *mddev)
639 {
640 	if (mddev->raid_disks || !list_empty(&mddev->disks) ||
641 	    mddev->ctime || mddev->hold_active)
642 		return;
643 
644 	/*
645 	 * If array is freed by stopping array, MD_DELETED is set by
646 	 * do_md_stop(), MD_DELETED is still set here in case mddev is freed
647 	 * directly by closing a mddev that is created by create_on_open.
648 	 */
649 	set_bit(MD_DELETED, &mddev->flags);
650 	/*
651 	 * Call queue_work inside the spinlock so that flush_workqueue() after
652 	 * mddev_find will succeed in waiting for the work to be done.
653 	 */
654 	queue_work(md_misc_wq, &mddev->del_work);
655 }
656 
mddev_put_locked(struct mddev * mddev)657 static void mddev_put_locked(struct mddev *mddev)
658 {
659 	if (atomic_dec_and_test(&mddev->active))
660 		__mddev_put(mddev);
661 }
662 
mddev_put(struct mddev * mddev)663 void mddev_put(struct mddev *mddev)
664 {
665 	if (!atomic_dec_and_lock(&mddev->active, &all_mddevs_lock))
666 		return;
667 
668 	__mddev_put(mddev);
669 	spin_unlock(&all_mddevs_lock);
670 }
671 
672 static void md_safemode_timeout(struct timer_list *t);
673 static void md_start_sync(struct work_struct *ws);
674 
active_io_release(struct percpu_ref * ref)675 static void active_io_release(struct percpu_ref *ref)
676 {
677 	struct mddev *mddev = container_of(ref, struct mddev, active_io);
678 
679 	wake_up(&mddev->sb_wait);
680 }
681 
no_op(struct percpu_ref * r)682 static void no_op(struct percpu_ref *r) {}
683 
md_bitmap_sysfs_add(struct mddev * mddev)684 static void md_bitmap_sysfs_add(struct mddev *mddev)
685 {
686 	if (sysfs_update_groups(&mddev->kobj, mddev->bitmap_ops->groups))
687 		pr_warn("md: cannot register extra bitmap attributes for %s\n",
688 			mdname(mddev));
689 	else
690 		/*
691 		 * Inform user with KOBJ_CHANGE about new bitmap
692 		 * attributes.
693 		 */
694 		kobject_uevent(&mddev->kobj, KOBJ_CHANGE);
695 }
696 
md_bitmap_sysfs_del(struct mddev * mddev)697 static void md_bitmap_sysfs_del(struct mddev *mddev)
698 {
699 	int nr_groups = 0;
700 
701 	for (nr_groups = 0; mddev->bitmap_ops->groups[nr_groups]; nr_groups++)
702 		;
703 
704 	while (--nr_groups >= 1)
705 		sysfs_unmerge_group(&mddev->kobj,
706 				    mddev->bitmap_ops->groups[nr_groups]);
707 	sysfs_remove_group(&mddev->kobj, mddev->bitmap_ops->groups[0]);
708 }
709 
mddev_set_bitmap_ops_nosysfs(struct mddev * mddev)710 bool mddev_set_bitmap_ops_nosysfs(struct mddev *mddev)
711 {
712 	struct md_submodule_head *head;
713 
714 	if (mddev->bitmap_ops &&
715 	    mddev->bitmap_ops->head.id == mddev->bitmap_id)
716 		return true;
717 
718 	xa_lock(&md_submodule);
719 	head = xa_load(&md_submodule, mddev->bitmap_id);
720 
721 	if (!head) {
722 		pr_warn("md: can't find bitmap id %d\n", mddev->bitmap_id);
723 		goto err;
724 	}
725 
726 	if (head->type != MD_BITMAP) {
727 		pr_warn("md: invalid bitmap id %d\n", mddev->bitmap_id);
728 		goto err;
729 	}
730 
731 	mddev->bitmap_ops = (void *)head;
732 	xa_unlock(&md_submodule);
733 	return true;
734 
735 err:
736 	xa_unlock(&md_submodule);
737 	return false;
738 }
739 
mddev_init(struct mddev * mddev)740 int mddev_init(struct mddev *mddev)
741 {
742 	int err = 0;
743 
744 	if (!IS_ENABLED(CONFIG_MD_BITMAP))
745 		mddev->bitmap_id = ID_BITMAP_NONE;
746 	else
747 		mddev->bitmap_id = ID_BITMAP;
748 
749 	if (percpu_ref_init(&mddev->active_io, active_io_release,
750 			    PERCPU_REF_ALLOW_REINIT, GFP_KERNEL))
751 		return -ENOMEM;
752 
753 	if (percpu_ref_init(&mddev->writes_pending, no_op,
754 			    PERCPU_REF_ALLOW_REINIT, GFP_KERNEL)) {
755 		err = -ENOMEM;
756 		goto exit_acitve_io;
757 	}
758 
759 	err = bioset_init(&mddev->bio_set, BIO_POOL_SIZE, 0, BIOSET_NEED_BVECS);
760 	if (err)
761 		goto exit_writes_pending;
762 
763 	err = bioset_init(&mddev->sync_set, BIO_POOL_SIZE, 0, BIOSET_NEED_BVECS);
764 	if (err)
765 		goto exit_bio_set;
766 
767 	err = bioset_init(&mddev->io_clone_set, BIO_POOL_SIZE,
768 			  offsetof(struct md_io_clone, bio_clone), 0);
769 	if (err)
770 		goto exit_sync_set;
771 
772 	/* We want to start with the refcount at zero */
773 	percpu_ref_put(&mddev->writes_pending);
774 
775 	mutex_init(&mddev->open_mutex);
776 	mutex_init(&mddev->reconfig_mutex);
777 	mutex_init(&mddev->suspend_mutex);
778 	mutex_init(&mddev->bitmap_info.mutex);
779 	INIT_LIST_HEAD(&mddev->disks);
780 	INIT_LIST_HEAD(&mddev->all_mddevs);
781 	INIT_LIST_HEAD(&mddev->deleting);
782 	timer_setup(&mddev->safemode_timer, md_safemode_timeout, 0);
783 	atomic_set(&mddev->active, 1);
784 	atomic_set(&mddev->openers, 0);
785 	atomic_set(&mddev->sync_seq, 0);
786 	spin_lock_init(&mddev->lock);
787 	init_waitqueue_head(&mddev->sb_wait);
788 	init_waitqueue_head(&mddev->recovery_wait);
789 	mddev->reshape_position = MaxSector;
790 	mddev->reshape_backwards = 0;
791 	mddev->last_sync_action = ACTION_IDLE;
792 	mddev->resync_min = 0;
793 	mddev->resync_max = MaxSector;
794 	mddev->level = LEVEL_NONE;
795 
796 	INIT_WORK(&mddev->sync_work, md_start_sync);
797 	INIT_WORK(&mddev->del_work, mddev_delayed_delete);
798 
799 	return 0;
800 
801 exit_sync_set:
802 	bioset_exit(&mddev->sync_set);
803 exit_bio_set:
804 	bioset_exit(&mddev->bio_set);
805 exit_writes_pending:
806 	percpu_ref_exit(&mddev->writes_pending);
807 exit_acitve_io:
808 	percpu_ref_exit(&mddev->active_io);
809 	return err;
810 }
811 EXPORT_SYMBOL_GPL(mddev_init);
812 
mddev_destroy(struct mddev * mddev)813 void mddev_destroy(struct mddev *mddev)
814 {
815 	bioset_exit(&mddev->bio_set);
816 	bioset_exit(&mddev->sync_set);
817 	bioset_exit(&mddev->io_clone_set);
818 	percpu_ref_exit(&mddev->active_io);
819 	percpu_ref_exit(&mddev->writes_pending);
820 }
821 EXPORT_SYMBOL_GPL(mddev_destroy);
822 
mddev_find_locked(dev_t unit)823 static struct mddev *mddev_find_locked(dev_t unit)
824 {
825 	struct mddev *mddev;
826 
827 	list_for_each_entry(mddev, &all_mddevs, all_mddevs)
828 		if (mddev->unit == unit)
829 			return mddev;
830 
831 	return NULL;
832 }
833 
834 /* find an unused unit number */
mddev_alloc_unit(void)835 static dev_t mddev_alloc_unit(void)
836 {
837 	static int next_minor = 512;
838 	int start = next_minor;
839 	bool is_free = 0;
840 	dev_t dev = 0;
841 
842 	while (!is_free) {
843 		dev = MKDEV(MD_MAJOR, next_minor);
844 		next_minor++;
845 		if (next_minor > MINORMASK)
846 			next_minor = 0;
847 		if (next_minor == start)
848 			return 0;		/* Oh dear, all in use. */
849 		is_free = !mddev_find_locked(dev);
850 	}
851 
852 	return dev;
853 }
854 
mddev_alloc(dev_t unit)855 static struct mddev *mddev_alloc(dev_t unit)
856 {
857 	struct mddev *new;
858 	int error;
859 
860 	if (unit && MAJOR(unit) != MD_MAJOR)
861 		unit &= ~((1 << MdpMinorShift) - 1);
862 
863 	new = kzalloc_obj(*new);
864 	if (!new)
865 		return ERR_PTR(-ENOMEM);
866 
867 	error = mddev_init(new);
868 	if (error)
869 		goto out_free_new;
870 
871 	spin_lock(&all_mddevs_lock);
872 	if (unit) {
873 		error = -EEXIST;
874 		if (mddev_find_locked(unit))
875 			goto out_destroy_new;
876 		new->unit = unit;
877 		if (MAJOR(unit) == MD_MAJOR)
878 			new->md_minor = MINOR(unit);
879 		else
880 			new->md_minor = MINOR(unit) >> MdpMinorShift;
881 		new->hold_active = UNTIL_IOCTL;
882 	} else {
883 		error = -ENODEV;
884 		new->unit = mddev_alloc_unit();
885 		if (!new->unit)
886 			goto out_destroy_new;
887 		new->md_minor = MINOR(new->unit);
888 		new->hold_active = UNTIL_STOP;
889 	}
890 
891 	list_add(&new->all_mddevs, &all_mddevs);
892 	spin_unlock(&all_mddevs_lock);
893 	return new;
894 
895 out_destroy_new:
896 	spin_unlock(&all_mddevs_lock);
897 	mddev_destroy(new);
898 out_free_new:
899 	kfree(new);
900 	return ERR_PTR(error);
901 }
902 
mddev_free(struct mddev * mddev)903 static void mddev_free(struct mddev *mddev)
904 {
905 	spin_lock(&all_mddevs_lock);
906 	list_del(&mddev->all_mddevs);
907 	spin_unlock(&all_mddevs_lock);
908 
909 	mddev_destroy(mddev);
910 	kfree(mddev);
911 }
912 
913 static const struct attribute_group md_redundancy_group;
914 
mddev_unlock(struct mddev * mddev)915 void mddev_unlock(struct mddev *mddev)
916 {
917 	struct md_rdev *rdev;
918 	struct md_rdev *tmp;
919 	LIST_HEAD(delete);
920 
921 	if (!list_empty(&mddev->deleting))
922 		list_splice_init(&mddev->deleting, &delete);
923 
924 	if (mddev->to_remove) {
925 		/* These cannot be removed under reconfig_mutex as
926 		 * an access to the files will try to take reconfig_mutex
927 		 * while holding the file unremovable, which leads to
928 		 * a deadlock.
929 		 * So hold set sysfs_active while the remove in happeing,
930 		 * and anything else which might set ->to_remove or my
931 		 * otherwise change the sysfs namespace will fail with
932 		 * -EBUSY if sysfs_active is still set.
933 		 * We set sysfs_active under reconfig_mutex and elsewhere
934 		 * test it under the same mutex to ensure its correct value
935 		 * is seen.
936 		 */
937 		const struct attribute_group *to_remove = mddev->to_remove;
938 		mddev->to_remove = NULL;
939 		mddev->sysfs_active = 1;
940 		mutex_unlock(&mddev->reconfig_mutex);
941 
942 		if (mddev->kobj.sd) {
943 			if (to_remove != &md_redundancy_group)
944 				sysfs_remove_group(&mddev->kobj, to_remove);
945 			if (mddev->pers == NULL ||
946 			    mddev->pers->sync_request == NULL) {
947 				sysfs_remove_group(&mddev->kobj, &md_redundancy_group);
948 				if (mddev->sysfs_action)
949 					sysfs_put(mddev->sysfs_action);
950 				if (mddev->sysfs_completed)
951 					sysfs_put(mddev->sysfs_completed);
952 				if (mddev->sysfs_degraded)
953 					sysfs_put(mddev->sysfs_degraded);
954 				mddev->sysfs_action = NULL;
955 				mddev->sysfs_completed = NULL;
956 				mddev->sysfs_degraded = NULL;
957 			}
958 		}
959 		mddev->sysfs_active = 0;
960 	} else
961 		mutex_unlock(&mddev->reconfig_mutex);
962 
963 	md_wakeup_thread(mddev->thread);
964 	wake_up(&mddev->sb_wait);
965 
966 	list_for_each_entry_safe(rdev, tmp, &delete, same_set) {
967 		list_del_init(&rdev->same_set);
968 		kobject_del(&rdev->kobj);
969 		export_rdev(rdev);
970 	}
971 
972 	if (!legacy_async_del_gendisk) {
973 		/*
974 		 * Call del_gendisk after release reconfig_mutex to avoid
975 		 * deadlock (e.g. call del_gendisk under the lock and an
976 		 * access to sysfs files waits the lock)
977 		 * And MD_DELETED is only used for md raid which is set in
978 		 * do_md_stop. dm raid only uses md_stop to stop. So dm raid
979 		 * doesn't need to check MD_DELETED when getting reconfig lock
980 		 */
981 		if (test_bit(MD_DELETED, &mddev->flags) &&
982 		    !test_and_set_bit(MD_DO_DELETE, &mddev->flags)) {
983 			kobject_del(&mddev->kobj);
984 			del_gendisk(mddev->gendisk);
985 		}
986 	}
987 }
988 EXPORT_SYMBOL_GPL(mddev_unlock);
989 
md_find_rdev_nr_rcu(struct mddev * mddev,int nr)990 struct md_rdev *md_find_rdev_nr_rcu(struct mddev *mddev, int nr)
991 {
992 	struct md_rdev *rdev;
993 
994 	rdev_for_each_rcu(rdev, mddev)
995 		if (rdev->desc_nr == nr)
996 			return rdev;
997 
998 	return NULL;
999 }
1000 EXPORT_SYMBOL_GPL(md_find_rdev_nr_rcu);
1001 
find_rdev(struct mddev * mddev,dev_t dev)1002 static struct md_rdev *find_rdev(struct mddev *mddev, dev_t dev)
1003 {
1004 	struct md_rdev *rdev;
1005 
1006 	rdev_for_each(rdev, mddev)
1007 		if (rdev->bdev->bd_dev == dev)
1008 			return rdev;
1009 
1010 	return NULL;
1011 }
1012 
md_find_rdev_rcu(struct mddev * mddev,dev_t dev)1013 struct md_rdev *md_find_rdev_rcu(struct mddev *mddev, dev_t dev)
1014 {
1015 	struct md_rdev *rdev;
1016 
1017 	rdev_for_each_rcu(rdev, mddev)
1018 		if (rdev->bdev->bd_dev == dev)
1019 			return rdev;
1020 
1021 	return NULL;
1022 }
1023 EXPORT_SYMBOL_GPL(md_find_rdev_rcu);
1024 
get_pers(int level,char * clevel)1025 static struct md_personality *get_pers(int level, char *clevel)
1026 {
1027 	struct md_personality *ret = NULL;
1028 	struct md_submodule_head *head;
1029 	unsigned long i;
1030 
1031 	xa_lock(&md_submodule);
1032 	xa_for_each(&md_submodule, i, head) {
1033 		if (head->type != MD_PERSONALITY)
1034 			continue;
1035 		if ((level != LEVEL_NONE && head->id == level) ||
1036 		    !strcmp(head->name, clevel)) {
1037 			if (try_module_get(head->owner))
1038 				ret = (void *)head;
1039 			break;
1040 		}
1041 	}
1042 	xa_unlock(&md_submodule);
1043 
1044 	if (!ret) {
1045 		if (level != LEVEL_NONE)
1046 			pr_warn("md: personality for level %d is not loaded!\n",
1047 				level);
1048 		else
1049 			pr_warn("md: personality for level %s is not loaded!\n",
1050 				clevel);
1051 	}
1052 
1053 	return ret;
1054 }
1055 
put_pers(struct md_personality * pers)1056 static void put_pers(struct md_personality *pers)
1057 {
1058 	module_put(pers->head.owner);
1059 }
1060 
1061 /* return the offset of the super block in 512byte sectors */
calc_dev_sboffset(struct md_rdev * rdev)1062 static inline sector_t calc_dev_sboffset(struct md_rdev *rdev)
1063 {
1064 	return MD_NEW_SIZE_SECTORS(bdev_nr_sectors(rdev->bdev));
1065 }
1066 
alloc_disk_sb(struct md_rdev * rdev)1067 static int alloc_disk_sb(struct md_rdev *rdev)
1068 {
1069 	rdev->sb_page = alloc_page(GFP_KERNEL);
1070 	if (!rdev->sb_page)
1071 		return -ENOMEM;
1072 	return 0;
1073 }
1074 
md_rdev_clear(struct md_rdev * rdev)1075 void md_rdev_clear(struct md_rdev *rdev)
1076 {
1077 	if (rdev->sb_page) {
1078 		put_page(rdev->sb_page);
1079 		rdev->sb_loaded = 0;
1080 		rdev->sb_page = NULL;
1081 		rdev->sb_start = 0;
1082 		rdev->sectors = 0;
1083 	}
1084 	if (rdev->bb_page) {
1085 		put_page(rdev->bb_page);
1086 		rdev->bb_page = NULL;
1087 	}
1088 	badblocks_exit(&rdev->badblocks);
1089 }
1090 EXPORT_SYMBOL_GPL(md_rdev_clear);
1091 
super_written(struct bio * bio)1092 static void super_written(struct bio *bio)
1093 {
1094 	struct md_rdev *rdev = bio->bi_private;
1095 	struct mddev *mddev = rdev->mddev;
1096 
1097 	if (bio->bi_status) {
1098 		pr_err("md: %s gets error=%d\n", __func__,
1099 		       blk_status_to_errno(bio->bi_status));
1100 		md_error(mddev, rdev);
1101 		if (!test_bit(Faulty, &rdev->flags)
1102 		    && (bio->bi_opf & MD_FAILFAST)) {
1103 			set_bit(MD_SB_NEED_REWRITE, &mddev->sb_flags);
1104 			set_bit(LastDev, &rdev->flags);
1105 		}
1106 	} else
1107 		clear_bit(LastDev, &rdev->flags);
1108 
1109 	bio_put(bio);
1110 
1111 	rdev_dec_pending(rdev, mddev);
1112 
1113 	if (atomic_dec_and_test(&mddev->pending_writes))
1114 		wake_up(&mddev->sb_wait);
1115 }
1116 
1117 /**
1118  * md_write_metadata - write metadata to underlying disk, including
1119  * array superblock, badblocks, bitmap superblock and bitmap bits.
1120  * @mddev:	the array to write
1121  * @rdev:	the underlying disk to write
1122  * @sector:	the offset to @rdev
1123  * @size:	the length of the metadata
1124  * @page:	the metadata
1125  * @offset:	the offset to @page
1126  *
1127  * Write @size bytes of @page start from @offset, to @sector of @rdev, Increment
1128  * mddev->pending_writes before returning, and decrement it on completion,
1129  * waking up sb_wait. Caller must call md_super_wait() after issuing io to all
1130  * rdev. If an error occurred, md_error() will be called, and the @rdev will be
1131  * kicked out from @mddev.
1132  */
md_write_metadata(struct mddev * mddev,struct md_rdev * rdev,sector_t sector,int size,struct page * page,unsigned int offset)1133 void md_write_metadata(struct mddev *mddev, struct md_rdev *rdev,
1134 		       sector_t sector, int size, struct page *page,
1135 		       unsigned int offset)
1136 {
1137 	struct bio *bio;
1138 
1139 	if (!page)
1140 		return;
1141 
1142 	if (test_bit(Faulty, &rdev->flags))
1143 		return;
1144 
1145 	bio = bio_alloc_bioset(rdev->meta_bdev ? rdev->meta_bdev : rdev->bdev,
1146 			      1,
1147 			      REQ_OP_WRITE | REQ_SYNC | REQ_IDLE | REQ_META
1148 				  | REQ_PREFLUSH | REQ_FUA,
1149 			      GFP_NOIO, &mddev->sync_set);
1150 
1151 	atomic_inc(&rdev->nr_pending);
1152 
1153 	bio->bi_iter.bi_sector = sector;
1154 	__bio_add_page(bio, page, size, offset);
1155 	bio->bi_private = rdev;
1156 	bio->bi_end_io = super_written;
1157 
1158 	if (test_bit(MD_FAILFAST_SUPPORTED, &mddev->flags) &&
1159 	    test_bit(FailFast, &rdev->flags) &&
1160 	    !test_bit(LastDev, &rdev->flags))
1161 		bio->bi_opf |= MD_FAILFAST;
1162 
1163 	atomic_inc(&mddev->pending_writes);
1164 	submit_bio(bio);
1165 }
1166 
md_super_wait(struct mddev * mddev)1167 int md_super_wait(struct mddev *mddev)
1168 {
1169 	/* wait for all superblock writes that were scheduled to complete */
1170 	wait_event(mddev->sb_wait, atomic_read(&mddev->pending_writes)==0);
1171 	if (test_and_clear_bit(MD_SB_NEED_REWRITE, &mddev->sb_flags))
1172 		return -EAGAIN;
1173 	return 0;
1174 }
1175 
sync_page_io(struct md_rdev * rdev,sector_t sector,int size,struct page * page,blk_opf_t opf,bool metadata_op)1176 int sync_page_io(struct md_rdev *rdev, sector_t sector, int size,
1177 		 struct page *page, blk_opf_t opf, bool metadata_op)
1178 {
1179 	struct bio bio;
1180 	struct bio_vec bvec;
1181 
1182 	if (metadata_op && rdev->meta_bdev)
1183 		bio_init(&bio, rdev->meta_bdev, &bvec, 1, opf);
1184 	else
1185 		bio_init(&bio, rdev->bdev, &bvec, 1, opf);
1186 
1187 	if (metadata_op)
1188 		bio.bi_iter.bi_sector = sector + rdev->sb_start;
1189 	else if (rdev->mddev->reshape_position != MaxSector &&
1190 		 (rdev->mddev->reshape_backwards ==
1191 		  (sector >= rdev->mddev->reshape_position)))
1192 		bio.bi_iter.bi_sector = sector + rdev->new_data_offset;
1193 	else
1194 		bio.bi_iter.bi_sector = sector + rdev->data_offset;
1195 	__bio_add_page(&bio, page, size, 0);
1196 
1197 	submit_bio_wait(&bio);
1198 
1199 	return !bio.bi_status;
1200 }
1201 EXPORT_SYMBOL_GPL(sync_page_io);
1202 
read_disk_sb(struct md_rdev * rdev,int size)1203 static int read_disk_sb(struct md_rdev *rdev, int size)
1204 {
1205 	if (rdev->sb_loaded)
1206 		return 0;
1207 
1208 	if (!sync_page_io(rdev, 0, size, rdev->sb_page, REQ_OP_READ, true))
1209 		goto fail;
1210 	rdev->sb_loaded = 1;
1211 	return 0;
1212 
1213 fail:
1214 	pr_err("md: disabled device %pg, could not read superblock.\n",
1215 	       rdev->bdev);
1216 	return -EINVAL;
1217 }
1218 
md_uuid_equal(mdp_super_t * sb1,mdp_super_t * sb2)1219 static int md_uuid_equal(mdp_super_t *sb1, mdp_super_t *sb2)
1220 {
1221 	return	sb1->set_uuid0 == sb2->set_uuid0 &&
1222 		sb1->set_uuid1 == sb2->set_uuid1 &&
1223 		sb1->set_uuid2 == sb2->set_uuid2 &&
1224 		sb1->set_uuid3 == sb2->set_uuid3;
1225 }
1226 
md_sb_equal(mdp_super_t * sb1,mdp_super_t * sb2)1227 static int md_sb_equal(mdp_super_t *sb1, mdp_super_t *sb2)
1228 {
1229 	int ret;
1230 	mdp_super_t *tmp1, *tmp2;
1231 
1232 	tmp1 = kmalloc_obj(*tmp1);
1233 	tmp2 = kmalloc_obj(*tmp2);
1234 
1235 	if (!tmp1 || !tmp2) {
1236 		ret = 0;
1237 		goto abort;
1238 	}
1239 
1240 	*tmp1 = *sb1;
1241 	*tmp2 = *sb2;
1242 
1243 	/*
1244 	 * nr_disks is not constant
1245 	 */
1246 	tmp1->nr_disks = 0;
1247 	tmp2->nr_disks = 0;
1248 
1249 	ret = (memcmp(tmp1, tmp2, MD_SB_GENERIC_CONSTANT_WORDS * 4) == 0);
1250 abort:
1251 	kfree(tmp1);
1252 	kfree(tmp2);
1253 	return ret;
1254 }
1255 
md_csum_fold(u32 csum)1256 static u32 md_csum_fold(u32 csum)
1257 {
1258 	csum = (csum & 0xffff) + (csum >> 16);
1259 	return (csum & 0xffff) + (csum >> 16);
1260 }
1261 
calc_sb_csum(mdp_super_t * sb)1262 static unsigned int calc_sb_csum(mdp_super_t *sb)
1263 {
1264 	u64 newcsum = 0;
1265 	u32 *sb32 = (u32*)sb;
1266 	int i;
1267 	unsigned int disk_csum, csum;
1268 
1269 	disk_csum = sb->sb_csum;
1270 	sb->sb_csum = 0;
1271 
1272 	for (i = 0; i < MD_SB_BYTES/4 ; i++)
1273 		newcsum += sb32[i];
1274 	csum = (newcsum & 0xffffffff) + (newcsum>>32);
1275 
1276 #ifdef CONFIG_ALPHA
1277 	/* This used to use csum_partial, which was wrong for several
1278 	 * reasons including that different results are returned on
1279 	 * different architectures.  It isn't critical that we get exactly
1280 	 * the same return value as before (we always csum_fold before
1281 	 * testing, and that removes any differences).  However as we
1282 	 * know that csum_partial always returned a 16bit value on
1283 	 * alphas, do a fold to maximise conformity to previous behaviour.
1284 	 */
1285 	sb->sb_csum = md_csum_fold(disk_csum);
1286 #else
1287 	sb->sb_csum = disk_csum;
1288 #endif
1289 	return csum;
1290 }
1291 
1292 /*
1293  * Handle superblock details.
1294  * We want to be able to handle multiple superblock formats
1295  * so we have a common interface to them all, and an array of
1296  * different handlers.
1297  * We rely on user-space to write the initial superblock, and support
1298  * reading and updating of superblocks.
1299  * Interface methods are:
1300  *   int load_super(struct md_rdev *dev, struct md_rdev *refdev, int minor_version)
1301  *      loads and validates a superblock on dev.
1302  *      if refdev != NULL, compare superblocks on both devices
1303  *    Return:
1304  *      0 - dev has a superblock that is compatible with refdev
1305  *      1 - dev has a superblock that is compatible and newer than refdev
1306  *          so dev should be used as the refdev in future
1307  *     -EINVAL superblock incompatible or invalid
1308  *     -othererror e.g. -EIO
1309  *
1310  *   int validate_super(struct mddev *mddev, struct md_rdev *dev)
1311  *      Verify that dev is acceptable into mddev.
1312  *       The first time, mddev->raid_disks will be 0, and data from
1313  *       dev should be merged in.  Subsequent calls check that dev
1314  *       is new enough.  Return 0 or -EINVAL
1315  *
1316  *   void sync_super(struct mddev *mddev, struct md_rdev *dev)
1317  *     Update the superblock for rdev with data in mddev
1318  *     This does not write to disc.
1319  *
1320  */
1321 
1322 struct super_type  {
1323 	char		    *name;
1324 	struct module	    *owner;
1325 	int		    (*load_super)(struct md_rdev *rdev,
1326 					  struct md_rdev *refdev,
1327 					  int minor_version);
1328 	int		    (*validate_super)(struct mddev *mddev,
1329 					      struct md_rdev *freshest,
1330 					      struct md_rdev *rdev);
1331 	void		    (*sync_super)(struct mddev *mddev,
1332 					  struct md_rdev *rdev);
1333 	unsigned long long  (*rdev_size_change)(struct md_rdev *rdev,
1334 						sector_t num_sectors);
1335 	int		    (*allow_new_offset)(struct md_rdev *rdev,
1336 						unsigned long long new_offset);
1337 };
1338 
1339 /*
1340  * Check that the given mddev has no bitmap.
1341  *
1342  * This function is called from the run method of all personalities that do not
1343  * support bitmaps. It prints an error message and returns non-zero if mddev
1344  * has a bitmap. Otherwise, it returns 0.
1345  *
1346  */
md_check_no_bitmap(struct mddev * mddev)1347 int md_check_no_bitmap(struct mddev *mddev)
1348 {
1349 	if (!mddev->bitmap_info.file && !mddev->bitmap_info.offset)
1350 		return 0;
1351 	pr_warn("%s: bitmaps are not supported for %s\n",
1352 		mdname(mddev), mddev->pers->head.name);
1353 	return 1;
1354 }
1355 EXPORT_SYMBOL(md_check_no_bitmap);
1356 
1357 /*
1358  * load_super for 0.90.0
1359  */
super_90_load(struct md_rdev * rdev,struct md_rdev * refdev,int minor_version)1360 static int super_90_load(struct md_rdev *rdev, struct md_rdev *refdev, int minor_version)
1361 {
1362 	mdp_super_t *sb;
1363 	int ret;
1364 	bool spare_disk = true;
1365 
1366 	/*
1367 	 * Calculate the position of the superblock (512byte sectors),
1368 	 * it's at the end of the disk.
1369 	 *
1370 	 * It also happens to be a multiple of 4Kb.
1371 	 */
1372 	rdev->sb_start = calc_dev_sboffset(rdev);
1373 
1374 	ret = read_disk_sb(rdev, MD_SB_BYTES);
1375 	if (ret)
1376 		return ret;
1377 
1378 	ret = -EINVAL;
1379 
1380 	sb = page_address(rdev->sb_page);
1381 
1382 	if (sb->md_magic != MD_SB_MAGIC) {
1383 		pr_warn("md: invalid raid superblock magic on %pg\n",
1384 			rdev->bdev);
1385 		goto abort;
1386 	}
1387 
1388 	if (sb->major_version != 0 ||
1389 	    sb->minor_version < 90 ||
1390 	    sb->minor_version > 91) {
1391 		pr_warn("Bad version number %d.%d on %pg\n",
1392 			sb->major_version, sb->minor_version, rdev->bdev);
1393 		goto abort;
1394 	}
1395 
1396 	if (sb->raid_disks <= 0)
1397 		goto abort;
1398 
1399 	if (md_csum_fold(calc_sb_csum(sb)) != md_csum_fold(sb->sb_csum)) {
1400 		pr_warn("md: invalid superblock checksum on %pg\n", rdev->bdev);
1401 		goto abort;
1402 	}
1403 
1404 	rdev->preferred_minor = sb->md_minor;
1405 	rdev->data_offset = 0;
1406 	rdev->new_data_offset = 0;
1407 	rdev->sb_size = MD_SB_BYTES;
1408 	rdev->badblocks.shift = -1;
1409 
1410 	rdev->desc_nr = sb->this_disk.number;
1411 
1412 	/* not spare disk */
1413 	if (rdev->desc_nr >= 0 && rdev->desc_nr < MD_SB_DISKS &&
1414 	    sb->disks[rdev->desc_nr].state & ((1<<MD_DISK_SYNC) | (1 << MD_DISK_ACTIVE)))
1415 		spare_disk = false;
1416 
1417 	if (!refdev) {
1418 		if (!spare_disk)
1419 			ret = 1;
1420 		else
1421 			ret = 0;
1422 	} else {
1423 		__u64 ev1, ev2;
1424 		mdp_super_t *refsb = page_address(refdev->sb_page);
1425 		if (!md_uuid_equal(refsb, sb)) {
1426 			pr_warn("md: %pg has different UUID to %pg\n",
1427 				rdev->bdev, refdev->bdev);
1428 			goto abort;
1429 		}
1430 		if (!md_sb_equal(refsb, sb)) {
1431 			pr_warn("md: %pg has same UUID but different superblock to %pg\n",
1432 				rdev->bdev, refdev->bdev);
1433 			goto abort;
1434 		}
1435 		ev1 = md_event(sb);
1436 		ev2 = md_event(refsb);
1437 
1438 		if (!spare_disk && ev1 > ev2)
1439 			ret = 1;
1440 		else
1441 			ret = 0;
1442 	}
1443 	rdev->sectors = rdev->sb_start;
1444 	/* Limit to 4TB as metadata cannot record more than that.
1445 	 * (not needed for Linear and RAID0 as metadata doesn't
1446 	 * record this size)
1447 	 */
1448 	if ((u64)rdev->sectors >= (2ULL << 32) && sb->level >= 1)
1449 		rdev->sectors = (sector_t)(2ULL << 32) - 2;
1450 
1451 	if (rdev->sectors < ((sector_t)sb->size) * 2 && sb->level >= 1)
1452 		/* "this cannot possibly happen" ... */
1453 		ret = -EINVAL;
1454 
1455  abort:
1456 	return ret;
1457 }
1458 
md_bitmap_events_cleared(struct mddev * mddev)1459 static u64 md_bitmap_events_cleared(struct mddev *mddev)
1460 {
1461 	struct md_bitmap_stats stats;
1462 	int err;
1463 
1464 	if (!md_bitmap_enabled(mddev, false))
1465 		return 0;
1466 
1467 	err = mddev->bitmap_ops->get_stats(mddev->bitmap, &stats);
1468 	if (err)
1469 		return 0;
1470 
1471 	return stats.events_cleared;
1472 }
1473 
1474 /*
1475  * validate_super for 0.90.0
1476  * note: we are not using "freshest" for 0.9 superblock
1477  */
super_90_validate(struct mddev * mddev,struct md_rdev * freshest,struct md_rdev * rdev)1478 static int super_90_validate(struct mddev *mddev, struct md_rdev *freshest, struct md_rdev *rdev)
1479 {
1480 	mdp_disk_t *desc;
1481 	mdp_super_t *sb = page_address(rdev->sb_page);
1482 	__u64 ev1 = md_event(sb);
1483 
1484 	rdev->raid_disk = -1;
1485 	clear_bit(Faulty, &rdev->flags);
1486 	clear_bit(In_sync, &rdev->flags);
1487 	clear_bit(Bitmap_sync, &rdev->flags);
1488 	clear_bit(WriteMostly, &rdev->flags);
1489 
1490 	if (mddev->raid_disks == 0) {
1491 		mddev->major_version = 0;
1492 		mddev->minor_version = sb->minor_version;
1493 		mddev->patch_version = sb->patch_version;
1494 		mddev->external = 0;
1495 		mddev->chunk_sectors = sb->chunk_size >> 9;
1496 		mddev->ctime = sb->ctime;
1497 		mddev->utime = sb->utime;
1498 		mddev->level = sb->level;
1499 		mddev->clevel[0] = 0;
1500 		mddev->layout = sb->layout;
1501 		mddev->raid_disks = sb->raid_disks;
1502 		mddev->dev_sectors = ((sector_t)sb->size) * 2;
1503 		mddev->events = ev1;
1504 		mddev->bitmap_info.offset = 0;
1505 		mddev->bitmap_info.space = 0;
1506 		/* bitmap can use 60 K after the 4K superblocks */
1507 		mddev->bitmap_info.default_offset = MD_SB_BYTES >> 9;
1508 		mddev->bitmap_info.default_space = 64*2 - (MD_SB_BYTES >> 9);
1509 		mddev->reshape_backwards = 0;
1510 
1511 		if (mddev->minor_version >= 91) {
1512 			mddev->reshape_position = sb->reshape_position;
1513 			mddev->delta_disks = sb->delta_disks;
1514 			mddev->new_level = sb->new_level;
1515 			mddev->new_layout = sb->new_layout;
1516 			mddev->new_chunk_sectors = sb->new_chunk >> 9;
1517 			if (mddev->delta_disks < 0)
1518 				mddev->reshape_backwards = 1;
1519 		} else {
1520 			mddev->reshape_position = MaxSector;
1521 			mddev->delta_disks = 0;
1522 			mddev->new_level = mddev->level;
1523 			mddev->new_layout = mddev->layout;
1524 			mddev->new_chunk_sectors = mddev->chunk_sectors;
1525 		}
1526 		if (mddev->level == 0)
1527 			mddev->layout = -1;
1528 
1529 		if (sb->state & (1<<MD_SB_CLEAN))
1530 			mddev->resync_offset = MaxSector;
1531 		else {
1532 			if (sb->events_hi == sb->cp_events_hi &&
1533 				sb->events_lo == sb->cp_events_lo) {
1534 				mddev->resync_offset = sb->recovery_cp;
1535 			} else
1536 				mddev->resync_offset = 0;
1537 		}
1538 
1539 		memcpy(mddev->uuid+0, &sb->set_uuid0, 4);
1540 		memcpy(mddev->uuid+4, &sb->set_uuid1, 4);
1541 		memcpy(mddev->uuid+8, &sb->set_uuid2, 4);
1542 		memcpy(mddev->uuid+12,&sb->set_uuid3, 4);
1543 
1544 		mddev->max_disks = MD_SB_DISKS;
1545 
1546 		if (sb->state & (1<<MD_SB_BITMAP_PRESENT) &&
1547 		    mddev->bitmap_info.file == NULL) {
1548 			mddev->bitmap_info.offset =
1549 				mddev->bitmap_info.default_offset;
1550 			mddev->bitmap_info.space =
1551 				mddev->bitmap_info.default_space;
1552 		}
1553 
1554 	} else if (mddev->pers == NULL) {
1555 		/* Insist on good event counter while assembling, except
1556 		 * for spares (which don't need an event count) */
1557 		++ev1;
1558 		if (sb->disks[rdev->desc_nr].state & (
1559 			    (1<<MD_DISK_SYNC) | (1 << MD_DISK_ACTIVE)))
1560 			if (ev1 < mddev->events)
1561 				return -EINVAL;
1562 	} else if (mddev->bitmap) {
1563 		/* if adding to array with a bitmap, then we can accept an
1564 		 * older device ... but not too old.
1565 		 */
1566 		if (ev1 < md_bitmap_events_cleared(mddev))
1567 			return 0;
1568 		if (ev1 < mddev->events)
1569 			set_bit(Bitmap_sync, &rdev->flags);
1570 	} else {
1571 		if (ev1 < mddev->events)
1572 			/* just a hot-add of a new device, leave raid_disk at -1 */
1573 			return 0;
1574 	}
1575 
1576 	desc = sb->disks + rdev->desc_nr;
1577 
1578 	if (desc->state & (1<<MD_DISK_FAULTY))
1579 		set_bit(Faulty, &rdev->flags);
1580 	else if (desc->state & (1<<MD_DISK_SYNC)) {
1581 		set_bit(In_sync, &rdev->flags);
1582 		rdev->raid_disk = desc->raid_disk;
1583 		rdev->saved_raid_disk = desc->raid_disk;
1584 	} else if (desc->state & (1<<MD_DISK_ACTIVE)) {
1585 		/* active but not in sync implies recovery up to
1586 		 * reshape position.  We don't know exactly where
1587 		 * that is, so set to zero for now
1588 		 */
1589 		if (mddev->minor_version >= 91) {
1590 			rdev->recovery_offset = 0;
1591 			rdev->raid_disk = desc->raid_disk;
1592 		}
1593 	}
1594 	if (desc->state & (1<<MD_DISK_WRITEMOSTLY))
1595 		set_bit(WriteMostly, &rdev->flags);
1596 	if (desc->state & (1<<MD_DISK_FAILFAST))
1597 		set_bit(FailFast, &rdev->flags);
1598 	return 0;
1599 }
1600 
1601 /*
1602  * sync_super for 0.90.0
1603  */
super_90_sync(struct mddev * mddev,struct md_rdev * rdev)1604 static void super_90_sync(struct mddev *mddev, struct md_rdev *rdev)
1605 {
1606 	mdp_super_t *sb;
1607 	struct md_rdev *rdev2;
1608 	int next_spare = mddev->raid_disks;
1609 
1610 	/* make rdev->sb match mddev data..
1611 	 *
1612 	 * 1/ zero out disks
1613 	 * 2/ Add info for each disk, keeping track of highest desc_nr (next_spare);
1614 	 * 3/ any empty disks < next_spare become removed
1615 	 *
1616 	 * disks[0] gets initialised to REMOVED because
1617 	 * we cannot be sure from other fields if it has
1618 	 * been initialised or not.
1619 	 */
1620 	int i;
1621 	int active=0, working=0,failed=0,spare=0,nr_disks=0;
1622 
1623 	rdev->sb_size = MD_SB_BYTES;
1624 
1625 	sb = page_address(rdev->sb_page);
1626 
1627 	memset(sb, 0, sizeof(*sb));
1628 
1629 	sb->md_magic = MD_SB_MAGIC;
1630 	sb->major_version = mddev->major_version;
1631 	sb->patch_version = mddev->patch_version;
1632 	sb->gvalid_words  = 0; /* ignored */
1633 	memcpy(&sb->set_uuid0, mddev->uuid+0, 4);
1634 	memcpy(&sb->set_uuid1, mddev->uuid+4, 4);
1635 	memcpy(&sb->set_uuid2, mddev->uuid+8, 4);
1636 	memcpy(&sb->set_uuid3, mddev->uuid+12,4);
1637 
1638 	sb->ctime = clamp_t(time64_t, mddev->ctime, 0, U32_MAX);
1639 	sb->level = mddev->level;
1640 	sb->size = mddev->dev_sectors / 2;
1641 	sb->raid_disks = mddev->raid_disks;
1642 	sb->md_minor = mddev->md_minor;
1643 	sb->not_persistent = 0;
1644 	sb->utime = clamp_t(time64_t, mddev->utime, 0, U32_MAX);
1645 	sb->state = 0;
1646 	sb->events_hi = (mddev->events>>32);
1647 	sb->events_lo = (u32)mddev->events;
1648 
1649 	if (mddev->reshape_position == MaxSector)
1650 		sb->minor_version = 90;
1651 	else {
1652 		sb->minor_version = 91;
1653 		sb->reshape_position = mddev->reshape_position;
1654 		sb->new_level = mddev->new_level;
1655 		sb->delta_disks = mddev->delta_disks;
1656 		sb->new_layout = mddev->new_layout;
1657 		sb->new_chunk = mddev->new_chunk_sectors << 9;
1658 	}
1659 	mddev->minor_version = sb->minor_version;
1660 	if (mddev->in_sync)
1661 	{
1662 		sb->recovery_cp = mddev->resync_offset;
1663 		sb->cp_events_hi = (mddev->events>>32);
1664 		sb->cp_events_lo = (u32)mddev->events;
1665 		if (mddev->resync_offset == MaxSector)
1666 			sb->state = (1<< MD_SB_CLEAN);
1667 	} else
1668 		sb->recovery_cp = 0;
1669 
1670 	sb->layout = mddev->layout;
1671 	sb->chunk_size = mddev->chunk_sectors << 9;
1672 
1673 	if (mddev->bitmap && mddev->bitmap_info.file == NULL)
1674 		sb->state |= (1<<MD_SB_BITMAP_PRESENT);
1675 
1676 	sb->disks[0].state = (1<<MD_DISK_REMOVED);
1677 	rdev_for_each(rdev2, mddev) {
1678 		mdp_disk_t *d;
1679 		int desc_nr;
1680 		int is_active = test_bit(In_sync, &rdev2->flags);
1681 
1682 		if (rdev2->raid_disk >= 0 &&
1683 		    sb->minor_version >= 91)
1684 			/* we have nowhere to store the recovery_offset,
1685 			 * but if it is not below the reshape_position,
1686 			 * we can piggy-back on that.
1687 			 */
1688 			is_active = 1;
1689 		if (rdev2->raid_disk < 0 ||
1690 		    test_bit(Faulty, &rdev2->flags))
1691 			is_active = 0;
1692 		if (is_active)
1693 			desc_nr = rdev2->raid_disk;
1694 		else
1695 			desc_nr = next_spare++;
1696 		rdev2->desc_nr = desc_nr;
1697 		d = &sb->disks[rdev2->desc_nr];
1698 		nr_disks++;
1699 		d->number = rdev2->desc_nr;
1700 		d->major = MAJOR(rdev2->bdev->bd_dev);
1701 		d->minor = MINOR(rdev2->bdev->bd_dev);
1702 		if (is_active)
1703 			d->raid_disk = rdev2->raid_disk;
1704 		else
1705 			d->raid_disk = rdev2->desc_nr; /* compatibility */
1706 		if (test_bit(Faulty, &rdev2->flags))
1707 			d->state = (1<<MD_DISK_FAULTY);
1708 		else if (is_active) {
1709 			d->state = (1<<MD_DISK_ACTIVE);
1710 			if (test_bit(In_sync, &rdev2->flags))
1711 				d->state |= (1<<MD_DISK_SYNC);
1712 			active++;
1713 			working++;
1714 		} else {
1715 			d->state = 0;
1716 			spare++;
1717 			working++;
1718 		}
1719 		if (test_bit(WriteMostly, &rdev2->flags))
1720 			d->state |= (1<<MD_DISK_WRITEMOSTLY);
1721 		if (test_bit(FailFast, &rdev2->flags))
1722 			d->state |= (1<<MD_DISK_FAILFAST);
1723 	}
1724 	/* now set the "removed" and "faulty" bits on any missing devices */
1725 	for (i=0 ; i < mddev->raid_disks ; i++) {
1726 		mdp_disk_t *d = &sb->disks[i];
1727 		if (d->state == 0 && d->number == 0) {
1728 			d->number = i;
1729 			d->raid_disk = i;
1730 			d->state = (1<<MD_DISK_REMOVED);
1731 			d->state |= (1<<MD_DISK_FAULTY);
1732 			failed++;
1733 		}
1734 	}
1735 	sb->nr_disks = nr_disks;
1736 	sb->active_disks = active;
1737 	sb->working_disks = working;
1738 	sb->failed_disks = failed;
1739 	sb->spare_disks = spare;
1740 
1741 	sb->this_disk = sb->disks[rdev->desc_nr];
1742 	sb->sb_csum = calc_sb_csum(sb);
1743 }
1744 
1745 /*
1746  * rdev_size_change for 0.90.0
1747  */
1748 static unsigned long long
super_90_rdev_size_change(struct md_rdev * rdev,sector_t num_sectors)1749 super_90_rdev_size_change(struct md_rdev *rdev, sector_t num_sectors)
1750 {
1751 	if (num_sectors && num_sectors < rdev->mddev->dev_sectors)
1752 		return 0; /* component must fit device */
1753 	if (rdev->mddev->bitmap_info.offset)
1754 		return 0; /* can't move bitmap */
1755 	rdev->sb_start = calc_dev_sboffset(rdev);
1756 	if (!num_sectors || num_sectors > rdev->sb_start)
1757 		num_sectors = rdev->sb_start;
1758 	/* Limit to 4TB as metadata cannot record more than that.
1759 	 * 4TB == 2^32 KB, or 2*2^32 sectors.
1760 	 */
1761 	if ((u64)num_sectors >= (2ULL << 32) && rdev->mddev->level >= 1)
1762 		num_sectors = (sector_t)(2ULL << 32) - 2;
1763 	do {
1764 		md_write_metadata(rdev->mddev, rdev, rdev->sb_start,
1765 				  rdev->sb_size, rdev->sb_page, 0);
1766 	} while (md_super_wait(rdev->mddev) < 0);
1767 	return num_sectors;
1768 }
1769 
1770 static int
super_90_allow_new_offset(struct md_rdev * rdev,unsigned long long new_offset)1771 super_90_allow_new_offset(struct md_rdev *rdev, unsigned long long new_offset)
1772 {
1773 	/* non-zero offset changes not possible with v0.90 */
1774 	return new_offset == 0;
1775 }
1776 
1777 /*
1778  * version 1 superblock
1779  */
1780 
calc_sb_1_csum(struct mdp_superblock_1 * sb)1781 static __le32 calc_sb_1_csum(struct mdp_superblock_1 *sb)
1782 {
1783 	__le32 disk_csum;
1784 	u32 csum;
1785 	unsigned long long newcsum;
1786 	int size = 256 + le32_to_cpu(sb->max_dev)*2;
1787 	__le32 *isuper = (__le32*)sb;
1788 
1789 	disk_csum = sb->sb_csum;
1790 	sb->sb_csum = 0;
1791 	newcsum = 0;
1792 	for (; size >= 4; size -= 4)
1793 		newcsum += le32_to_cpu(*isuper++);
1794 
1795 	if (size == 2)
1796 		newcsum += le16_to_cpu(*(__le16*) isuper);
1797 
1798 	csum = (newcsum & 0xffffffff) + (newcsum >> 32);
1799 	sb->sb_csum = disk_csum;
1800 	return cpu_to_le32(csum);
1801 }
1802 
super_1_load(struct md_rdev * rdev,struct md_rdev * refdev,int minor_version)1803 static int super_1_load(struct md_rdev *rdev, struct md_rdev *refdev, int minor_version)
1804 {
1805 	struct mdp_superblock_1 *sb;
1806 	int ret;
1807 	sector_t sb_start;
1808 	sector_t sectors;
1809 	int bmask;
1810 	bool spare_disk = true;
1811 
1812 	/*
1813 	 * Calculate the position of the superblock in 512byte sectors.
1814 	 * It is always aligned to a 4K boundary and
1815 	 * depeding on minor_version, it can be:
1816 	 * 0: At least 8K, but less than 12K, from end of device
1817 	 * 1: At start of device
1818 	 * 2: 4K from start of device.
1819 	 */
1820 	switch(minor_version) {
1821 	case 0:
1822 		sb_start = bdev_nr_sectors(rdev->bdev) - 8 * 2;
1823 		sb_start &= ~(sector_t)(4*2-1);
1824 		break;
1825 	case 1:
1826 		sb_start = 0;
1827 		break;
1828 	case 2:
1829 		sb_start = 8;
1830 		break;
1831 	default:
1832 		return -EINVAL;
1833 	}
1834 	rdev->sb_start = sb_start;
1835 
1836 	/* superblock is rarely larger than 1K, but it can be larger,
1837 	 * and it is safe to read 4k, so we do that
1838 	 */
1839 	ret = read_disk_sb(rdev, 4096);
1840 	if (ret) return ret;
1841 
1842 	sb = page_address(rdev->sb_page);
1843 
1844 	if (sb->magic != cpu_to_le32(MD_SB_MAGIC) ||
1845 	    sb->major_version != cpu_to_le32(1) ||
1846 	    le32_to_cpu(sb->max_dev) > (4096-256)/2 ||
1847 	    le64_to_cpu(sb->super_offset) != rdev->sb_start ||
1848 	    (le32_to_cpu(sb->feature_map) & ~MD_FEATURE_ALL) != 0)
1849 		return -EINVAL;
1850 
1851 	if (calc_sb_1_csum(sb) != sb->sb_csum) {
1852 		pr_warn("md: invalid superblock checksum on %pg\n",
1853 			rdev->bdev);
1854 		return -EINVAL;
1855 	}
1856 	if (le64_to_cpu(sb->data_size) < 10) {
1857 		pr_warn("md: data_size too small on %pg\n",
1858 			rdev->bdev);
1859 		return -EINVAL;
1860 	}
1861 	if (sb->pad0 ||
1862 	    sb->pad3[0] ||
1863 	    memcmp(sb->pad3, sb->pad3+1, sizeof(sb->pad3) - sizeof(sb->pad3[1]))) {
1864 		pr_warn("Some padding is non-zero on %pg, might be a new feature\n",
1865 			rdev->bdev);
1866 		if (check_new_feature)
1867 			return -EINVAL;
1868 		pr_warn("check_new_feature is disabled, data corruption possible\n");
1869 	}
1870 
1871 	rdev->preferred_minor = 0xffff;
1872 	rdev->data_offset = le64_to_cpu(sb->data_offset);
1873 	rdev->new_data_offset = rdev->data_offset;
1874 	if ((le32_to_cpu(sb->feature_map) & MD_FEATURE_RESHAPE_ACTIVE) &&
1875 	    (le32_to_cpu(sb->feature_map) & MD_FEATURE_NEW_OFFSET))
1876 		rdev->new_data_offset += (s32)le32_to_cpu(sb->new_offset);
1877 	atomic_set(&rdev->corrected_errors, le32_to_cpu(sb->cnt_corrected_read));
1878 
1879 	rdev->sb_size = le32_to_cpu(sb->max_dev) * 2 + 256;
1880 	bmask = queue_logical_block_size(rdev->bdev->bd_disk->queue)-1;
1881 	if (rdev->sb_size & bmask)
1882 		rdev->sb_size = (rdev->sb_size | bmask) + 1;
1883 
1884 	if (minor_version
1885 	    && rdev->data_offset < sb_start + (rdev->sb_size/512))
1886 		return -EINVAL;
1887 	if (minor_version
1888 	    && rdev->new_data_offset < sb_start + (rdev->sb_size/512))
1889 		return -EINVAL;
1890 
1891 	rdev->desc_nr = le32_to_cpu(sb->dev_number);
1892 
1893 	if (!rdev->bb_page) {
1894 		rdev->bb_page = alloc_page(GFP_KERNEL);
1895 		if (!rdev->bb_page)
1896 			return -ENOMEM;
1897 	}
1898 	if ((le32_to_cpu(sb->feature_map) & MD_FEATURE_BAD_BLOCKS) &&
1899 	    rdev->badblocks.count == 0) {
1900 		/* need to load the bad block list.
1901 		 * Currently we limit it to one page.
1902 		 */
1903 		s32 offset;
1904 		sector_t bb_sector;
1905 		__le64 *bbp;
1906 		int i;
1907 		int sectors = le16_to_cpu(sb->bblog_size);
1908 		if (sectors > (PAGE_SIZE / 512))
1909 			return -EINVAL;
1910 		offset = le32_to_cpu(sb->bblog_offset);
1911 		if (offset == 0)
1912 			return -EINVAL;
1913 		bb_sector = (long long)offset;
1914 		if (!sync_page_io(rdev, bb_sector, sectors << 9,
1915 				  rdev->bb_page, REQ_OP_READ, true))
1916 			return -EIO;
1917 		bbp = (__le64 *)page_address(rdev->bb_page);
1918 
1919 		/* check for badblocks api. */
1920 		if (sb->bblog_shift >= BITS_PER_TYPE(sector_t)) {
1921 			pr_err("md: %pg: bogus bblog_shift %u for badblocks.\n",
1922 			       rdev->bdev, sb->bblog_shift);
1923 			return -EINVAL;
1924 		}
1925 		rdev->badblocks.shift = sb->bblog_shift;
1926 		for (i = 0 ; i < (sectors << (9-3)) ; i++, bbp++) {
1927 			u64 bb = le64_to_cpu(*bbp);
1928 			int count = bb & (0x3ff);
1929 			u64 sector = bb >> 10;
1930 			sector <<= sb->bblog_shift;
1931 			count <<= sb->bblog_shift;
1932 			if (bb + 1 == 0)
1933 				break;
1934 			if (!badblocks_set(&rdev->badblocks, sector, count, 1))
1935 				return -EINVAL;
1936 		}
1937 	} else if (sb->bblog_offset != 0)
1938 		rdev->badblocks.shift = 0;
1939 
1940 	if ((le32_to_cpu(sb->feature_map) &
1941 	    (MD_FEATURE_PPL | MD_FEATURE_MULTIPLE_PPLS))) {
1942 		rdev->ppl.offset = (__s16)le16_to_cpu(sb->ppl.offset);
1943 		rdev->ppl.size = le16_to_cpu(sb->ppl.size);
1944 		rdev->ppl.sector = rdev->sb_start + rdev->ppl.offset;
1945 	}
1946 
1947 	if ((le32_to_cpu(sb->feature_map) & MD_FEATURE_RAID0_LAYOUT) &&
1948 	    sb->level != 0)
1949 		return -EINVAL;
1950 
1951 	/* not spare disk */
1952 	if (rdev->desc_nr >= 0 && rdev->desc_nr < le32_to_cpu(sb->max_dev) &&
1953 	    (le16_to_cpu(sb->dev_roles[rdev->desc_nr]) < MD_DISK_ROLE_MAX ||
1954 	     le16_to_cpu(sb->dev_roles[rdev->desc_nr]) == MD_DISK_ROLE_JOURNAL))
1955 		spare_disk = false;
1956 
1957 	if (!refdev) {
1958 		if (!spare_disk)
1959 			ret = 1;
1960 		else
1961 			ret = 0;
1962 	} else {
1963 		__u64 ev1, ev2;
1964 		struct mdp_superblock_1 *refsb = page_address(refdev->sb_page);
1965 
1966 		if (memcmp(sb->set_uuid, refsb->set_uuid, 16) != 0 ||
1967 		    sb->level != refsb->level ||
1968 		    sb->layout != refsb->layout ||
1969 		    sb->chunksize != refsb->chunksize) {
1970 			pr_warn("md: %pg has strangely different superblock to %pg\n",
1971 				rdev->bdev,
1972 				refdev->bdev);
1973 			return -EINVAL;
1974 		}
1975 		ev1 = le64_to_cpu(sb->events);
1976 		ev2 = le64_to_cpu(refsb->events);
1977 
1978 		if (!spare_disk && ev1 > ev2)
1979 			ret = 1;
1980 		else
1981 			ret = 0;
1982 	}
1983 	if (minor_version)
1984 		sectors = bdev_nr_sectors(rdev->bdev) - rdev->data_offset;
1985 	else
1986 		sectors = rdev->sb_start;
1987 	if (sectors < le64_to_cpu(sb->data_size))
1988 		return -EINVAL;
1989 	rdev->sectors = le64_to_cpu(sb->data_size);
1990 	return ret;
1991 }
1992 
super_1_validate(struct mddev * mddev,struct md_rdev * freshest,struct md_rdev * rdev)1993 static int super_1_validate(struct mddev *mddev, struct md_rdev *freshest, struct md_rdev *rdev)
1994 {
1995 	struct mdp_superblock_1 *sb = page_address(rdev->sb_page);
1996 	__u64 ev1 = le64_to_cpu(sb->events);
1997 	int role;
1998 
1999 	rdev->raid_disk = -1;
2000 	clear_bit(Faulty, &rdev->flags);
2001 	clear_bit(In_sync, &rdev->flags);
2002 	clear_bit(Bitmap_sync, &rdev->flags);
2003 	clear_bit(WriteMostly, &rdev->flags);
2004 
2005 	if (mddev->raid_disks == 0) {
2006 		mddev->major_version = 1;
2007 		mddev->patch_version = 0;
2008 		mddev->external = 0;
2009 		mddev->chunk_sectors = le32_to_cpu(sb->chunksize);
2010 		mddev->ctime = le64_to_cpu(sb->ctime);
2011 		mddev->utime = le64_to_cpu(sb->utime);
2012 		mddev->level = le32_to_cpu(sb->level);
2013 		mddev->clevel[0] = 0;
2014 		mddev->layout = le32_to_cpu(sb->layout);
2015 		mddev->raid_disks = le32_to_cpu(sb->raid_disks);
2016 		mddev->dev_sectors = le64_to_cpu(sb->size);
2017 		mddev->events = ev1;
2018 		mddev->bitmap_info.offset = 0;
2019 		mddev->bitmap_info.space = 0;
2020 		/* Default location for bitmap is 1K after superblock
2021 		 * using 3K - total of 4K
2022 		 */
2023 		mddev->bitmap_info.default_offset = 1024 >> 9;
2024 		mddev->bitmap_info.default_space = (4096-1024) >> 9;
2025 		mddev->reshape_backwards = 0;
2026 
2027 		mddev->resync_offset = le64_to_cpu(sb->resync_offset);
2028 		memcpy(mddev->uuid, sb->set_uuid, 16);
2029 
2030 		mddev->max_disks =  (4096-256)/2;
2031 
2032 		if (!mddev->logical_block_size)
2033 			mddev->logical_block_size = le32_to_cpu(sb->logical_block_size);
2034 
2035 		if ((le32_to_cpu(sb->feature_map) & MD_FEATURE_BITMAP_OFFSET) &&
2036 		    mddev->bitmap_info.file == NULL) {
2037 			mddev->bitmap_info.offset =
2038 				(__s32)le32_to_cpu(sb->bitmap_offset);
2039 			/* Metadata doesn't record how much space is available.
2040 			 * For 1.0, we assume we can use up to the superblock
2041 			 * if before, else to 4K beyond superblock.
2042 			 * For others, assume no change is possible.
2043 			 */
2044 			if (mddev->minor_version > 0)
2045 				mddev->bitmap_info.space = 0;
2046 			else if (mddev->bitmap_info.offset > 0)
2047 				mddev->bitmap_info.space =
2048 					8 - mddev->bitmap_info.offset;
2049 			else
2050 				mddev->bitmap_info.space =
2051 					-mddev->bitmap_info.offset;
2052 		}
2053 
2054 		if ((le32_to_cpu(sb->feature_map) & MD_FEATURE_RESHAPE_ACTIVE)) {
2055 			mddev->reshape_position = le64_to_cpu(sb->reshape_position);
2056 			mddev->delta_disks = le32_to_cpu(sb->delta_disks);
2057 			mddev->new_level = le32_to_cpu(sb->new_level);
2058 			mddev->new_layout = le32_to_cpu(sb->new_layout);
2059 			mddev->new_chunk_sectors = le32_to_cpu(sb->new_chunk);
2060 			if (mddev->delta_disks < 0 ||
2061 			    (mddev->delta_disks == 0 &&
2062 			     (le32_to_cpu(sb->feature_map)
2063 			      & MD_FEATURE_RESHAPE_BACKWARDS)))
2064 				mddev->reshape_backwards = 1;
2065 		} else {
2066 			mddev->reshape_position = MaxSector;
2067 			mddev->delta_disks = 0;
2068 			mddev->new_level = mddev->level;
2069 			mddev->new_layout = mddev->layout;
2070 			mddev->new_chunk_sectors = mddev->chunk_sectors;
2071 		}
2072 
2073 		if (mddev->level == 0 &&
2074 		    !(le32_to_cpu(sb->feature_map) & MD_FEATURE_RAID0_LAYOUT))
2075 			mddev->layout = -1;
2076 
2077 		if (le32_to_cpu(sb->feature_map) & MD_FEATURE_JOURNAL)
2078 			set_bit(MD_HAS_JOURNAL, &mddev->flags);
2079 
2080 		if (le32_to_cpu(sb->feature_map) &
2081 		    (MD_FEATURE_PPL | MD_FEATURE_MULTIPLE_PPLS)) {
2082 			if (le32_to_cpu(sb->feature_map) &
2083 			    (MD_FEATURE_BITMAP_OFFSET | MD_FEATURE_JOURNAL))
2084 				return -EINVAL;
2085 			if ((le32_to_cpu(sb->feature_map) & MD_FEATURE_PPL) &&
2086 			    (le32_to_cpu(sb->feature_map) &
2087 					    MD_FEATURE_MULTIPLE_PPLS))
2088 				return -EINVAL;
2089 			set_bit(MD_HAS_PPL, &mddev->flags);
2090 		}
2091 	} else if (mddev->pers == NULL) {
2092 		/* Insist of good event counter while assembling, except for
2093 		 * spares (which don't need an event count).
2094 		 * Similar to mdadm, we allow event counter difference of 1
2095 		 * from the freshest device.
2096 		 */
2097 		if (rdev->desc_nr >= 0 &&
2098 		    rdev->desc_nr < le32_to_cpu(sb->max_dev) &&
2099 		    (le16_to_cpu(sb->dev_roles[rdev->desc_nr]) < MD_DISK_ROLE_MAX ||
2100 		     le16_to_cpu(sb->dev_roles[rdev->desc_nr]) == MD_DISK_ROLE_JOURNAL))
2101 			if (ev1 + 1 < mddev->events)
2102 				return -EINVAL;
2103 	} else if (mddev->bitmap) {
2104 		/* If adding to array with a bitmap, then we can accept an
2105 		 * older device, but not too old.
2106 		 */
2107 		if (ev1 < md_bitmap_events_cleared(mddev))
2108 			return 0;
2109 		if (ev1 < mddev->events)
2110 			set_bit(Bitmap_sync, &rdev->flags);
2111 	} else {
2112 		if (ev1 < mddev->events)
2113 			/* just a hot-add of a new device, leave raid_disk at -1 */
2114 			return 0;
2115 	}
2116 
2117 	if (rdev->desc_nr < 0 ||
2118 	    rdev->desc_nr >= le32_to_cpu(sb->max_dev)) {
2119 		role = MD_DISK_ROLE_SPARE;
2120 		rdev->desc_nr = -1;
2121 	} else if (mddev->pers == NULL && freshest && ev1 < mddev->events) {
2122 		/*
2123 		 * If we are assembling, and our event counter is smaller than the
2124 		 * highest event counter, we cannot trust our superblock about the role.
2125 		 * It could happen that our rdev was marked as Faulty, and all other
2126 		 * superblocks were updated with +1 event counter.
2127 		 * Then, before the next superblock update, which typically happens when
2128 		 * remove_and_add_spares() removes the device from the array, there was
2129 		 * a crash or reboot.
2130 		 * If we allow current rdev without consulting the freshest superblock,
2131 		 * we could cause data corruption.
2132 		 * Note that in this case our event counter is smaller by 1 than the
2133 		 * highest, otherwise, this rdev would not be allowed into array;
2134 		 * both kernel and mdadm allow event counter difference of 1.
2135 		 */
2136 		struct mdp_superblock_1 *freshest_sb = page_address(freshest->sb_page);
2137 		u32 freshest_max_dev = le32_to_cpu(freshest_sb->max_dev);
2138 
2139 		if (rdev->desc_nr >= freshest_max_dev) {
2140 			/* this is unexpected, better not proceed */
2141 			pr_warn("md: %s: rdev[%pg]: desc_nr(%d) >= freshest(%pg)->sb->max_dev(%u)\n",
2142 				mdname(mddev), rdev->bdev, rdev->desc_nr,
2143 				freshest->bdev, freshest_max_dev);
2144 			return -EUCLEAN;
2145 		}
2146 
2147 		role = le16_to_cpu(freshest_sb->dev_roles[rdev->desc_nr]);
2148 		pr_debug("md: %s: rdev[%pg]: role=%d(0x%x) according to freshest %pg\n",
2149 			 mdname(mddev), rdev->bdev, role, role, freshest->bdev);
2150 	} else {
2151 		role = le16_to_cpu(sb->dev_roles[rdev->desc_nr]);
2152 	}
2153 	switch (role) {
2154 	case MD_DISK_ROLE_SPARE: /* spare */
2155 		break;
2156 	case MD_DISK_ROLE_FAULTY: /* faulty */
2157 		set_bit(Faulty, &rdev->flags);
2158 		break;
2159 	case MD_DISK_ROLE_JOURNAL: /* journal device */
2160 		if (!(le32_to_cpu(sb->feature_map) & MD_FEATURE_JOURNAL)) {
2161 			/* journal device without journal feature */
2162 			pr_warn("md: journal device provided without journal feature, ignoring the device\n");
2163 			return -EINVAL;
2164 		}
2165 		set_bit(Journal, &rdev->flags);
2166 		rdev->journal_tail = le64_to_cpu(sb->journal_tail);
2167 		rdev->raid_disk = 0;
2168 		break;
2169 	default:
2170 		rdev->saved_raid_disk = role;
2171 		if ((le32_to_cpu(sb->feature_map) &
2172 		     MD_FEATURE_RECOVERY_OFFSET)) {
2173 			rdev->recovery_offset = le64_to_cpu(sb->recovery_offset);
2174 			if (!(le32_to_cpu(sb->feature_map) &
2175 			      MD_FEATURE_RECOVERY_BITMAP))
2176 				rdev->saved_raid_disk = -1;
2177 		} else {
2178 			/*
2179 			 * If the array is FROZEN, then the device can't
2180 			 * be in_sync with rest of array.
2181 			 */
2182 			if (!test_bit(MD_RECOVERY_FROZEN,
2183 				      &mddev->recovery))
2184 				set_bit(In_sync, &rdev->flags);
2185 		}
2186 		rdev->raid_disk = role;
2187 		break;
2188 	}
2189 	if (sb->devflags & WriteMostly1)
2190 		set_bit(WriteMostly, &rdev->flags);
2191 	if (sb->devflags & FailFast1)
2192 		set_bit(FailFast, &rdev->flags);
2193 	if (le32_to_cpu(sb->feature_map) & MD_FEATURE_REPLACEMENT)
2194 		set_bit(Replacement, &rdev->flags);
2195 
2196 	return 0;
2197 }
2198 
super_1_sync(struct mddev * mddev,struct md_rdev * rdev)2199 static void super_1_sync(struct mddev *mddev, struct md_rdev *rdev)
2200 {
2201 	struct mdp_superblock_1 *sb;
2202 	struct md_rdev *rdev2;
2203 	int max_dev, i;
2204 	/* make rdev->sb match mddev and rdev data. */
2205 
2206 	sb = page_address(rdev->sb_page);
2207 
2208 	sb->feature_map = 0;
2209 	sb->pad0 = 0;
2210 	sb->recovery_offset = cpu_to_le64(0);
2211 	memset(sb->pad3, 0, sizeof(sb->pad3));
2212 
2213 	sb->utime = cpu_to_le64((__u64)mddev->utime);
2214 	sb->events = cpu_to_le64(mddev->events);
2215 	if (mddev->in_sync)
2216 		sb->resync_offset = cpu_to_le64(mddev->resync_offset);
2217 	else if (test_bit(MD_JOURNAL_CLEAN, &mddev->flags))
2218 		sb->resync_offset = cpu_to_le64(MaxSector);
2219 	else
2220 		sb->resync_offset = cpu_to_le64(0);
2221 
2222 	sb->cnt_corrected_read = cpu_to_le32(atomic_read(&rdev->corrected_errors));
2223 
2224 	sb->raid_disks = cpu_to_le32(mddev->raid_disks);
2225 	sb->size = cpu_to_le64(mddev->dev_sectors);
2226 	sb->chunksize = cpu_to_le32(mddev->chunk_sectors);
2227 	sb->level = cpu_to_le32(mddev->level);
2228 	sb->layout = cpu_to_le32(mddev->layout);
2229 	sb->logical_block_size = cpu_to_le32(mddev->logical_block_size);
2230 	if (test_bit(FailFast, &rdev->flags))
2231 		sb->devflags |= FailFast1;
2232 	else
2233 		sb->devflags &= ~FailFast1;
2234 
2235 	if (test_bit(WriteMostly, &rdev->flags))
2236 		sb->devflags |= WriteMostly1;
2237 	else
2238 		sb->devflags &= ~WriteMostly1;
2239 	sb->data_offset = cpu_to_le64(rdev->data_offset);
2240 	sb->data_size = cpu_to_le64(rdev->sectors);
2241 
2242 	if (mddev->bitmap && mddev->bitmap_info.file == NULL) {
2243 		sb->bitmap_offset = cpu_to_le32((__u32)mddev->bitmap_info.offset);
2244 		sb->feature_map = cpu_to_le32(MD_FEATURE_BITMAP_OFFSET);
2245 	}
2246 
2247 	if (rdev->raid_disk >= 0 && !test_bit(Journal, &rdev->flags) &&
2248 	    !test_bit(In_sync, &rdev->flags)) {
2249 		sb->feature_map |=
2250 			cpu_to_le32(MD_FEATURE_RECOVERY_OFFSET);
2251 		sb->recovery_offset =
2252 			cpu_to_le64(rdev->recovery_offset);
2253 		if (rdev->saved_raid_disk >= 0 && mddev->bitmap)
2254 			sb->feature_map |=
2255 				cpu_to_le32(MD_FEATURE_RECOVERY_BITMAP);
2256 	}
2257 	/* Note: recovery_offset and journal_tail share space  */
2258 	if (test_bit(Journal, &rdev->flags))
2259 		sb->journal_tail = cpu_to_le64(rdev->journal_tail);
2260 	if (test_bit(Replacement, &rdev->flags))
2261 		sb->feature_map |=
2262 			cpu_to_le32(MD_FEATURE_REPLACEMENT);
2263 
2264 	if (mddev->reshape_position != MaxSector) {
2265 		sb->feature_map |= cpu_to_le32(MD_FEATURE_RESHAPE_ACTIVE);
2266 		sb->reshape_position = cpu_to_le64(mddev->reshape_position);
2267 		sb->new_layout = cpu_to_le32(mddev->new_layout);
2268 		sb->delta_disks = cpu_to_le32(mddev->delta_disks);
2269 		sb->new_level = cpu_to_le32(mddev->new_level);
2270 		sb->new_chunk = cpu_to_le32(mddev->new_chunk_sectors);
2271 		if (mddev->delta_disks == 0 &&
2272 		    mddev->reshape_backwards)
2273 			sb->feature_map
2274 				|= cpu_to_le32(MD_FEATURE_RESHAPE_BACKWARDS);
2275 		if (rdev->new_data_offset != rdev->data_offset) {
2276 			sb->feature_map
2277 				|= cpu_to_le32(MD_FEATURE_NEW_OFFSET);
2278 			sb->new_offset = cpu_to_le32((__u32)(rdev->new_data_offset
2279 							     - rdev->data_offset));
2280 		}
2281 	}
2282 
2283 	if (mddev_is_clustered(mddev))
2284 		sb->feature_map |= cpu_to_le32(MD_FEATURE_CLUSTERED);
2285 
2286 	if (rdev->badblocks.count == 0)
2287 		/* Nothing to do for bad blocks*/ ;
2288 	else if (sb->bblog_offset == 0)
2289 		/* Cannot record bad blocks on this device */
2290 		md_error(mddev, rdev);
2291 	else {
2292 		struct badblocks *bb = &rdev->badblocks;
2293 		__le64 *bbp = (__le64 *)page_address(rdev->bb_page);
2294 		u64 *p = bb->page;
2295 		sb->feature_map |= cpu_to_le32(MD_FEATURE_BAD_BLOCKS);
2296 		if (bb->changed) {
2297 			unsigned seq;
2298 
2299 retry:
2300 			seq = read_seqbegin(&bb->lock);
2301 
2302 			memset(bbp, 0xff, PAGE_SIZE);
2303 
2304 			for (i = 0 ; i < bb->count ; i++) {
2305 				u64 internal_bb = p[i];
2306 				u64 store_bb = ((BB_OFFSET(internal_bb) << 10)
2307 						| BB_LEN(internal_bb));
2308 				bbp[i] = cpu_to_le64(store_bb);
2309 			}
2310 			bb->changed = 0;
2311 			if (read_seqretry(&bb->lock, seq))
2312 				goto retry;
2313 
2314 			bb->sector = (rdev->sb_start +
2315 				      (int)le32_to_cpu(sb->bblog_offset));
2316 			bb->size = le16_to_cpu(sb->bblog_size);
2317 		}
2318 	}
2319 
2320 	max_dev = 0;
2321 	rdev_for_each(rdev2, mddev)
2322 		if (rdev2->desc_nr+1 > max_dev)
2323 			max_dev = rdev2->desc_nr+1;
2324 
2325 	if (max_dev > le32_to_cpu(sb->max_dev)) {
2326 		int bmask;
2327 		sb->max_dev = cpu_to_le32(max_dev);
2328 		rdev->sb_size = max_dev * 2 + 256;
2329 		bmask = queue_logical_block_size(rdev->bdev->bd_disk->queue)-1;
2330 		if (rdev->sb_size & bmask)
2331 			rdev->sb_size = (rdev->sb_size | bmask) + 1;
2332 	} else
2333 		max_dev = le32_to_cpu(sb->max_dev);
2334 
2335 	for (i=0; i<max_dev;i++)
2336 		sb->dev_roles[i] = cpu_to_le16(MD_DISK_ROLE_SPARE);
2337 
2338 	if (test_bit(MD_HAS_JOURNAL, &mddev->flags))
2339 		sb->feature_map |= cpu_to_le32(MD_FEATURE_JOURNAL);
2340 
2341 	if (test_bit(MD_HAS_PPL, &mddev->flags)) {
2342 		if (test_bit(MD_HAS_MULTIPLE_PPLS, &mddev->flags))
2343 			sb->feature_map |=
2344 			    cpu_to_le32(MD_FEATURE_MULTIPLE_PPLS);
2345 		else
2346 			sb->feature_map |= cpu_to_le32(MD_FEATURE_PPL);
2347 		sb->ppl.offset = cpu_to_le16(rdev->ppl.offset);
2348 		sb->ppl.size = cpu_to_le16(rdev->ppl.size);
2349 	}
2350 
2351 	rdev_for_each(rdev2, mddev) {
2352 		i = rdev2->desc_nr;
2353 		if (test_bit(Faulty, &rdev2->flags))
2354 			sb->dev_roles[i] = cpu_to_le16(MD_DISK_ROLE_FAULTY);
2355 		else if (test_bit(In_sync, &rdev2->flags))
2356 			sb->dev_roles[i] = cpu_to_le16(rdev2->raid_disk);
2357 		else if (test_bit(Journal, &rdev2->flags))
2358 			sb->dev_roles[i] = cpu_to_le16(MD_DISK_ROLE_JOURNAL);
2359 		else if (rdev2->raid_disk >= 0)
2360 			sb->dev_roles[i] = cpu_to_le16(rdev2->raid_disk);
2361 		else
2362 			sb->dev_roles[i] = cpu_to_le16(MD_DISK_ROLE_SPARE);
2363 	}
2364 
2365 	sb->sb_csum = calc_sb_1_csum(sb);
2366 }
2367 
super_1_choose_bm_space(sector_t dev_size)2368 static sector_t super_1_choose_bm_space(sector_t dev_size)
2369 {
2370 	sector_t bm_space;
2371 
2372 	/* if the device is bigger than 8Gig, save 64k for bitmap
2373 	 * usage, if bigger than 200Gig, save 128k
2374 	 */
2375 	if (dev_size < 64*2)
2376 		bm_space = 0;
2377 	else if (dev_size - 64*2 >= 200*1024*1024*2)
2378 		bm_space = 128*2;
2379 	else if (dev_size - 4*2 > 8*1024*1024*2)
2380 		bm_space = 64*2;
2381 	else
2382 		bm_space = 4*2;
2383 	return bm_space;
2384 }
2385 
2386 static unsigned long long
super_1_rdev_size_change(struct md_rdev * rdev,sector_t num_sectors)2387 super_1_rdev_size_change(struct md_rdev *rdev, sector_t num_sectors)
2388 {
2389 	struct mdp_superblock_1 *sb;
2390 	sector_t max_sectors;
2391 	if (num_sectors && num_sectors < rdev->mddev->dev_sectors)
2392 		return 0; /* component must fit device */
2393 	if (rdev->data_offset != rdev->new_data_offset)
2394 		return 0; /* too confusing */
2395 	if (rdev->sb_start < rdev->data_offset) {
2396 		/* minor versions 1 and 2; superblock before data */
2397 		max_sectors = bdev_nr_sectors(rdev->bdev) - rdev->data_offset;
2398 		if (!num_sectors || num_sectors > max_sectors)
2399 			num_sectors = max_sectors;
2400 	} else if (rdev->mddev->bitmap_info.offset) {
2401 		/* minor version 0 with bitmap we can't move */
2402 		return 0;
2403 	} else {
2404 		/* minor version 0; superblock after data */
2405 		sector_t sb_start, bm_space;
2406 		sector_t dev_size = bdev_nr_sectors(rdev->bdev);
2407 
2408 		/* 8K is for superblock */
2409 		sb_start = dev_size - 8*2;
2410 		sb_start &= ~(sector_t)(4*2 - 1);
2411 
2412 		bm_space = super_1_choose_bm_space(dev_size);
2413 
2414 		/* Space that can be used to store date needs to decrease
2415 		 * superblock bitmap space and bad block space(4K)
2416 		 */
2417 		max_sectors = sb_start - bm_space - 4*2;
2418 
2419 		if (!num_sectors || num_sectors > max_sectors)
2420 			num_sectors = max_sectors;
2421 		rdev->sb_start = sb_start;
2422 	}
2423 	sb = page_address(rdev->sb_page);
2424 	sb->data_size = cpu_to_le64(num_sectors);
2425 	sb->super_offset = cpu_to_le64(rdev->sb_start);
2426 	sb->sb_csum = calc_sb_1_csum(sb);
2427 	do {
2428 		md_write_metadata(rdev->mddev, rdev, rdev->sb_start,
2429 				  rdev->sb_size, rdev->sb_page, 0);
2430 	} while (md_super_wait(rdev->mddev) < 0);
2431 	return num_sectors;
2432 
2433 }
2434 
2435 static int
super_1_allow_new_offset(struct md_rdev * rdev,unsigned long long new_offset)2436 super_1_allow_new_offset(struct md_rdev *rdev,
2437 			 unsigned long long new_offset)
2438 {
2439 	struct mddev *mddev = rdev->mddev;
2440 
2441 	/* All necessary checks on new >= old have been done */
2442 	if (new_offset >= rdev->data_offset)
2443 		return 1;
2444 
2445 	/* with 1.0 metadata, there is no metadata to tread on
2446 	 * so we can always move back */
2447 	if (mddev->minor_version == 0)
2448 		return 1;
2449 
2450 	/* otherwise we must be sure not to step on
2451 	 * any metadata, so stay:
2452 	 * 36K beyond start of superblock
2453 	 * beyond end of badblocks
2454 	 * beyond write-intent bitmap
2455 	 */
2456 	if (rdev->sb_start + (32+4)*2 > new_offset)
2457 		return 0;
2458 
2459 	if (md_bitmap_registered(mddev) && !mddev->bitmap_info.file) {
2460 		struct md_bitmap_stats stats;
2461 		int err;
2462 
2463 		err = mddev->bitmap_ops->get_stats(mddev->bitmap, &stats);
2464 		if (!err && rdev->sb_start + mddev->bitmap_info.offset +
2465 		    stats.file_pages * (PAGE_SIZE >> 9) > new_offset)
2466 			return 0;
2467 	}
2468 
2469 	if (rdev->badblocks.sector + rdev->badblocks.size > new_offset)
2470 		return 0;
2471 
2472 	return 1;
2473 }
2474 
2475 static struct super_type super_types[] = {
2476 	[0] = {
2477 		.name	= "0.90.0",
2478 		.owner	= THIS_MODULE,
2479 		.load_super	    = super_90_load,
2480 		.validate_super	    = super_90_validate,
2481 		.sync_super	    = super_90_sync,
2482 		.rdev_size_change   = super_90_rdev_size_change,
2483 		.allow_new_offset   = super_90_allow_new_offset,
2484 	},
2485 	[1] = {
2486 		.name	= "md-1",
2487 		.owner	= THIS_MODULE,
2488 		.load_super	    = super_1_load,
2489 		.validate_super	    = super_1_validate,
2490 		.sync_super	    = super_1_sync,
2491 		.rdev_size_change   = super_1_rdev_size_change,
2492 		.allow_new_offset   = super_1_allow_new_offset,
2493 	},
2494 };
2495 
sync_super(struct mddev * mddev,struct md_rdev * rdev)2496 static void sync_super(struct mddev *mddev, struct md_rdev *rdev)
2497 {
2498 	if (mddev->sync_super) {
2499 		mddev->sync_super(mddev, rdev);
2500 		return;
2501 	}
2502 
2503 	BUG_ON(mddev->major_version >= ARRAY_SIZE(super_types));
2504 
2505 	super_types[mddev->major_version].sync_super(mddev, rdev);
2506 }
2507 
match_mddev_units(struct mddev * mddev1,struct mddev * mddev2)2508 static int match_mddev_units(struct mddev *mddev1, struct mddev *mddev2)
2509 {
2510 	struct md_rdev *rdev, *rdev2;
2511 
2512 	rcu_read_lock();
2513 	rdev_for_each_rcu(rdev, mddev1) {
2514 		if (test_bit(Faulty, &rdev->flags) ||
2515 		    test_bit(Journal, &rdev->flags) ||
2516 		    rdev->raid_disk == -1)
2517 			continue;
2518 		rdev_for_each_rcu(rdev2, mddev2) {
2519 			if (test_bit(Faulty, &rdev2->flags) ||
2520 			    test_bit(Journal, &rdev2->flags) ||
2521 			    rdev2->raid_disk == -1)
2522 				continue;
2523 			if (rdev->bdev->bd_disk == rdev2->bdev->bd_disk) {
2524 				rcu_read_unlock();
2525 				return 1;
2526 			}
2527 		}
2528 	}
2529 	rcu_read_unlock();
2530 	return 0;
2531 }
2532 
2533 static LIST_HEAD(pending_raid_disks);
2534 
2535 /*
2536  * Try to register data integrity profile for an mddev
2537  *
2538  * This is called when an array is started and after a disk has been kicked
2539  * from the array. It only succeeds if all working and active component devices
2540  * are integrity capable with matching profiles.
2541  */
md_integrity_register(struct mddev * mddev)2542 int md_integrity_register(struct mddev *mddev)
2543 {
2544 	if (list_empty(&mddev->disks))
2545 		return 0; /* nothing to do */
2546 	if (mddev_is_dm(mddev) || !blk_get_integrity(mddev->gendisk))
2547 		return 0; /* shouldn't register */
2548 
2549 	pr_debug("md: data integrity enabled on %s\n", mdname(mddev));
2550 	return 0;
2551 }
2552 EXPORT_SYMBOL(md_integrity_register);
2553 
rdev_read_only(struct md_rdev * rdev)2554 static bool rdev_read_only(struct md_rdev *rdev)
2555 {
2556 	return bdev_read_only(rdev->bdev) ||
2557 		(rdev->meta_bdev && bdev_read_only(rdev->meta_bdev));
2558 }
2559 
bind_rdev_to_array(struct md_rdev * rdev,struct mddev * mddev)2560 static int bind_rdev_to_array(struct md_rdev *rdev, struct mddev *mddev)
2561 {
2562 	char b[BDEVNAME_SIZE];
2563 	int err;
2564 
2565 	/* prevent duplicates */
2566 	if (find_rdev(mddev, rdev->bdev->bd_dev))
2567 		return -EEXIST;
2568 
2569 	if (rdev_read_only(rdev) && mddev->pers)
2570 		return -EROFS;
2571 
2572 	/* make sure rdev->sectors exceeds mddev->dev_sectors */
2573 	if (!test_bit(Journal, &rdev->flags) &&
2574 	    rdev->sectors &&
2575 	    (mddev->dev_sectors == 0 || rdev->sectors < mddev->dev_sectors)) {
2576 		if (mddev->pers) {
2577 			/* Cannot change size, so fail
2578 			 * If mddev->level <= 0, then we don't care
2579 			 * about aligning sizes (e.g. linear)
2580 			 */
2581 			if (mddev->level > 0)
2582 				return -ENOSPC;
2583 		} else
2584 			mddev->dev_sectors = rdev->sectors;
2585 	}
2586 
2587 	/* Verify rdev->desc_nr is unique.
2588 	 * If it is -1, assign a free number, else
2589 	 * check number is not in use
2590 	 */
2591 	rcu_read_lock();
2592 	if (rdev->desc_nr < 0) {
2593 		int choice = 0;
2594 		if (mddev->pers)
2595 			choice = mddev->raid_disks;
2596 		while (md_find_rdev_nr_rcu(mddev, choice))
2597 			choice++;
2598 		rdev->desc_nr = choice;
2599 	} else {
2600 		if (md_find_rdev_nr_rcu(mddev, rdev->desc_nr)) {
2601 			rcu_read_unlock();
2602 			return -EBUSY;
2603 		}
2604 	}
2605 	rcu_read_unlock();
2606 	if (!test_bit(Journal, &rdev->flags) &&
2607 	    mddev->max_disks && rdev->desc_nr >= mddev->max_disks) {
2608 		pr_warn("md: %s: array is limited to %d devices\n",
2609 			mdname(mddev), mddev->max_disks);
2610 		return -EBUSY;
2611 	}
2612 	snprintf(b, sizeof(b), "%pg", rdev->bdev);
2613 	strreplace(b, '/', '!');
2614 
2615 	rdev->mddev = mddev;
2616 	pr_debug("md: bind<%s>\n", b);
2617 
2618 	if (mddev->raid_disks)
2619 		mddev_create_serial_pool(mddev, rdev);
2620 
2621 	if ((err = kobject_add(&rdev->kobj, &mddev->kobj, "dev-%s", b)))
2622 		goto fail;
2623 
2624 	/* failure here is OK */
2625 	err = sysfs_create_link(&rdev->kobj, bdev_kobj(rdev->bdev), "block");
2626 	rdev->sysfs_state = sysfs_get_dirent_safe(rdev->kobj.sd, "state");
2627 	rdev->sysfs_unack_badblocks =
2628 		sysfs_get_dirent_safe(rdev->kobj.sd, "unacknowledged_bad_blocks");
2629 	rdev->sysfs_badblocks =
2630 		sysfs_get_dirent_safe(rdev->kobj.sd, "bad_blocks");
2631 
2632 	list_add_rcu(&rdev->same_set, &mddev->disks);
2633 	bd_link_disk_holder(rdev->bdev, mddev->gendisk);
2634 
2635 	return 0;
2636 
2637  fail:
2638 	pr_warn("md: failed to register dev-%s for %s\n",
2639 		b, mdname(mddev));
2640 	mddev_destroy_serial_pool(mddev, rdev);
2641 	return err;
2642 }
2643 
2644 void md_autodetect_dev(dev_t dev);
2645 
2646 /* just for claiming the bdev */
2647 static struct md_rdev claim_rdev;
2648 
export_rdev(struct md_rdev * rdev)2649 static void export_rdev(struct md_rdev *rdev)
2650 {
2651 	pr_debug("md: export_rdev(%pg)\n", rdev->bdev);
2652 	md_rdev_clear(rdev);
2653 #ifndef MODULE
2654 	if (test_bit(AutoDetected, &rdev->flags))
2655 		md_autodetect_dev(rdev->bdev->bd_dev);
2656 #endif
2657 	fput(rdev->bdev_file);
2658 	rdev->bdev = NULL;
2659 	kobject_put(&rdev->kobj);
2660 }
2661 
md_kick_rdev_from_array(struct md_rdev * rdev)2662 static void md_kick_rdev_from_array(struct md_rdev *rdev)
2663 {
2664 	struct mddev *mddev = rdev->mddev;
2665 
2666 	bd_unlink_disk_holder(rdev->bdev, rdev->mddev->gendisk);
2667 	list_del_rcu(&rdev->same_set);
2668 	pr_debug("md: unbind<%pg>\n", rdev->bdev);
2669 	mddev_destroy_serial_pool(rdev->mddev, rdev);
2670 	WRITE_ONCE(rdev->mddev, NULL);
2671 	sysfs_remove_link(&rdev->kobj, "block");
2672 	sysfs_put(rdev->sysfs_state);
2673 	sysfs_put(rdev->sysfs_unack_badblocks);
2674 	sysfs_put(rdev->sysfs_badblocks);
2675 	rdev->sysfs_state = NULL;
2676 	rdev->sysfs_unack_badblocks = NULL;
2677 	rdev->sysfs_badblocks = NULL;
2678 	rdev->badblocks.count = 0;
2679 
2680 	synchronize_rcu();
2681 
2682 	/*
2683 	 * kobject_del() will wait for all in progress writers to be done, where
2684 	 * reconfig_mutex is held, hence it can't be called under
2685 	 * reconfig_mutex and it's delayed to mddev_unlock().
2686 	 */
2687 	list_add(&rdev->same_set, &mddev->deleting);
2688 }
2689 
export_array(struct mddev * mddev)2690 static void export_array(struct mddev *mddev)
2691 {
2692 	struct md_rdev *rdev;
2693 
2694 	while (!list_empty(&mddev->disks)) {
2695 		rdev = list_first_entry(&mddev->disks, struct md_rdev,
2696 					same_set);
2697 		md_kick_rdev_from_array(rdev);
2698 	}
2699 	mddev->raid_disks = 0;
2700 	mddev->major_version = 0;
2701 }
2702 
set_in_sync(struct mddev * mddev)2703 static bool set_in_sync(struct mddev *mddev)
2704 {
2705 	lockdep_assert_held(&mddev->lock);
2706 	if (!mddev->in_sync) {
2707 		mddev->sync_checkers++;
2708 		spin_unlock(&mddev->lock);
2709 		percpu_ref_switch_to_atomic_sync(&mddev->writes_pending);
2710 		spin_lock(&mddev->lock);
2711 		if (!mddev->in_sync &&
2712 		    percpu_ref_is_zero(&mddev->writes_pending)) {
2713 			mddev->in_sync = 1;
2714 			/*
2715 			 * Ensure ->in_sync is visible before we clear
2716 			 * ->sync_checkers.
2717 			 */
2718 			smp_mb();
2719 			set_bit(MD_SB_CHANGE_CLEAN, &mddev->sb_flags);
2720 			sysfs_notify_dirent_safe(mddev->sysfs_state);
2721 		}
2722 		if (--mddev->sync_checkers == 0)
2723 			percpu_ref_switch_to_percpu(&mddev->writes_pending);
2724 	}
2725 	if (mddev->safemode == 1)
2726 		mddev->safemode = 0;
2727 	return mddev->in_sync;
2728 }
2729 
sync_sbs(struct mddev * mddev,int nospares)2730 static void sync_sbs(struct mddev *mddev, int nospares)
2731 {
2732 	/* Update each superblock (in-memory image), but
2733 	 * if we are allowed to, skip spares which already
2734 	 * have the right event counter, or have one earlier
2735 	 * (which would mean they aren't being marked as dirty
2736 	 * with the rest of the array)
2737 	 */
2738 	struct md_rdev *rdev;
2739 	rdev_for_each(rdev, mddev) {
2740 		if (rdev->sb_events == mddev->events ||
2741 		    (nospares &&
2742 		     rdev->raid_disk < 0 &&
2743 		     rdev->sb_events+1 == mddev->events)) {
2744 			/* Don't update this superblock */
2745 			rdev->sb_loaded = 2;
2746 		} else {
2747 			sync_super(mddev, rdev);
2748 			rdev->sb_loaded = 1;
2749 		}
2750 	}
2751 }
2752 
does_sb_need_changing(struct mddev * mddev)2753 static bool does_sb_need_changing(struct mddev *mddev)
2754 {
2755 	struct md_rdev *rdev = NULL, *iter;
2756 	struct mdp_superblock_1 *sb;
2757 	int role;
2758 
2759 	/* Find a good rdev */
2760 	rdev_for_each(iter, mddev)
2761 		if ((iter->raid_disk >= 0) && !test_bit(Faulty, &iter->flags)) {
2762 			rdev = iter;
2763 			break;
2764 		}
2765 
2766 	/* No good device found. */
2767 	if (!rdev)
2768 		return false;
2769 
2770 	sb = page_address(rdev->sb_page);
2771 	/* Check if a device has become faulty or a spare become active */
2772 	rdev_for_each(rdev, mddev) {
2773 		role = le16_to_cpu(sb->dev_roles[rdev->desc_nr]);
2774 		/* Device activated? */
2775 		if (role == MD_DISK_ROLE_SPARE && rdev->raid_disk >= 0 &&
2776 		    !test_bit(Faulty, &rdev->flags))
2777 			return true;
2778 		/* Device turned faulty? */
2779 		if (test_bit(Faulty, &rdev->flags) && (role < MD_DISK_ROLE_MAX))
2780 			return true;
2781 	}
2782 
2783 	/* Check if any mddev parameters have changed */
2784 	if ((mddev->dev_sectors != le64_to_cpu(sb->size)) ||
2785 	    (mddev->reshape_position != le64_to_cpu(sb->reshape_position)) ||
2786 	    (mddev->layout != le32_to_cpu(sb->layout)) ||
2787 	    (mddev->raid_disks != le32_to_cpu(sb->raid_disks)) ||
2788 	    (mddev->chunk_sectors != le32_to_cpu(sb->chunksize)))
2789 		return true;
2790 
2791 	return false;
2792 }
2793 
md_update_sb(struct mddev * mddev,int force_change)2794 void md_update_sb(struct mddev *mddev, int force_change)
2795 {
2796 	struct md_rdev *rdev;
2797 	int sync_req;
2798 	int nospares = 0;
2799 	int any_badblocks_changed = 0;
2800 	int ret = -1;
2801 
2802 	if (!md_is_rdwr(mddev)) {
2803 		if (force_change)
2804 			set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags);
2805 		if (!mddev_is_dm(mddev))
2806 			pr_err_ratelimited("%s: can't update sb for read-only array %s\n",
2807 					   __func__, mdname(mddev));
2808 		return;
2809 	}
2810 
2811 repeat:
2812 	if (mddev_is_clustered(mddev)) {
2813 		if (test_and_clear_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags))
2814 			force_change = 1;
2815 		if (test_and_clear_bit(MD_SB_CHANGE_CLEAN, &mddev->sb_flags))
2816 			nospares = 1;
2817 		ret = mddev->cluster_ops->metadata_update_start(mddev);
2818 		/* Has someone else has updated the sb */
2819 		if (!does_sb_need_changing(mddev)) {
2820 			if (ret == 0)
2821 				mddev->cluster_ops->metadata_update_cancel(mddev);
2822 			bit_clear_unless(&mddev->sb_flags, BIT(MD_SB_CHANGE_PENDING),
2823 							 BIT(MD_SB_CHANGE_DEVS) |
2824 							 BIT(MD_SB_CHANGE_CLEAN));
2825 			return;
2826 		}
2827 	}
2828 
2829 	/*
2830 	 * First make sure individual recovery_offsets are correct
2831 	 * curr_resync_completed can only be used during recovery.
2832 	 * During reshape/resync it might use array-addresses rather
2833 	 * that device addresses.
2834 	 */
2835 	rdev_for_each(rdev, mddev) {
2836 		if (rdev->raid_disk >= 0 &&
2837 		    mddev->delta_disks >= 0 &&
2838 		    test_bit(MD_RECOVERY_RUNNING, &mddev->recovery) &&
2839 		    test_bit(MD_RECOVERY_RECOVER, &mddev->recovery) &&
2840 		    !test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery) &&
2841 		    !test_bit(Journal, &rdev->flags) &&
2842 		    !test_bit(In_sync, &rdev->flags) &&
2843 		    mddev->curr_resync_completed > rdev->recovery_offset)
2844 				rdev->recovery_offset = mddev->curr_resync_completed;
2845 
2846 	}
2847 	if (!mddev->persistent) {
2848 		clear_bit(MD_SB_CHANGE_CLEAN, &mddev->sb_flags);
2849 		clear_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags);
2850 		if (!mddev->external) {
2851 			clear_bit(MD_SB_CHANGE_PENDING, &mddev->sb_flags);
2852 			rdev_for_each(rdev, mddev) {
2853 				if (rdev->badblocks.changed) {
2854 					rdev->badblocks.changed = 0;
2855 					ack_all_badblocks(&rdev->badblocks);
2856 					md_error(mddev, rdev);
2857 				}
2858 				clear_bit(Blocked, &rdev->flags);
2859 				clear_bit(BlockedBadBlocks, &rdev->flags);
2860 				wake_up(&rdev->blocked_wait);
2861 			}
2862 		}
2863 		wake_up(&mddev->sb_wait);
2864 		return;
2865 	}
2866 
2867 	spin_lock(&mddev->lock);
2868 
2869 	mddev->utime = ktime_get_real_seconds();
2870 
2871 	if (test_and_clear_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags))
2872 		force_change = 1;
2873 	if (test_and_clear_bit(MD_SB_CHANGE_CLEAN, &mddev->sb_flags))
2874 		/* just a clean<-> dirty transition, possibly leave spares alone,
2875 		 * though if events isn't the right even/odd, we will have to do
2876 		 * spares after all
2877 		 */
2878 		nospares = 1;
2879 	if (force_change)
2880 		nospares = 0;
2881 	if (mddev->degraded)
2882 		/* If the array is degraded, then skipping spares is both
2883 		 * dangerous and fairly pointless.
2884 		 * Dangerous because a device that was removed from the array
2885 		 * might have a event_count that still looks up-to-date,
2886 		 * so it can be re-added without a resync.
2887 		 * Pointless because if there are any spares to skip,
2888 		 * then a recovery will happen and soon that array won't
2889 		 * be degraded any more and the spare can go back to sleep then.
2890 		 */
2891 		nospares = 0;
2892 
2893 	sync_req = mddev->in_sync;
2894 
2895 	/* If this is just a dirty<->clean transition, and the array is clean
2896 	 * and 'events' is odd, we can roll back to the previous clean state */
2897 	if (nospares
2898 	    && (mddev->in_sync && mddev->resync_offset == MaxSector)
2899 	    && mddev->can_decrease_events
2900 	    && mddev->events != 1) {
2901 		mddev->events--;
2902 		mddev->can_decrease_events = 0;
2903 	} else {
2904 		/* otherwise we have to go forward and ... */
2905 		mddev->events ++;
2906 		mddev->can_decrease_events = nospares;
2907 	}
2908 
2909 	/*
2910 	 * This 64-bit counter should never wrap.
2911 	 * Either we are in around ~1 trillion A.C., assuming
2912 	 * 1 reboot per second, or we have a bug...
2913 	 */
2914 	WARN_ON(mddev->events == 0);
2915 
2916 	rdev_for_each(rdev, mddev) {
2917 		if (rdev->badblocks.changed)
2918 			any_badblocks_changed++;
2919 		if (test_bit(Faulty, &rdev->flags))
2920 			set_bit(FaultRecorded, &rdev->flags);
2921 	}
2922 
2923 	sync_sbs(mddev, nospares);
2924 	spin_unlock(&mddev->lock);
2925 
2926 	pr_debug("md: updating %s RAID superblock on device (in sync %d)\n",
2927 		 mdname(mddev), mddev->in_sync);
2928 
2929 	mddev_add_trace_msg(mddev, "md md_update_sb");
2930 rewrite:
2931 	if (md_bitmap_enabled(mddev, false))
2932 		mddev->bitmap_ops->update_sb(mddev->bitmap);
2933 	rdev_for_each(rdev, mddev) {
2934 		if (rdev->sb_loaded != 1)
2935 			continue; /* no noise on spare devices */
2936 
2937 		if (!test_bit(Faulty, &rdev->flags)) {
2938 			md_write_metadata(mddev, rdev, rdev->sb_start,
2939 					  rdev->sb_size, rdev->sb_page, 0);
2940 			pr_debug("md: (write) %pg's sb offset: %llu\n",
2941 				 rdev->bdev,
2942 				 (unsigned long long)rdev->sb_start);
2943 			rdev->sb_events = mddev->events;
2944 			if (rdev->badblocks.size) {
2945 				md_write_metadata(mddev, rdev,
2946 						  rdev->badblocks.sector,
2947 						  rdev->badblocks.size << 9,
2948 						  rdev->bb_page, 0);
2949 				rdev->badblocks.size = 0;
2950 			}
2951 
2952 		} else
2953 			pr_debug("md: %pg (skipping faulty)\n",
2954 				 rdev->bdev);
2955 	}
2956 	if (md_super_wait(mddev) < 0)
2957 		goto rewrite;
2958 	/* if there was a failure, MD_SB_CHANGE_DEVS was set, and we re-write super */
2959 
2960 	if (mddev_is_clustered(mddev) && ret == 0)
2961 		mddev->cluster_ops->metadata_update_finish(mddev);
2962 
2963 	if (mddev->in_sync != sync_req ||
2964 	    !bit_clear_unless(&mddev->sb_flags, BIT(MD_SB_CHANGE_PENDING),
2965 			       BIT(MD_SB_CHANGE_DEVS) | BIT(MD_SB_CHANGE_CLEAN)))
2966 		/* have to write it out again */
2967 		goto repeat;
2968 	wake_up(&mddev->sb_wait);
2969 	if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery))
2970 		sysfs_notify_dirent_safe(mddev->sysfs_completed);
2971 
2972 	rdev_for_each(rdev, mddev) {
2973 		if (test_and_clear_bit(FaultRecorded, &rdev->flags))
2974 			clear_bit(Blocked, &rdev->flags);
2975 
2976 		if (any_badblocks_changed)
2977 			ack_all_badblocks(&rdev->badblocks);
2978 		clear_bit(BlockedBadBlocks, &rdev->flags);
2979 		wake_up(&rdev->blocked_wait);
2980 	}
2981 }
2982 EXPORT_SYMBOL(md_update_sb);
2983 
add_bound_rdev(struct md_rdev * rdev)2984 static int add_bound_rdev(struct md_rdev *rdev)
2985 {
2986 	struct mddev *mddev = rdev->mddev;
2987 	int err = 0;
2988 	bool add_journal = test_bit(Journal, &rdev->flags);
2989 
2990 	if (!mddev->pers->hot_remove_disk || add_journal) {
2991 		/* If there is hot_add_disk but no hot_remove_disk
2992 		 * then added disks for geometry changes,
2993 		 * and should be added immediately.
2994 		 */
2995 		super_types[mddev->major_version].
2996 			validate_super(mddev, NULL/*freshest*/, rdev);
2997 		err = mddev->pers->hot_add_disk(mddev, rdev);
2998 		if (err) {
2999 			md_kick_rdev_from_array(rdev);
3000 			return err;
3001 		}
3002 	}
3003 	sysfs_notify_dirent_safe(rdev->sysfs_state);
3004 
3005 	set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags);
3006 	if (mddev->degraded)
3007 		set_bit(MD_RECOVERY_RECOVER, &mddev->recovery);
3008 	set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
3009 	md_new_event();
3010 	return 0;
3011 }
3012 
3013 /* words written to sysfs files may, or may not, be \n terminated.
3014  * We want to accept with case. For this we use cmd_match.
3015  */
cmd_match(const char * cmd,const char * str)3016 static int cmd_match(const char *cmd, const char *str)
3017 {
3018 	/* See if cmd, written into a sysfs file, matches
3019 	 * str.  They must either be the same, or cmd can
3020 	 * have a trailing newline
3021 	 */
3022 	while (*cmd && *str && *cmd == *str) {
3023 		cmd++;
3024 		str++;
3025 	}
3026 	if (*cmd == '\n')
3027 		cmd++;
3028 	if (*str || *cmd)
3029 		return 0;
3030 	return 1;
3031 }
3032 
3033 struct rdev_sysfs_entry {
3034 	struct attribute attr;
3035 	ssize_t (*show)(struct md_rdev *, char *);
3036 	ssize_t (*store)(struct md_rdev *, const char *, size_t);
3037 };
3038 
3039 static ssize_t
state_show(struct md_rdev * rdev,char * page)3040 state_show(struct md_rdev *rdev, char *page)
3041 {
3042 	char *sep = ",";
3043 	size_t len = 0;
3044 	unsigned long flags = READ_ONCE(rdev->flags);
3045 
3046 	if (test_bit(Faulty, &flags) ||
3047 	    (!test_bit(ExternalBbl, &flags) &&
3048 	    rdev->badblocks.unacked_exist))
3049 		len += sprintf(page+len, "faulty%s", sep);
3050 	if (test_bit(In_sync, &flags))
3051 		len += sprintf(page+len, "in_sync%s", sep);
3052 	if (test_bit(Journal, &flags))
3053 		len += sprintf(page+len, "journal%s", sep);
3054 	if (test_bit(WriteMostly, &flags))
3055 		len += sprintf(page+len, "write_mostly%s", sep);
3056 	if (test_bit(Blocked, &flags) ||
3057 	    (rdev->badblocks.unacked_exist
3058 	     && !test_bit(Faulty, &flags)))
3059 		len += sprintf(page+len, "blocked%s", sep);
3060 	if (!test_bit(Faulty, &flags) &&
3061 	    !test_bit(Journal, &flags) &&
3062 	    !test_bit(In_sync, &flags))
3063 		len += sprintf(page+len, "spare%s", sep);
3064 	if (test_bit(WriteErrorSeen, &flags))
3065 		len += sprintf(page+len, "write_error%s", sep);
3066 	if (test_bit(WantReplacement, &flags))
3067 		len += sprintf(page+len, "want_replacement%s", sep);
3068 	if (test_bit(Replacement, &flags))
3069 		len += sprintf(page+len, "replacement%s", sep);
3070 	if (test_bit(ExternalBbl, &flags))
3071 		len += sprintf(page+len, "external_bbl%s", sep);
3072 	if (test_bit(FailFast, &flags))
3073 		len += sprintf(page+len, "failfast%s", sep);
3074 
3075 	if (len)
3076 		len -= strlen(sep);
3077 
3078 	return len+sprintf(page+len, "\n");
3079 }
3080 
3081 static ssize_t
state_store(struct md_rdev * rdev,const char * buf,size_t len)3082 state_store(struct md_rdev *rdev, const char *buf, size_t len)
3083 {
3084 	/* can write
3085 	 *  faulty  - simulates an error
3086 	 *  remove  - disconnects the device
3087 	 *  writemostly - sets write_mostly
3088 	 *  -writemostly - clears write_mostly
3089 	 *  blocked - sets the Blocked flags
3090 	 *  -blocked - clears the Blocked and possibly simulates an error
3091 	 *  insync - sets Insync providing device isn't active
3092 	 *  -insync - clear Insync for a device with a slot assigned,
3093 	 *            so that it gets rebuilt based on bitmap
3094 	 *  write_error - sets WriteErrorSeen
3095 	 *  -write_error - clears WriteErrorSeen
3096 	 *  {,-}failfast - set/clear FailFast
3097 	 */
3098 
3099 	struct mddev *mddev = rdev->mddev;
3100 	int err = -EINVAL;
3101 	bool need_update_sb = false;
3102 
3103 	if (cmd_match(buf, "faulty") && rdev->mddev->pers) {
3104 		md_error(rdev->mddev, rdev);
3105 
3106 		if (test_bit(MD_BROKEN, &rdev->mddev->flags))
3107 			err = -EBUSY;
3108 		else
3109 			err = 0;
3110 	} else if (cmd_match(buf, "remove")) {
3111 		if (rdev->mddev->pers) {
3112 			clear_bit(Blocked, &rdev->flags);
3113 			remove_and_add_spares(rdev->mddev, rdev);
3114 		}
3115 		if (rdev->raid_disk >= 0)
3116 			err = -EBUSY;
3117 		else {
3118 			err = 0;
3119 			if (mddev_is_clustered(mddev))
3120 				err = mddev->cluster_ops->remove_disk(mddev, rdev);
3121 
3122 			if (err == 0) {
3123 				md_kick_rdev_from_array(rdev);
3124 				if (mddev->pers)
3125 					set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags);
3126 				md_new_event();
3127 			}
3128 		}
3129 	} else if (cmd_match(buf, "writemostly")) {
3130 		set_bit(WriteMostly, &rdev->flags);
3131 		mddev_create_serial_pool(rdev->mddev, rdev);
3132 		need_update_sb = true;
3133 		err = 0;
3134 	} else if (cmd_match(buf, "-writemostly")) {
3135 		mddev_destroy_serial_pool(rdev->mddev, rdev);
3136 		clear_bit(WriteMostly, &rdev->flags);
3137 		need_update_sb = true;
3138 		err = 0;
3139 	} else if (cmd_match(buf, "blocked")) {
3140 		set_bit(Blocked, &rdev->flags);
3141 		err = 0;
3142 	} else if (cmd_match(buf, "-blocked")) {
3143 		if (!test_bit(Faulty, &rdev->flags) &&
3144 		    !test_bit(ExternalBbl, &rdev->flags) &&
3145 		    rdev->badblocks.unacked_exist) {
3146 			/* metadata handler doesn't understand badblocks,
3147 			 * so we need to fail the device
3148 			 */
3149 			md_error(rdev->mddev, rdev);
3150 		}
3151 		clear_bit(Blocked, &rdev->flags);
3152 		clear_bit(BlockedBadBlocks, &rdev->flags);
3153 		wake_up(&rdev->blocked_wait);
3154 		set_bit(MD_RECOVERY_NEEDED, &rdev->mddev->recovery);
3155 
3156 		err = 0;
3157 	} else if (cmd_match(buf, "insync") && rdev->raid_disk == -1) {
3158 		set_bit(In_sync, &rdev->flags);
3159 		err = 0;
3160 	} else if (cmd_match(buf, "failfast")) {
3161 		set_bit(FailFast, &rdev->flags);
3162 		need_update_sb = true;
3163 		err = 0;
3164 	} else if (cmd_match(buf, "-failfast")) {
3165 		clear_bit(FailFast, &rdev->flags);
3166 		need_update_sb = true;
3167 		err = 0;
3168 	} else if (cmd_match(buf, "-insync") && rdev->raid_disk >= 0 &&
3169 		   !test_bit(Journal, &rdev->flags)) {
3170 		if (rdev->mddev->pers == NULL) {
3171 			clear_bit(In_sync, &rdev->flags);
3172 			rdev->saved_raid_disk = rdev->raid_disk;
3173 			rdev->raid_disk = -1;
3174 			err = 0;
3175 		}
3176 	} else if (cmd_match(buf, "write_error")) {
3177 		set_bit(WriteErrorSeen, &rdev->flags);
3178 		err = 0;
3179 	} else if (cmd_match(buf, "-write_error")) {
3180 		clear_bit(WriteErrorSeen, &rdev->flags);
3181 		err = 0;
3182 	} else if (cmd_match(buf, "want_replacement")) {
3183 		/* Any non-spare device that is not a replacement can
3184 		 * become want_replacement at any time, but we then need to
3185 		 * check if recovery is needed.
3186 		 */
3187 		if (rdev->raid_disk >= 0 &&
3188 		    !test_bit(Journal, &rdev->flags) &&
3189 		    !test_bit(Replacement, &rdev->flags))
3190 			set_bit(WantReplacement, &rdev->flags);
3191 		set_bit(MD_RECOVERY_NEEDED, &rdev->mddev->recovery);
3192 		err = 0;
3193 	} else if (cmd_match(buf, "-want_replacement")) {
3194 		/* Clearing 'want_replacement' is always allowed.
3195 		 * Once replacements starts it is too late though.
3196 		 */
3197 		err = 0;
3198 		clear_bit(WantReplacement, &rdev->flags);
3199 	} else if (cmd_match(buf, "replacement")) {
3200 		/* Can only set a device as a replacement when array has not
3201 		 * yet been started.  Once running, replacement is automatic
3202 		 * from spares, or by assigning 'slot'.
3203 		 */
3204 		if (rdev->mddev->pers)
3205 			err = -EBUSY;
3206 		else {
3207 			set_bit(Replacement, &rdev->flags);
3208 			err = 0;
3209 		}
3210 	} else if (cmd_match(buf, "-replacement")) {
3211 		/* Similarly, can only clear Replacement before start */
3212 		if (rdev->mddev->pers)
3213 			err = -EBUSY;
3214 		else {
3215 			clear_bit(Replacement, &rdev->flags);
3216 			err = 0;
3217 		}
3218 	} else if (cmd_match(buf, "re-add")) {
3219 		if (!rdev->mddev->pers)
3220 			err = -EINVAL;
3221 		else if (test_bit(Faulty, &rdev->flags) && (rdev->raid_disk == -1) &&
3222 				rdev->saved_raid_disk >= 0) {
3223 			/* clear_bit is performed _after_ all the devices
3224 			 * have their local Faulty bit cleared. If any writes
3225 			 * happen in the meantime in the local node, they
3226 			 * will land in the local bitmap, which will be synced
3227 			 * by this node eventually
3228 			 */
3229 			if (!mddev_is_clustered(rdev->mddev) ||
3230 			    (err = mddev->cluster_ops->gather_bitmaps(rdev)) == 0) {
3231 				clear_bit(Faulty, &rdev->flags);
3232 				err = add_bound_rdev(rdev);
3233 			}
3234 		} else
3235 			err = -EBUSY;
3236 	} else if (cmd_match(buf, "external_bbl") && (rdev->mddev->external)) {
3237 		set_bit(ExternalBbl, &rdev->flags);
3238 		rdev->badblocks.shift = 0;
3239 		err = 0;
3240 	} else if (cmd_match(buf, "-external_bbl") && (rdev->mddev->external)) {
3241 		clear_bit(ExternalBbl, &rdev->flags);
3242 		err = 0;
3243 	}
3244 	if (need_update_sb)
3245 		md_update_sb(mddev, 1);
3246 	if (!err)
3247 		sysfs_notify_dirent_safe(rdev->sysfs_state);
3248 	return err ? err : len;
3249 }
3250 static struct rdev_sysfs_entry rdev_state =
3251 __ATTR_PREALLOC(state, S_IRUGO|S_IWUSR, state_show, state_store);
3252 
3253 static ssize_t
errors_show(struct md_rdev * rdev,char * page)3254 errors_show(struct md_rdev *rdev, char *page)
3255 {
3256 	return sprintf(page, "%d\n", atomic_read(&rdev->corrected_errors));
3257 }
3258 
3259 static ssize_t
errors_store(struct md_rdev * rdev,const char * buf,size_t len)3260 errors_store(struct md_rdev *rdev, const char *buf, size_t len)
3261 {
3262 	unsigned int n;
3263 	int rv;
3264 
3265 	rv = kstrtouint(buf, 10, &n);
3266 	if (rv < 0)
3267 		return rv;
3268 	atomic_set(&rdev->corrected_errors, n);
3269 	return len;
3270 }
3271 static struct rdev_sysfs_entry rdev_errors =
3272 __ATTR(errors, S_IRUGO|S_IWUSR, errors_show, errors_store);
3273 
3274 static ssize_t
slot_show(struct md_rdev * rdev,char * page)3275 slot_show(struct md_rdev *rdev, char *page)
3276 {
3277 	if (test_bit(Journal, &rdev->flags))
3278 		return sprintf(page, "journal\n");
3279 	else if (rdev->raid_disk < 0)
3280 		return sprintf(page, "none\n");
3281 	else
3282 		return sprintf(page, "%d\n", rdev->raid_disk);
3283 }
3284 
3285 static ssize_t
slot_store(struct md_rdev * rdev,const char * buf,size_t len)3286 slot_store(struct md_rdev *rdev, const char *buf, size_t len)
3287 {
3288 	int slot;
3289 	int err;
3290 
3291 	if (test_bit(Journal, &rdev->flags))
3292 		return -EBUSY;
3293 	if (strncmp(buf, "none", 4)==0)
3294 		slot = -1;
3295 	else {
3296 		err = kstrtouint(buf, 10, (unsigned int *)&slot);
3297 		if (err < 0)
3298 			return err;
3299 		if (slot < 0)
3300 			/* overflow */
3301 			return -ENOSPC;
3302 	}
3303 	if (rdev->mddev->pers && slot == -1) {
3304 		/* Setting 'slot' on an active array requires also
3305 		 * updating the 'rd%d' link, and communicating
3306 		 * with the personality with ->hot_*_disk.
3307 		 * For now we only support removing
3308 		 * failed/spare devices.  This normally happens automatically,
3309 		 * but not when the metadata is externally managed.
3310 		 */
3311 		if (rdev->raid_disk == -1)
3312 			return -EEXIST;
3313 		/* personality does all needed checks */
3314 		if (rdev->mddev->pers->hot_remove_disk == NULL)
3315 			return -EINVAL;
3316 		clear_bit(Blocked, &rdev->flags);
3317 		remove_and_add_spares(rdev->mddev, rdev);
3318 		if (rdev->raid_disk >= 0)
3319 			return -EBUSY;
3320 		set_bit(MD_RECOVERY_NEEDED, &rdev->mddev->recovery);
3321 	} else if (rdev->mddev->pers) {
3322 		/* Activating a spare .. or possibly reactivating
3323 		 * if we ever get bitmaps working here.
3324 		 */
3325 		int err;
3326 
3327 		if (rdev->raid_disk != -1)
3328 			return -EBUSY;
3329 
3330 		if (test_bit(MD_RECOVERY_RUNNING, &rdev->mddev->recovery))
3331 			return -EBUSY;
3332 
3333 		if (rdev->mddev->pers->hot_add_disk == NULL)
3334 			return -EINVAL;
3335 
3336 		if (slot >= rdev->mddev->raid_disks &&
3337 		    slot >= rdev->mddev->raid_disks + rdev->mddev->delta_disks)
3338 			return -ENOSPC;
3339 
3340 		rdev->raid_disk = slot;
3341 		if (test_bit(In_sync, &rdev->flags))
3342 			rdev->saved_raid_disk = slot;
3343 		else
3344 			rdev->saved_raid_disk = -1;
3345 		clear_bit(In_sync, &rdev->flags);
3346 		clear_bit(Bitmap_sync, &rdev->flags);
3347 		err = rdev->mddev->pers->hot_add_disk(rdev->mddev, rdev);
3348 		if (err) {
3349 			rdev->raid_disk = -1;
3350 			return err;
3351 		} else
3352 			sysfs_notify_dirent_safe(rdev->sysfs_state);
3353 		/* failure here is OK */;
3354 		sysfs_link_rdev(rdev->mddev, rdev);
3355 		/* don't wakeup anyone, leave that to userspace. */
3356 	} else {
3357 		if (slot >= rdev->mddev->raid_disks &&
3358 		    slot >= rdev->mddev->raid_disks + rdev->mddev->delta_disks)
3359 			return -ENOSPC;
3360 		rdev->raid_disk = slot;
3361 		/* assume it is working */
3362 		clear_bit(Faulty, &rdev->flags);
3363 		clear_bit(WriteMostly, &rdev->flags);
3364 		set_bit(In_sync, &rdev->flags);
3365 		sysfs_notify_dirent_safe(rdev->sysfs_state);
3366 	}
3367 	return len;
3368 }
3369 
3370 static struct rdev_sysfs_entry rdev_slot =
3371 __ATTR(slot, S_IRUGO|S_IWUSR, slot_show, slot_store);
3372 
3373 static ssize_t
offset_show(struct md_rdev * rdev,char * page)3374 offset_show(struct md_rdev *rdev, char *page)
3375 {
3376 	return sprintf(page, "%llu\n", (unsigned long long)rdev->data_offset);
3377 }
3378 
3379 static ssize_t
offset_store(struct md_rdev * rdev,const char * buf,size_t len)3380 offset_store(struct md_rdev *rdev, const char *buf, size_t len)
3381 {
3382 	unsigned long long offset;
3383 	if (kstrtoull(buf, 10, &offset) < 0)
3384 		return -EINVAL;
3385 	if (rdev->mddev->pers && rdev->raid_disk >= 0)
3386 		return -EBUSY;
3387 	if (rdev->sectors && rdev->mddev->external)
3388 		/* Must set offset before size, so overlap checks
3389 		 * can be sane */
3390 		return -EBUSY;
3391 	rdev->data_offset = offset;
3392 	rdev->new_data_offset = offset;
3393 	return len;
3394 }
3395 
3396 static struct rdev_sysfs_entry rdev_offset =
3397 __ATTR(offset, S_IRUGO|S_IWUSR, offset_show, offset_store);
3398 
new_offset_show(struct md_rdev * rdev,char * page)3399 static ssize_t new_offset_show(struct md_rdev *rdev, char *page)
3400 {
3401 	return sprintf(page, "%llu\n",
3402 		       (unsigned long long)rdev->new_data_offset);
3403 }
3404 
new_offset_store(struct md_rdev * rdev,const char * buf,size_t len)3405 static ssize_t new_offset_store(struct md_rdev *rdev,
3406 				const char *buf, size_t len)
3407 {
3408 	unsigned long long new_offset;
3409 	struct mddev *mddev = rdev->mddev;
3410 
3411 	if (kstrtoull(buf, 10, &new_offset) < 0)
3412 		return -EINVAL;
3413 
3414 	if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery))
3415 		return -EBUSY;
3416 	if (new_offset == rdev->data_offset)
3417 		/* reset is always permitted */
3418 		;
3419 	else if (new_offset > rdev->data_offset) {
3420 		/* must not push array size beyond rdev_sectors */
3421 		if (new_offset - rdev->data_offset
3422 		    + mddev->dev_sectors > rdev->sectors)
3423 				return -E2BIG;
3424 	}
3425 	/* Metadata worries about other space details. */
3426 
3427 	/* decreasing the offset is inconsistent with a backwards
3428 	 * reshape.
3429 	 */
3430 	if (new_offset < rdev->data_offset &&
3431 	    mddev->reshape_backwards)
3432 		return -EINVAL;
3433 	/* Increasing offset is inconsistent with forwards
3434 	 * reshape.  reshape_direction should be set to
3435 	 * 'backwards' first.
3436 	 */
3437 	if (new_offset > rdev->data_offset &&
3438 	    !mddev->reshape_backwards)
3439 		return -EINVAL;
3440 
3441 	if (mddev->pers && mddev->persistent &&
3442 	    !super_types[mddev->major_version]
3443 	    .allow_new_offset(rdev, new_offset))
3444 		return -E2BIG;
3445 	rdev->new_data_offset = new_offset;
3446 	if (new_offset > rdev->data_offset)
3447 		mddev->reshape_backwards = 1;
3448 	else if (new_offset < rdev->data_offset)
3449 		mddev->reshape_backwards = 0;
3450 
3451 	return len;
3452 }
3453 static struct rdev_sysfs_entry rdev_new_offset =
3454 __ATTR(new_offset, S_IRUGO|S_IWUSR, new_offset_show, new_offset_store);
3455 
3456 static ssize_t
rdev_size_show(struct md_rdev * rdev,char * page)3457 rdev_size_show(struct md_rdev *rdev, char *page)
3458 {
3459 	return sprintf(page, "%llu\n", (unsigned long long)rdev->sectors / 2);
3460 }
3461 
md_rdevs_overlap(struct md_rdev * a,struct md_rdev * b)3462 static int md_rdevs_overlap(struct md_rdev *a, struct md_rdev *b)
3463 {
3464 	/* check if two start/length pairs overlap */
3465 	if (a->data_offset + a->sectors <= b->data_offset)
3466 		return false;
3467 	if (b->data_offset + b->sectors <= a->data_offset)
3468 		return false;
3469 	return true;
3470 }
3471 
md_rdev_overlaps(struct md_rdev * rdev)3472 static bool md_rdev_overlaps(struct md_rdev *rdev)
3473 {
3474 	struct mddev *mddev;
3475 	struct md_rdev *rdev2;
3476 
3477 	spin_lock(&all_mddevs_lock);
3478 	list_for_each_entry(mddev, &all_mddevs, all_mddevs) {
3479 		if (test_bit(MD_DELETED, &mddev->flags))
3480 			continue;
3481 		rdev_for_each(rdev2, mddev) {
3482 			if (rdev != rdev2 && rdev->bdev == rdev2->bdev &&
3483 			    md_rdevs_overlap(rdev, rdev2)) {
3484 				spin_unlock(&all_mddevs_lock);
3485 				return true;
3486 			}
3487 		}
3488 	}
3489 	spin_unlock(&all_mddevs_lock);
3490 	return false;
3491 }
3492 
strict_blocks_to_sectors(const char * buf,sector_t * sectors)3493 static int strict_blocks_to_sectors(const char *buf, sector_t *sectors)
3494 {
3495 	unsigned long long blocks;
3496 	sector_t new;
3497 
3498 	if (kstrtoull(buf, 10, &blocks) < 0)
3499 		return -EINVAL;
3500 
3501 	if (blocks & 1ULL << (8 * sizeof(blocks) - 1))
3502 		return -EINVAL; /* sector conversion overflow */
3503 
3504 	new = blocks * 2;
3505 	if (new != blocks * 2)
3506 		return -EINVAL; /* unsigned long long to sector_t overflow */
3507 
3508 	*sectors = new;
3509 	return 0;
3510 }
3511 
3512 static ssize_t
rdev_size_store(struct md_rdev * rdev,const char * buf,size_t len)3513 rdev_size_store(struct md_rdev *rdev, const char *buf, size_t len)
3514 {
3515 	struct mddev *my_mddev = rdev->mddev;
3516 	sector_t oldsectors = rdev->sectors;
3517 	sector_t sectors;
3518 
3519 	if (test_bit(Journal, &rdev->flags))
3520 		return -EBUSY;
3521 	if (strict_blocks_to_sectors(buf, &sectors) < 0)
3522 		return -EINVAL;
3523 	if (rdev->data_offset != rdev->new_data_offset)
3524 		return -EINVAL; /* too confusing */
3525 	if (my_mddev->pers && rdev->raid_disk >= 0) {
3526 		if (my_mddev->persistent) {
3527 			sectors = super_types[my_mddev->major_version].
3528 				rdev_size_change(rdev, sectors);
3529 			if (!sectors)
3530 				return -EBUSY;
3531 		} else if (!sectors)
3532 			sectors = bdev_nr_sectors(rdev->bdev) -
3533 				rdev->data_offset;
3534 		if (!my_mddev->pers->resize)
3535 			/* Cannot change size for RAID0 or Linear etc */
3536 			return -EINVAL;
3537 	}
3538 	if (sectors < my_mddev->dev_sectors)
3539 		return -EINVAL; /* component must fit device */
3540 
3541 	rdev->sectors = sectors;
3542 
3543 	/*
3544 	 * Check that all other rdevs with the same bdev do not overlap.  This
3545 	 * check does not provide a hard guarantee, it just helps avoid
3546 	 * dangerous mistakes.
3547 	 */
3548 	if (sectors > oldsectors && my_mddev->external &&
3549 	    md_rdev_overlaps(rdev)) {
3550 		/*
3551 		 * Someone else could have slipped in a size change here, but
3552 		 * doing so is just silly.  We put oldsectors back because we
3553 		 * know it is safe, and trust userspace not to race with itself.
3554 		 */
3555 		rdev->sectors = oldsectors;
3556 		return -EBUSY;
3557 	}
3558 	return len;
3559 }
3560 
3561 static struct rdev_sysfs_entry rdev_size =
3562 __ATTR(size, S_IRUGO|S_IWUSR, rdev_size_show, rdev_size_store);
3563 
recovery_start_show(struct md_rdev * rdev,char * page)3564 static ssize_t recovery_start_show(struct md_rdev *rdev, char *page)
3565 {
3566 	unsigned long long recovery_start = rdev->recovery_offset;
3567 
3568 	if (test_bit(In_sync, &rdev->flags) ||
3569 	    recovery_start == MaxSector)
3570 		return sprintf(page, "none\n");
3571 
3572 	return sprintf(page, "%llu\n", recovery_start);
3573 }
3574 
recovery_start_store(struct md_rdev * rdev,const char * buf,size_t len)3575 static ssize_t recovery_start_store(struct md_rdev *rdev, const char *buf, size_t len)
3576 {
3577 	unsigned long long recovery_start;
3578 
3579 	if (cmd_match(buf, "none"))
3580 		recovery_start = MaxSector;
3581 	else if (kstrtoull(buf, 10, &recovery_start))
3582 		return -EINVAL;
3583 
3584 	if (rdev->mddev->pers &&
3585 	    rdev->raid_disk >= 0)
3586 		return -EBUSY;
3587 
3588 	rdev->recovery_offset = recovery_start;
3589 	if (recovery_start == MaxSector)
3590 		set_bit(In_sync, &rdev->flags);
3591 	else
3592 		clear_bit(In_sync, &rdev->flags);
3593 	return len;
3594 }
3595 
3596 static struct rdev_sysfs_entry rdev_recovery_start =
3597 __ATTR(recovery_start, S_IRUGO|S_IWUSR, recovery_start_show, recovery_start_store);
3598 
3599 /* sysfs access to bad-blocks list.
3600  * We present two files.
3601  * 'bad-blocks' lists sector numbers and lengths of ranges that
3602  *    are recorded as bad.  The list is truncated to fit within
3603  *    the one-page limit of sysfs.
3604  *    Writing "sector length" to this file adds an acknowledged
3605  *    bad block list.
3606  * 'unacknowledged-bad-blocks' lists bad blocks that have not yet
3607  *    been acknowledged.  Writing to this file adds bad blocks
3608  *    without acknowledging them.  This is largely for testing.
3609  */
bb_show(struct md_rdev * rdev,char * page)3610 static ssize_t bb_show(struct md_rdev *rdev, char *page)
3611 {
3612 	return badblocks_show(&rdev->badblocks, page, 0);
3613 }
bb_store(struct md_rdev * rdev,const char * page,size_t len)3614 static ssize_t bb_store(struct md_rdev *rdev, const char *page, size_t len)
3615 {
3616 	int rv = badblocks_store(&rdev->badblocks, page, len, 0);
3617 	/* Maybe that ack was all we needed */
3618 	if (test_and_clear_bit(BlockedBadBlocks, &rdev->flags))
3619 		wake_up(&rdev->blocked_wait);
3620 	return rv;
3621 }
3622 static struct rdev_sysfs_entry rdev_bad_blocks =
3623 __ATTR(bad_blocks, S_IRUGO|S_IWUSR, bb_show, bb_store);
3624 
ubb_show(struct md_rdev * rdev,char * page)3625 static ssize_t ubb_show(struct md_rdev *rdev, char *page)
3626 {
3627 	return badblocks_show(&rdev->badblocks, page, 1);
3628 }
ubb_store(struct md_rdev * rdev,const char * page,size_t len)3629 static ssize_t ubb_store(struct md_rdev *rdev, const char *page, size_t len)
3630 {
3631 	return badblocks_store(&rdev->badblocks, page, len, 1);
3632 }
3633 static struct rdev_sysfs_entry rdev_unack_bad_blocks =
3634 __ATTR(unacknowledged_bad_blocks, S_IRUGO|S_IWUSR, ubb_show, ubb_store);
3635 
3636 static ssize_t
ppl_sector_show(struct md_rdev * rdev,char * page)3637 ppl_sector_show(struct md_rdev *rdev, char *page)
3638 {
3639 	return sprintf(page, "%llu\n", (unsigned long long)rdev->ppl.sector);
3640 }
3641 
3642 static ssize_t
ppl_sector_store(struct md_rdev * rdev,const char * buf,size_t len)3643 ppl_sector_store(struct md_rdev *rdev, const char *buf, size_t len)
3644 {
3645 	unsigned long long sector;
3646 
3647 	if (kstrtoull(buf, 10, &sector) < 0)
3648 		return -EINVAL;
3649 	if (sector != (sector_t)sector)
3650 		return -EINVAL;
3651 
3652 	if (rdev->mddev->pers && test_bit(MD_HAS_PPL, &rdev->mddev->flags) &&
3653 	    rdev->raid_disk >= 0)
3654 		return -EBUSY;
3655 
3656 	if (rdev->mddev->persistent) {
3657 		if (rdev->mddev->major_version == 0)
3658 			return -EINVAL;
3659 		if ((sector > rdev->sb_start &&
3660 		     sector - rdev->sb_start > S16_MAX) ||
3661 		    (sector < rdev->sb_start &&
3662 		     rdev->sb_start - sector > -S16_MIN))
3663 			return -EINVAL;
3664 		rdev->ppl.offset = sector - rdev->sb_start;
3665 	} else if (!rdev->mddev->external) {
3666 		return -EBUSY;
3667 	}
3668 	rdev->ppl.sector = sector;
3669 	return len;
3670 }
3671 
3672 static struct rdev_sysfs_entry rdev_ppl_sector =
3673 __ATTR(ppl_sector, S_IRUGO|S_IWUSR, ppl_sector_show, ppl_sector_store);
3674 
3675 static ssize_t
ppl_size_show(struct md_rdev * rdev,char * page)3676 ppl_size_show(struct md_rdev *rdev, char *page)
3677 {
3678 	return sprintf(page, "%u\n", rdev->ppl.size);
3679 }
3680 
3681 static ssize_t
ppl_size_store(struct md_rdev * rdev,const char * buf,size_t len)3682 ppl_size_store(struct md_rdev *rdev, const char *buf, size_t len)
3683 {
3684 	unsigned int size;
3685 
3686 	if (kstrtouint(buf, 10, &size) < 0)
3687 		return -EINVAL;
3688 
3689 	if (rdev->mddev->pers && test_bit(MD_HAS_PPL, &rdev->mddev->flags) &&
3690 	    rdev->raid_disk >= 0)
3691 		return -EBUSY;
3692 
3693 	if (rdev->mddev->persistent) {
3694 		if (rdev->mddev->major_version == 0)
3695 			return -EINVAL;
3696 		if (size > U16_MAX)
3697 			return -EINVAL;
3698 	} else if (!rdev->mddev->external) {
3699 		return -EBUSY;
3700 	}
3701 	rdev->ppl.size = size;
3702 	return len;
3703 }
3704 
3705 static struct rdev_sysfs_entry rdev_ppl_size =
3706 __ATTR(ppl_size, S_IRUGO|S_IWUSR, ppl_size_show, ppl_size_store);
3707 
3708 static struct attribute *rdev_default_attrs[] = {
3709 	&rdev_state.attr,
3710 	&rdev_errors.attr,
3711 	&rdev_slot.attr,
3712 	&rdev_offset.attr,
3713 	&rdev_new_offset.attr,
3714 	&rdev_size.attr,
3715 	&rdev_recovery_start.attr,
3716 	&rdev_bad_blocks.attr,
3717 	&rdev_unack_bad_blocks.attr,
3718 	&rdev_ppl_sector.attr,
3719 	&rdev_ppl_size.attr,
3720 	NULL,
3721 };
3722 ATTRIBUTE_GROUPS(rdev_default);
3723 static ssize_t
rdev_attr_show(struct kobject * kobj,struct attribute * attr,char * page)3724 rdev_attr_show(struct kobject *kobj, struct attribute *attr, char *page)
3725 {
3726 	struct rdev_sysfs_entry *entry = container_of(attr, struct rdev_sysfs_entry, attr);
3727 	struct md_rdev *rdev = container_of(kobj, struct md_rdev, kobj);
3728 
3729 	if (!entry->show)
3730 		return -EIO;
3731 	if (!rdev->mddev)
3732 		return -ENODEV;
3733 	return entry->show(rdev, page);
3734 }
3735 
3736 static ssize_t
rdev_attr_store(struct kobject * kobj,struct attribute * attr,const char * page,size_t length)3737 rdev_attr_store(struct kobject *kobj, struct attribute *attr,
3738 	      const char *page, size_t length)
3739 {
3740 	struct rdev_sysfs_entry *entry = container_of(attr, struct rdev_sysfs_entry, attr);
3741 	struct md_rdev *rdev = container_of(kobj, struct md_rdev, kobj);
3742 	struct kernfs_node *kn = NULL;
3743 	bool suspend = false;
3744 	ssize_t rv;
3745 	struct mddev *mddev = READ_ONCE(rdev->mddev);
3746 
3747 	if (!entry->store)
3748 		return -EIO;
3749 	if (!capable(CAP_SYS_ADMIN))
3750 		return -EACCES;
3751 	if (!mddev)
3752 		return -ENODEV;
3753 
3754 	if (entry->store == state_store) {
3755 		if (cmd_match(page, "remove"))
3756 			kn = sysfs_break_active_protection(kobj, attr);
3757 		if (cmd_match(page, "remove") || cmd_match(page, "re-add") ||
3758 		    cmd_match(page, "writemostly") ||
3759 		    cmd_match(page, "-writemostly"))
3760 			suspend = true;
3761 	}
3762 
3763 	rv = suspend ? mddev_suspend_and_lock(mddev) : mddev_lock(mddev);
3764 	if (!rv) {
3765 		if (rdev->mddev == NULL)
3766 			rv = -ENODEV;
3767 		else
3768 			rv = entry->store(rdev, page, length);
3769 		suspend ? mddev_unlock_and_resume(mddev) : mddev_unlock(mddev);
3770 	}
3771 
3772 	if (kn)
3773 		sysfs_unbreak_active_protection(kn);
3774 
3775 	return rv;
3776 }
3777 
rdev_free(struct kobject * ko)3778 static void rdev_free(struct kobject *ko)
3779 {
3780 	struct md_rdev *rdev = container_of(ko, struct md_rdev, kobj);
3781 	kfree(rdev);
3782 }
3783 static const struct sysfs_ops rdev_sysfs_ops = {
3784 	.show		= rdev_attr_show,
3785 	.store		= rdev_attr_store,
3786 };
3787 static const struct kobj_type rdev_ktype = {
3788 	.release	= rdev_free,
3789 	.sysfs_ops	= &rdev_sysfs_ops,
3790 	.default_groups	= rdev_default_groups,
3791 };
3792 
md_rdev_init(struct md_rdev * rdev)3793 int md_rdev_init(struct md_rdev *rdev)
3794 {
3795 	rdev->desc_nr = -1;
3796 	rdev->saved_raid_disk = -1;
3797 	rdev->raid_disk = -1;
3798 	rdev->flags = 0;
3799 	rdev->data_offset = 0;
3800 	rdev->new_data_offset = 0;
3801 	rdev->sb_events = 0;
3802 	rdev->last_read_error = 0;
3803 	rdev->sb_loaded = 0;
3804 	rdev->bb_page = NULL;
3805 	atomic_set(&rdev->nr_pending, 0);
3806 	atomic_set(&rdev->read_errors, 0);
3807 	atomic_set(&rdev->corrected_errors, 0);
3808 
3809 	INIT_LIST_HEAD(&rdev->same_set);
3810 	init_waitqueue_head(&rdev->blocked_wait);
3811 
3812 	/* Add space to store bad block list.
3813 	 * This reserves the space even on arrays where it cannot
3814 	 * be used - I wonder if that matters
3815 	 */
3816 	return badblocks_init(&rdev->badblocks, 0);
3817 }
3818 EXPORT_SYMBOL_GPL(md_rdev_init);
3819 
3820 /*
3821  * Import a device. If 'super_format' >= 0, then sanity check the superblock
3822  *
3823  * mark the device faulty if:
3824  *
3825  *   - the device is nonexistent (zero size)
3826  *   - the device has no valid superblock
3827  *
3828  * a faulty rdev _never_ has rdev->sb set.
3829  */
md_import_device(dev_t newdev,int super_format,int super_minor)3830 static struct md_rdev *md_import_device(dev_t newdev, int super_format, int super_minor)
3831 {
3832 	struct md_rdev *rdev;
3833 	sector_t size;
3834 	int err;
3835 
3836 	rdev = kzalloc_obj(*rdev);
3837 	if (!rdev)
3838 		return ERR_PTR(-ENOMEM);
3839 
3840 	err = md_rdev_init(rdev);
3841 	if (err)
3842 		goto out_free_rdev;
3843 	err = alloc_disk_sb(rdev);
3844 	if (err)
3845 		goto out_clear_rdev;
3846 
3847 	rdev->bdev_file = bdev_file_open_by_dev(newdev,
3848 			BLK_OPEN_READ | BLK_OPEN_WRITE,
3849 			super_format == -2 ? &claim_rdev : rdev, NULL);
3850 	if (IS_ERR(rdev->bdev_file)) {
3851 		pr_warn("md: could not open device unknown-block(%u,%u).\n",
3852 			MAJOR(newdev), MINOR(newdev));
3853 		err = PTR_ERR(rdev->bdev_file);
3854 		goto out_clear_rdev;
3855 	}
3856 	rdev->bdev = file_bdev(rdev->bdev_file);
3857 
3858 	kobject_init(&rdev->kobj, &rdev_ktype);
3859 
3860 	size = bdev_nr_bytes(rdev->bdev) >> BLOCK_SIZE_BITS;
3861 	if (!size) {
3862 		pr_warn("md: %pg has zero or unknown size, marking faulty!\n",
3863 			rdev->bdev);
3864 		err = -EINVAL;
3865 		goto out_blkdev_put;
3866 	}
3867 
3868 	if (super_format >= 0) {
3869 		err = super_types[super_format].
3870 			load_super(rdev, NULL, super_minor);
3871 		if (err == -EINVAL) {
3872 			pr_warn("md: %pg does not have a valid v%d.%d superblock, not importing!\n",
3873 				rdev->bdev,
3874 				super_format, super_minor);
3875 			goto out_blkdev_put;
3876 		}
3877 		if (err < 0) {
3878 			pr_warn("md: could not read %pg's sb, not importing!\n",
3879 				rdev->bdev);
3880 			goto out_blkdev_put;
3881 		}
3882 	}
3883 
3884 	return rdev;
3885 
3886 out_blkdev_put:
3887 	fput(rdev->bdev_file);
3888 out_clear_rdev:
3889 	md_rdev_clear(rdev);
3890 out_free_rdev:
3891 	kfree(rdev);
3892 	return ERR_PTR(err);
3893 }
3894 
3895 /*
3896  * Check a full RAID array for plausibility
3897  */
3898 
analyze_sbs(struct mddev * mddev)3899 static int analyze_sbs(struct mddev *mddev)
3900 {
3901 	struct md_rdev *rdev, *freshest, *tmp;
3902 
3903 	freshest = NULL;
3904 	rdev_for_each_safe(rdev, tmp, mddev)
3905 		switch (super_types[mddev->major_version].
3906 			load_super(rdev, freshest, mddev->minor_version)) {
3907 		case 1:
3908 			freshest = rdev;
3909 			break;
3910 		case 0:
3911 			break;
3912 		default:
3913 			pr_warn("md: fatal superblock inconsistency in %pg -- removing from array\n",
3914 				rdev->bdev);
3915 			md_kick_rdev_from_array(rdev);
3916 		}
3917 
3918 	/* Cannot find a valid fresh disk */
3919 	if (!freshest) {
3920 		pr_warn("md: cannot find a valid disk\n");
3921 		return -EINVAL;
3922 	}
3923 
3924 	super_types[mddev->major_version].
3925 		validate_super(mddev, NULL/*freshest*/, freshest);
3926 
3927 	rdev_for_each_safe(rdev, tmp, mddev) {
3928 		if (mddev->max_disks &&
3929 		    rdev->desc_nr >= mddev->max_disks) {
3930 			pr_warn("md: %s: %pg: only %d devices permitted\n",
3931 				mdname(mddev), rdev->bdev,
3932 				mddev->max_disks);
3933 			md_kick_rdev_from_array(rdev);
3934 			continue;
3935 		}
3936 		if (rdev != freshest) {
3937 			if (super_types[mddev->major_version].
3938 			    validate_super(mddev, freshest, rdev)) {
3939 				pr_warn("md: kicking non-fresh %pg from array!\n",
3940 					rdev->bdev);
3941 				md_kick_rdev_from_array(rdev);
3942 				continue;
3943 			}
3944 		}
3945 		if (rdev->raid_disk >= (mddev->raid_disks - min(0, mddev->delta_disks)) &&
3946 		    !test_bit(Journal, &rdev->flags)) {
3947 			rdev->raid_disk = -1;
3948 			clear_bit(In_sync, &rdev->flags);
3949 		}
3950 	}
3951 
3952 	return 0;
3953 }
3954 
3955 /* Read a fixed-point number.
3956  * Numbers in sysfs attributes should be in "standard" units where
3957  * possible, so time should be in seconds.
3958  * However we internally use a a much smaller unit such as
3959  * milliseconds or jiffies.
3960  * This function takes a decimal number with a possible fractional
3961  * component, and produces an integer which is the result of
3962  * multiplying that number by 10^'scale'.
3963  * all without any floating-point arithmetic.
3964  */
strict_strtoul_scaled(const char * cp,unsigned long * res,int scale)3965 int strict_strtoul_scaled(const char *cp, unsigned long *res, int scale)
3966 {
3967 	unsigned long result = 0;
3968 	long decimals = -1;
3969 	while (isdigit(*cp) || (*cp == '.' && decimals < 0)) {
3970 		if (*cp == '.')
3971 			decimals = 0;
3972 		else if (decimals < scale) {
3973 			unsigned int value;
3974 			value = *cp - '0';
3975 			result = result * 10 + value;
3976 			if (decimals >= 0)
3977 				decimals++;
3978 		}
3979 		cp++;
3980 	}
3981 	if (*cp == '\n')
3982 		cp++;
3983 	if (*cp)
3984 		return -EINVAL;
3985 	if (decimals < 0)
3986 		decimals = 0;
3987 	*res = result * int_pow(10, scale - decimals);
3988 	return 0;
3989 }
3990 
3991 static ssize_t
safe_delay_show(struct mddev * mddev,char * page)3992 safe_delay_show(struct mddev *mddev, char *page)
3993 {
3994 	unsigned int msec = ((unsigned long)mddev->safemode_delay*1000)/HZ;
3995 
3996 	return sprintf(page, "%u.%03u\n", msec/1000, msec%1000);
3997 }
3998 static ssize_t
safe_delay_store(struct mddev * mddev,const char * cbuf,size_t len)3999 safe_delay_store(struct mddev *mddev, const char *cbuf, size_t len)
4000 {
4001 	unsigned long msec;
4002 
4003 	if (mddev_is_clustered(mddev)) {
4004 		pr_warn("md: Safemode is disabled for clustered mode\n");
4005 		return -EINVAL;
4006 	}
4007 
4008 	if (strict_strtoul_scaled(cbuf, &msec, 3) < 0 || msec > UINT_MAX / HZ)
4009 		return -EINVAL;
4010 	if (msec == 0)
4011 		mddev->safemode_delay = 0;
4012 	else {
4013 		unsigned long old_delay = mddev->safemode_delay;
4014 		unsigned long new_delay = (msec*HZ)/1000;
4015 
4016 		if (new_delay == 0)
4017 			new_delay = 1;
4018 		mddev->safemode_delay = new_delay;
4019 		if (new_delay < old_delay || old_delay == 0)
4020 			mod_timer(&mddev->safemode_timer, jiffies+1);
4021 	}
4022 	return len;
4023 }
4024 static struct md_sysfs_entry md_safe_delay =
4025 __ATTR(safe_mode_delay, S_IRUGO|S_IWUSR,safe_delay_show, safe_delay_store);
4026 
4027 static ssize_t
level_show(struct mddev * mddev,char * page)4028 level_show(struct mddev *mddev, char *page)
4029 {
4030 	struct md_personality *p;
4031 	int ret;
4032 	spin_lock(&mddev->lock);
4033 	p = mddev->pers;
4034 	if (p)
4035 		ret = sprintf(page, "%s\n", p->head.name);
4036 	else if (mddev->clevel[0])
4037 		ret = sprintf(page, "%s\n", mddev->clevel);
4038 	else if (mddev->level != LEVEL_NONE)
4039 		ret = sprintf(page, "%d\n", mddev->level);
4040 	else
4041 		ret = 0;
4042 	spin_unlock(&mddev->lock);
4043 	return ret;
4044 }
4045 
4046 static ssize_t
level_store(struct mddev * mddev,const char * buf,size_t len)4047 level_store(struct mddev *mddev, const char *buf, size_t len)
4048 {
4049 	char clevel[16];
4050 	ssize_t rv;
4051 	size_t slen = len;
4052 	unsigned int noio_flags;
4053 	struct md_personality *pers, *oldpers;
4054 	long level;
4055 	void *priv, *oldpriv;
4056 	struct md_rdev *rdev;
4057 
4058 	if (slen == 0 || slen >= sizeof(clevel))
4059 		return -EINVAL;
4060 
4061 	rv = mddev_suspend_and_lock(mddev);
4062 	if (rv)
4063 		return rv;
4064 	noio_flags = memalloc_noio_save();
4065 
4066 	if (mddev->pers == NULL) {
4067 		memcpy(mddev->clevel, buf, slen);
4068 		if (mddev->clevel[slen-1] == '\n')
4069 			slen--;
4070 		mddev->clevel[slen] = 0;
4071 		mddev->level = LEVEL_NONE;
4072 		rv = len;
4073 		goto out_unlock;
4074 	}
4075 	rv = -EROFS;
4076 	if (!md_is_rdwr(mddev))
4077 		goto out_unlock;
4078 
4079 	/* request to change the personality.  Need to ensure:
4080 	 *  - array is not engaged in resync/recovery/reshape
4081 	 *  - old personality can be suspended
4082 	 *  - new personality will access other array.
4083 	 */
4084 
4085 	rv = -EBUSY;
4086 	if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery) ||
4087 	    mddev->reshape_position != MaxSector ||
4088 	    mddev->sysfs_active)
4089 		goto out_unlock;
4090 
4091 	rv = -EINVAL;
4092 	if (!mddev->pers->quiesce) {
4093 		pr_warn("md: %s: %s does not support online personality change\n",
4094 			mdname(mddev), mddev->pers->head.name);
4095 		goto out_unlock;
4096 	}
4097 
4098 	/* Now find the new personality */
4099 	memcpy(clevel, buf, slen);
4100 	if (clevel[slen-1] == '\n')
4101 		slen--;
4102 	clevel[slen] = 0;
4103 	if (kstrtol(clevel, 10, &level))
4104 		level = LEVEL_NONE;
4105 
4106 	if (request_module("md-%s", clevel) != 0)
4107 		request_module("md-level-%s", clevel);
4108 	pers = get_pers(level, clevel);
4109 	if (!pers) {
4110 		rv = -EINVAL;
4111 		goto out_unlock;
4112 	}
4113 
4114 	if (pers == mddev->pers) {
4115 		/* Nothing to do! */
4116 		put_pers(pers);
4117 		rv = len;
4118 		goto out_unlock;
4119 	}
4120 	if (!pers->takeover) {
4121 		put_pers(pers);
4122 		pr_warn("md: %s: %s does not support personality takeover\n",
4123 			mdname(mddev), clevel);
4124 		rv = -EINVAL;
4125 		goto out_unlock;
4126 	}
4127 
4128 	rdev_for_each(rdev, mddev)
4129 		rdev->new_raid_disk = rdev->raid_disk;
4130 
4131 	/* ->takeover must set new_* and/or delta_disks
4132 	 * if it succeeds, and may set them when it fails.
4133 	 */
4134 	priv = pers->takeover(mddev);
4135 	if (IS_ERR(priv)) {
4136 		mddev->new_level = mddev->level;
4137 		mddev->new_layout = mddev->layout;
4138 		mddev->new_chunk_sectors = mddev->chunk_sectors;
4139 		mddev->raid_disks -= mddev->delta_disks;
4140 		mddev->delta_disks = 0;
4141 		mddev->reshape_backwards = 0;
4142 		put_pers(pers);
4143 		pr_warn("md: %s: %s would not accept array\n",
4144 			mdname(mddev), clevel);
4145 		rv = PTR_ERR(priv);
4146 		goto out_unlock;
4147 	}
4148 
4149 	/* Looks like we have a winner */
4150 	mddev_detach(mddev);
4151 
4152 	spin_lock(&mddev->lock);
4153 	oldpers = mddev->pers;
4154 	oldpriv = mddev->private;
4155 	mddev->pers = pers;
4156 	mddev->private = priv;
4157 	strscpy(mddev->clevel, pers->head.name, sizeof(mddev->clevel));
4158 	mddev->level = mddev->new_level;
4159 	mddev->layout = mddev->new_layout;
4160 	mddev->chunk_sectors = mddev->new_chunk_sectors;
4161 	mddev->delta_disks = 0;
4162 	mddev->reshape_backwards = 0;
4163 	mddev->degraded = 0;
4164 	spin_unlock(&mddev->lock);
4165 
4166 	if (oldpers->sync_request == NULL &&
4167 	    mddev->external) {
4168 		/* We are converting from a no-redundancy array
4169 		 * to a redundancy array and metadata is managed
4170 		 * externally so we need to be sure that writes
4171 		 * won't block due to a need to transition
4172 		 *      clean->dirty
4173 		 * until external management is started.
4174 		 */
4175 		mddev->in_sync = 0;
4176 		mddev->safemode_delay = 0;
4177 		mddev->safemode = 0;
4178 	}
4179 
4180 	oldpers->free(mddev, oldpriv);
4181 
4182 	if (oldpers->sync_request == NULL &&
4183 	    pers->sync_request != NULL) {
4184 		/* need to add the md_redundancy_group */
4185 		if (sysfs_create_group(&mddev->kobj, &md_redundancy_group))
4186 			pr_warn("md: cannot register extra attributes for %s\n",
4187 				mdname(mddev));
4188 		mddev->sysfs_action = sysfs_get_dirent(mddev->kobj.sd, "sync_action");
4189 		mddev->sysfs_completed = sysfs_get_dirent_safe(mddev->kobj.sd, "sync_completed");
4190 		mddev->sysfs_degraded = sysfs_get_dirent_safe(mddev->kobj.sd, "degraded");
4191 	}
4192 	if (oldpers->sync_request != NULL &&
4193 	    pers->sync_request == NULL) {
4194 		/* need to remove the md_redundancy_group */
4195 		if (mddev->to_remove == NULL)
4196 			mddev->to_remove = &md_redundancy_group;
4197 	}
4198 
4199 	put_pers(oldpers);
4200 
4201 	rdev_for_each(rdev, mddev) {
4202 		if (rdev->raid_disk < 0)
4203 			continue;
4204 		if (rdev->new_raid_disk >= mddev->raid_disks)
4205 			rdev->new_raid_disk = -1;
4206 		if (rdev->new_raid_disk == rdev->raid_disk)
4207 			continue;
4208 		sysfs_unlink_rdev(mddev, rdev);
4209 	}
4210 	rdev_for_each(rdev, mddev) {
4211 		if (rdev->raid_disk < 0)
4212 			continue;
4213 		if (rdev->new_raid_disk == rdev->raid_disk)
4214 			continue;
4215 		rdev->raid_disk = rdev->new_raid_disk;
4216 		if (rdev->raid_disk < 0)
4217 			clear_bit(In_sync, &rdev->flags);
4218 		else {
4219 			if (sysfs_link_rdev(mddev, rdev))
4220 				pr_warn("md: cannot register rd%d for %s after level change\n",
4221 					rdev->raid_disk, mdname(mddev));
4222 		}
4223 	}
4224 
4225 	if (pers->sync_request == NULL) {
4226 		/* this is now an array without redundancy, so
4227 		 * it must always be in_sync
4228 		 */
4229 		mddev->in_sync = 1;
4230 		timer_delete_sync(&mddev->safemode_timer);
4231 	}
4232 	pers->run(mddev);
4233 	set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags);
4234 	if (!mddev->thread)
4235 		md_update_sb(mddev, 1);
4236 	sysfs_notify_dirent_safe(mddev->sysfs_level);
4237 	md_new_event();
4238 	rv = len;
4239 out_unlock:
4240 	memalloc_noio_restore(noio_flags);
4241 	mddev_unlock_and_resume(mddev);
4242 	return rv;
4243 }
4244 
4245 static struct md_sysfs_entry md_level =
4246 __ATTR(level, S_IRUGO|S_IWUSR, level_show, level_store);
4247 
4248 static ssize_t
new_level_show(struct mddev * mddev,char * page)4249 new_level_show(struct mddev *mddev, char *page)
4250 {
4251 	return sprintf(page, "%d\n", mddev->new_level);
4252 }
4253 
4254 static ssize_t
new_level_store(struct mddev * mddev,const char * buf,size_t len)4255 new_level_store(struct mddev *mddev, const char *buf, size_t len)
4256 {
4257 	unsigned int n;
4258 	int err;
4259 
4260 	err = kstrtouint(buf, 10, &n);
4261 	if (err < 0)
4262 		return err;
4263 	err = mddev_lock(mddev);
4264 	if (err)
4265 		return err;
4266 
4267 	mddev->new_level = n;
4268 	md_update_sb(mddev, 1);
4269 
4270 	mddev_unlock(mddev);
4271 	return len;
4272 }
4273 static struct md_sysfs_entry md_new_level =
4274 __ATTR(new_level, 0664, new_level_show, new_level_store);
4275 
4276 static ssize_t
bitmap_type_show(struct mddev * mddev,char * page)4277 bitmap_type_show(struct mddev *mddev, char *page)
4278 {
4279 	struct md_submodule_head *head;
4280 	unsigned long i;
4281 	ssize_t len = 0;
4282 
4283 	if (mddev->bitmap_id == ID_BITMAP_NONE)
4284 		len += sprintf(page + len, "[none] ");
4285 	else
4286 		len += sprintf(page + len, "none ");
4287 
4288 	xa_lock(&md_submodule);
4289 	xa_for_each(&md_submodule, i, head) {
4290 		if (head->type != MD_BITMAP || head->id == ID_BITMAP_NONE)
4291 			continue;
4292 
4293 		if (mddev->bitmap_id == head->id)
4294 			len += sprintf(page + len, "[%s] ", head->name);
4295 		else
4296 			len += sprintf(page + len, "%s ", head->name);
4297 	}
4298 	xa_unlock(&md_submodule);
4299 
4300 	len += sprintf(page + len, "\n");
4301 	return len;
4302 }
4303 
4304 static ssize_t
bitmap_type_store(struct mddev * mddev,const char * buf,size_t len)4305 bitmap_type_store(struct mddev *mddev, const char *buf, size_t len)
4306 {
4307 	struct md_submodule_head *head;
4308 	enum md_submodule_id id;
4309 	unsigned long i;
4310 	int err = 0;
4311 
4312 	xa_lock(&md_submodule);
4313 
4314 	if (mddev->bitmap_ops) {
4315 		err = -EBUSY;
4316 		goto out;
4317 	}
4318 
4319 	if (cmd_match(buf, "none")) {
4320 		mddev->bitmap_id = ID_BITMAP_NONE;
4321 		goto out;
4322 	}
4323 
4324 	xa_for_each(&md_submodule, i, head) {
4325 		if (head->type == MD_BITMAP && cmd_match(buf, head->name)) {
4326 			mddev->bitmap_id = head->id;
4327 			goto out;
4328 		}
4329 	}
4330 
4331 	err = kstrtoint(buf, 10, &id);
4332 	if (err)
4333 		goto out;
4334 
4335 	if (id == ID_BITMAP_NONE) {
4336 		mddev->bitmap_id = id;
4337 		goto out;
4338 	}
4339 
4340 	head = xa_load(&md_submodule, id);
4341 	if (head && head->type == MD_BITMAP) {
4342 		mddev->bitmap_id = id;
4343 		goto out;
4344 	}
4345 
4346 	err = -ENOENT;
4347 
4348 out:
4349 	xa_unlock(&md_submodule);
4350 	return err ? err : len;
4351 }
4352 
4353 static struct md_sysfs_entry md_bitmap_type =
4354 __ATTR(bitmap_type, 0664, bitmap_type_show, bitmap_type_store);
4355 
4356 static ssize_t
layout_show(struct mddev * mddev,char * page)4357 layout_show(struct mddev *mddev, char *page)
4358 {
4359 	/* just a number, not meaningful for all levels */
4360 	if (mddev->reshape_position != MaxSector &&
4361 	    mddev->layout != mddev->new_layout)
4362 		return sprintf(page, "%d (%d)\n",
4363 			       mddev->new_layout, mddev->layout);
4364 	return sprintf(page, "%d\n", mddev->layout);
4365 }
4366 
4367 static ssize_t
layout_store(struct mddev * mddev,const char * buf,size_t len)4368 layout_store(struct mddev *mddev, const char *buf, size_t len)
4369 {
4370 	unsigned int n;
4371 	int err;
4372 
4373 	err = kstrtouint(buf, 10, &n);
4374 	if (err < 0)
4375 		return err;
4376 	err = mddev_lock(mddev);
4377 	if (err)
4378 		return err;
4379 
4380 	if (mddev->pers) {
4381 		if (mddev->pers->check_reshape == NULL)
4382 			err = -EBUSY;
4383 		else if (!md_is_rdwr(mddev))
4384 			err = -EROFS;
4385 		else {
4386 			mddev->new_layout = n;
4387 			err = mddev->pers->check_reshape(mddev);
4388 			if (err)
4389 				mddev->new_layout = mddev->layout;
4390 		}
4391 	} else {
4392 		mddev->new_layout = n;
4393 		if (mddev->reshape_position == MaxSector)
4394 			mddev->layout = n;
4395 	}
4396 	mddev_unlock(mddev);
4397 	return err ?: len;
4398 }
4399 static struct md_sysfs_entry md_layout =
4400 __ATTR(layout, S_IRUGO|S_IWUSR, layout_show, layout_store);
4401 
4402 static ssize_t
raid_disks_show(struct mddev * mddev,char * page)4403 raid_disks_show(struct mddev *mddev, char *page)
4404 {
4405 	if (mddev->raid_disks == 0)
4406 		return 0;
4407 	if (mddev->reshape_position != MaxSector &&
4408 	    mddev->delta_disks != 0)
4409 		return sprintf(page, "%d (%d)\n", mddev->raid_disks,
4410 			       mddev->raid_disks - mddev->delta_disks);
4411 	return sprintf(page, "%d\n", mddev->raid_disks);
4412 }
4413 
4414 static int update_raid_disks(struct mddev *mddev, int raid_disks);
4415 
4416 static ssize_t
raid_disks_store(struct mddev * mddev,const char * buf,size_t len)4417 raid_disks_store(struct mddev *mddev, const char *buf, size_t len)
4418 {
4419 	unsigned int n;
4420 	unsigned int noio_flags;
4421 	int err;
4422 
4423 	err = kstrtouint(buf, 10, &n);
4424 	if (err < 0)
4425 		return err;
4426 
4427 	err = mddev_suspend_and_lock(mddev);
4428 	if (err)
4429 		return err;
4430 	noio_flags = memalloc_noio_save();
4431 	if (mddev->pers) {
4432 		if (n != mddev->raid_disks)
4433 			err = update_raid_disks(mddev, n);
4434 	} else if (mddev->reshape_position != MaxSector) {
4435 		struct md_rdev *rdev;
4436 		int olddisks = mddev->raid_disks - mddev->delta_disks;
4437 
4438 		err = -EINVAL;
4439 		rdev_for_each(rdev, mddev) {
4440 			if (olddisks < n &&
4441 			    rdev->data_offset < rdev->new_data_offset)
4442 				goto out_unlock;
4443 			if (olddisks > n &&
4444 			    rdev->data_offset > rdev->new_data_offset)
4445 				goto out_unlock;
4446 		}
4447 		err = 0;
4448 		mddev->delta_disks = n - olddisks;
4449 		mddev->raid_disks = n;
4450 		mddev->reshape_backwards = (mddev->delta_disks < 0);
4451 	} else
4452 		mddev->raid_disks = n;
4453 out_unlock:
4454 	memalloc_noio_restore(noio_flags);
4455 	mddev_unlock_and_resume(mddev);
4456 	return err ? err : len;
4457 }
4458 static struct md_sysfs_entry md_raid_disks =
4459 __ATTR(raid_disks, S_IRUGO|S_IWUSR, raid_disks_show, raid_disks_store);
4460 
4461 static ssize_t
uuid_show(struct mddev * mddev,char * page)4462 uuid_show(struct mddev *mddev, char *page)
4463 {
4464 	return sprintf(page, "%pU\n", mddev->uuid);
4465 }
4466 static struct md_sysfs_entry md_uuid =
4467 __ATTR(uuid, S_IRUGO, uuid_show, NULL);
4468 
4469 static ssize_t
chunk_size_show(struct mddev * mddev,char * page)4470 chunk_size_show(struct mddev *mddev, char *page)
4471 {
4472 	if (mddev->reshape_position != MaxSector &&
4473 	    mddev->chunk_sectors != mddev->new_chunk_sectors)
4474 		return sprintf(page, "%d (%d)\n",
4475 			       mddev->new_chunk_sectors << 9,
4476 			       mddev->chunk_sectors << 9);
4477 	return sprintf(page, "%d\n", mddev->chunk_sectors << 9);
4478 }
4479 
4480 static ssize_t
chunk_size_store(struct mddev * mddev,const char * buf,size_t len)4481 chunk_size_store(struct mddev *mddev, const char *buf, size_t len)
4482 {
4483 	unsigned long n;
4484 	int err;
4485 
4486 	err = kstrtoul(buf, 10, &n);
4487 	if (err < 0)
4488 		return err;
4489 
4490 	err = mddev_lock(mddev);
4491 	if (err)
4492 		return err;
4493 	if (mddev->pers) {
4494 		if (mddev->pers->check_reshape == NULL)
4495 			err = -EBUSY;
4496 		else if (!md_is_rdwr(mddev))
4497 			err = -EROFS;
4498 		else {
4499 			mddev->new_chunk_sectors = n >> 9;
4500 			err = mddev->pers->check_reshape(mddev);
4501 			if (err)
4502 				mddev->new_chunk_sectors = mddev->chunk_sectors;
4503 		}
4504 	} else {
4505 		mddev->new_chunk_sectors = n >> 9;
4506 		if (mddev->reshape_position == MaxSector)
4507 			mddev->chunk_sectors = n >> 9;
4508 	}
4509 	mddev_unlock(mddev);
4510 	return err ?: len;
4511 }
4512 static struct md_sysfs_entry md_chunk_size =
4513 __ATTR(chunk_size, S_IRUGO|S_IWUSR, chunk_size_show, chunk_size_store);
4514 
4515 static ssize_t
resync_start_show(struct mddev * mddev,char * page)4516 resync_start_show(struct mddev *mddev, char *page)
4517 {
4518 	if (mddev->resync_offset == MaxSector)
4519 		return sprintf(page, "none\n");
4520 	return sprintf(page, "%llu\n", (unsigned long long)mddev->resync_offset);
4521 }
4522 
4523 static ssize_t
resync_start_store(struct mddev * mddev,const char * buf,size_t len)4524 resync_start_store(struct mddev *mddev, const char *buf, size_t len)
4525 {
4526 	unsigned long long n;
4527 	int err;
4528 
4529 	if (cmd_match(buf, "none"))
4530 		n = MaxSector;
4531 	else {
4532 		err = kstrtoull(buf, 10, &n);
4533 		if (err < 0)
4534 			return err;
4535 		if (n != (sector_t)n)
4536 			return -EINVAL;
4537 	}
4538 
4539 	err = mddev_lock(mddev);
4540 	if (err)
4541 		return err;
4542 	if (mddev->pers && !test_bit(MD_RECOVERY_FROZEN, &mddev->recovery))
4543 		err = -EBUSY;
4544 
4545 	if (!err) {
4546 		mddev->resync_offset = n;
4547 		if (mddev->pers)
4548 			set_bit(MD_SB_CHANGE_CLEAN, &mddev->sb_flags);
4549 	}
4550 	mddev_unlock(mddev);
4551 	return err ?: len;
4552 }
4553 static struct md_sysfs_entry md_resync_start =
4554 __ATTR_PREALLOC(resync_start, S_IRUGO|S_IWUSR,
4555 		resync_start_show, resync_start_store);
4556 
4557 /*
4558  * The array state can be:
4559  *
4560  * clear
4561  *     No devices, no size, no level
4562  *     Equivalent to STOP_ARRAY ioctl
4563  * inactive
4564  *     May have some settings, but array is not active
4565  *        all IO results in error
4566  *     When written, doesn't tear down array, but just stops it
4567  * suspended (not supported yet)
4568  *     All IO requests will block. The array can be reconfigured.
4569  *     Writing this, if accepted, will block until array is quiescent
4570  * readonly
4571  *     no resync can happen.  no superblocks get written.
4572  *     write requests fail
4573  * read-auto
4574  *     like readonly, but behaves like 'clean' on a write request.
4575  *
4576  * clean - no pending writes, but otherwise active.
4577  *     When written to inactive array, starts without resync
4578  *     If a write request arrives then
4579  *       if metadata is known, mark 'dirty' and switch to 'active'.
4580  *       if not known, block and switch to write-pending
4581  *     If written to an active array that has pending writes, then fails.
4582  * active
4583  *     fully active: IO and resync can be happening.
4584  *     When written to inactive array, starts with resync
4585  *
4586  * write-pending
4587  *     clean, but writes are blocked waiting for 'active' to be written.
4588  *
4589  * active-idle
4590  *     like active, but no writes have been seen for a while (100msec).
4591  *
4592  * broken
4593 *     Array is failed. It's useful because mounted-arrays aren't stopped
4594 *     when array is failed, so this state will at least alert the user that
4595 *     something is wrong.
4596  */
4597 enum array_state { clear, inactive, suspended, readonly, read_auto, clean, active,
4598 		   write_pending, active_idle, broken, bad_word};
4599 static char *array_states[] = {
4600 	"clear", "inactive", "suspended", "readonly", "read-auto", "clean", "active",
4601 	"write-pending", "active-idle", "broken", NULL };
4602 
match_word(const char * word,char ** list)4603 static int match_word(const char *word, char **list)
4604 {
4605 	int n;
4606 	for (n=0; list[n]; n++)
4607 		if (cmd_match(word, list[n]))
4608 			break;
4609 	return n;
4610 }
4611 
4612 static ssize_t
array_state_show(struct mddev * mddev,char * page)4613 array_state_show(struct mddev *mddev, char *page)
4614 {
4615 	enum array_state st = inactive;
4616 
4617 	if (mddev->pers && !test_bit(MD_NOT_READY, &mddev->flags)) {
4618 		switch(mddev->ro) {
4619 		case MD_RDONLY:
4620 			st = readonly;
4621 			break;
4622 		case MD_AUTO_READ:
4623 			st = read_auto;
4624 			break;
4625 		case MD_RDWR:
4626 			spin_lock(&mddev->lock);
4627 			if (test_bit(MD_SB_CHANGE_PENDING, &mddev->sb_flags))
4628 				st = write_pending;
4629 			else if (mddev->in_sync)
4630 				st = clean;
4631 			else if (mddev->safemode)
4632 				st = active_idle;
4633 			else
4634 				st = active;
4635 			spin_unlock(&mddev->lock);
4636 		}
4637 
4638 		if (test_bit(MD_BROKEN, &mddev->flags) && st == clean)
4639 			st = broken;
4640 	} else {
4641 		if (list_empty(&mddev->disks) &&
4642 		    mddev->raid_disks == 0 &&
4643 		    mddev->dev_sectors == 0)
4644 			st = clear;
4645 		else
4646 			st = inactive;
4647 	}
4648 	return sprintf(page, "%s\n", array_states[st]);
4649 }
4650 
4651 static int do_md_stop(struct mddev *mddev, int ro);
4652 static int md_set_readonly(struct mddev *mddev);
4653 static int restart_array(struct mddev *mddev);
4654 
4655 static ssize_t
array_state_store(struct mddev * mddev,const char * buf,size_t len)4656 array_state_store(struct mddev *mddev, const char *buf, size_t len)
4657 {
4658 	int err = 0;
4659 	enum array_state st = match_word(buf, array_states);
4660 
4661 	/* No lock dependent actions */
4662 	switch (st) {
4663 	case suspended:		/* not supported yet */
4664 	case write_pending:	/* cannot be set */
4665 	case active_idle:	/* cannot be set */
4666 	case broken:		/* cannot be set */
4667 	case bad_word:
4668 		return -EINVAL;
4669 	case clear:
4670 	case readonly:
4671 	case inactive:
4672 	case read_auto:
4673 		if (!mddev->pers || !md_is_rdwr(mddev))
4674 			break;
4675 		/* write sysfs will not open mddev and opener should be 0 */
4676 		err = mddev_set_closing_and_sync_blockdev(mddev, 0);
4677 		if (err)
4678 			return err;
4679 		break;
4680 	default:
4681 		break;
4682 	}
4683 
4684 	if (mddev->pers && (st == active || st == clean) &&
4685 	    mddev->ro != MD_RDONLY) {
4686 		/* don't take reconfig_mutex when toggling between
4687 		 * clean and active
4688 		 */
4689 		spin_lock(&mddev->lock);
4690 		if (st == active) {
4691 			restart_array(mddev);
4692 			clear_bit(MD_SB_CHANGE_PENDING, &mddev->sb_flags);
4693 			md_wakeup_thread(mddev->thread);
4694 			wake_up(&mddev->sb_wait);
4695 		} else /* st == clean */ {
4696 			restart_array(mddev);
4697 			if (!set_in_sync(mddev))
4698 				err = -EBUSY;
4699 		}
4700 		if (!err)
4701 			sysfs_notify_dirent_safe(mddev->sysfs_state);
4702 		spin_unlock(&mddev->lock);
4703 		return err ?: len;
4704 	}
4705 	err = mddev_lock(mddev);
4706 	if (err)
4707 		return err;
4708 
4709 	switch (st) {
4710 	case inactive:
4711 		/* stop an active array, return 0 otherwise */
4712 		if (mddev->pers)
4713 			err = do_md_stop(mddev, 2);
4714 		break;
4715 	case clear:
4716 		err = do_md_stop(mddev, 0);
4717 		break;
4718 	case readonly:
4719 		if (mddev->pers)
4720 			err = md_set_readonly(mddev);
4721 		else {
4722 			mddev->ro = MD_RDONLY;
4723 			set_disk_ro(mddev->gendisk, 1);
4724 			err = do_md_run(mddev);
4725 		}
4726 		break;
4727 	case read_auto:
4728 		if (mddev->pers) {
4729 			if (md_is_rdwr(mddev))
4730 				err = md_set_readonly(mddev);
4731 			else if (mddev->ro == MD_RDONLY)
4732 				err = restart_array(mddev);
4733 			if (err == 0) {
4734 				mddev->ro = MD_AUTO_READ;
4735 				set_disk_ro(mddev->gendisk, 0);
4736 			}
4737 		} else {
4738 			mddev->ro = MD_AUTO_READ;
4739 			err = do_md_run(mddev);
4740 		}
4741 		break;
4742 	case clean:
4743 		if (mddev->pers) {
4744 			err = restart_array(mddev);
4745 			if (err)
4746 				break;
4747 			spin_lock(&mddev->lock);
4748 			if (!set_in_sync(mddev))
4749 				err = -EBUSY;
4750 			spin_unlock(&mddev->lock);
4751 		} else
4752 			err = -EINVAL;
4753 		break;
4754 	case active:
4755 		if (mddev->pers) {
4756 			err = restart_array(mddev);
4757 			if (err)
4758 				break;
4759 			clear_bit(MD_SB_CHANGE_PENDING, &mddev->sb_flags);
4760 			wake_up(&mddev->sb_wait);
4761 			err = 0;
4762 		} else {
4763 			mddev->ro = MD_RDWR;
4764 			set_disk_ro(mddev->gendisk, 0);
4765 			err = do_md_run(mddev);
4766 		}
4767 		break;
4768 	default:
4769 		err = -EINVAL;
4770 		break;
4771 	}
4772 
4773 	if (!err) {
4774 		if (mddev->hold_active == UNTIL_IOCTL)
4775 			mddev->hold_active = 0;
4776 		sysfs_notify_dirent_safe(mddev->sysfs_state);
4777 	}
4778 	mddev_unlock(mddev);
4779 
4780 	if (st == readonly || st == read_auto || st == inactive ||
4781 	    (err && st == clear))
4782 		clear_bit(MD_CLOSING, &mddev->flags);
4783 
4784 	return err ?: len;
4785 }
4786 static struct md_sysfs_entry md_array_state =
4787 __ATTR_PREALLOC(array_state, S_IRUGO|S_IWUSR, array_state_show, array_state_store);
4788 
4789 static ssize_t
max_corrected_read_errors_show(struct mddev * mddev,char * page)4790 max_corrected_read_errors_show(struct mddev *mddev, char *page) {
4791 	return sprintf(page, "%d\n",
4792 		       atomic_read(&mddev->max_corr_read_errors));
4793 }
4794 
4795 static ssize_t
max_corrected_read_errors_store(struct mddev * mddev,const char * buf,size_t len)4796 max_corrected_read_errors_store(struct mddev *mddev, const char *buf, size_t len)
4797 {
4798 	unsigned int n;
4799 	int rv;
4800 
4801 	rv = kstrtouint(buf, 10, &n);
4802 	if (rv < 0)
4803 		return rv;
4804 	if (n > INT_MAX)
4805 		return -EINVAL;
4806 	atomic_set(&mddev->max_corr_read_errors, n);
4807 	return len;
4808 }
4809 
4810 static struct md_sysfs_entry max_corr_read_errors =
4811 __ATTR(max_read_errors, S_IRUGO|S_IWUSR, max_corrected_read_errors_show,
4812 	max_corrected_read_errors_store);
4813 
4814 static ssize_t
null_show(struct mddev * mddev,char * page)4815 null_show(struct mddev *mddev, char *page)
4816 {
4817 	return -EINVAL;
4818 }
4819 
4820 static ssize_t
new_dev_store(struct mddev * mddev,const char * buf,size_t len)4821 new_dev_store(struct mddev *mddev, const char *buf, size_t len)
4822 {
4823 	/* buf must be %d:%d\n? giving major and minor numbers */
4824 	/* The new device is added to the array.
4825 	 * If the array has a persistent superblock, we read the
4826 	 * superblock to initialise info and check validity.
4827 	 * Otherwise, only checking done is that in bind_rdev_to_array,
4828 	 * which mainly checks size.
4829 	 */
4830 	char *e;
4831 	int major = simple_strtoul(buf, &e, 10);
4832 	int minor;
4833 	dev_t dev;
4834 	struct md_rdev *rdev;
4835 	unsigned int noio_flags;
4836 	int err;
4837 
4838 	if (!*buf || *e != ':' || !e[1] || e[1] == '\n')
4839 		return -EINVAL;
4840 	minor = simple_strtoul(e+1, &e, 10);
4841 	if (*e && *e != '\n')
4842 		return -EINVAL;
4843 	dev = MKDEV(major, minor);
4844 	if (major != MAJOR(dev) ||
4845 	    minor != MINOR(dev))
4846 		return -EOVERFLOW;
4847 
4848 	err = mddev_suspend_and_lock(mddev);
4849 	if (err)
4850 		return err;
4851 	noio_flags = memalloc_noio_save();
4852 	if (mddev->persistent) {
4853 		rdev = md_import_device(dev, mddev->major_version,
4854 					mddev->minor_version);
4855 		if (!IS_ERR(rdev) && !list_empty(&mddev->disks)) {
4856 			struct md_rdev *rdev0
4857 				= list_entry(mddev->disks.next,
4858 					     struct md_rdev, same_set);
4859 			err = super_types[mddev->major_version]
4860 				.load_super(rdev, rdev0, mddev->minor_version);
4861 			if (err < 0)
4862 				goto out;
4863 		}
4864 	} else if (mddev->external)
4865 		rdev = md_import_device(dev, -2, -1);
4866 	else
4867 		rdev = md_import_device(dev, -1, -1);
4868 
4869 	if (IS_ERR(rdev)) {
4870 		memalloc_noio_restore(noio_flags);
4871 		mddev_unlock_and_resume(mddev);
4872 		return PTR_ERR(rdev);
4873 	}
4874 	err = bind_rdev_to_array(rdev, mddev);
4875  out:
4876 	if (err)
4877 		export_rdev(rdev);
4878 	memalloc_noio_restore(noio_flags);
4879 	mddev_unlock_and_resume(mddev);
4880 	if (!err)
4881 		md_new_event();
4882 	return err ? err : len;
4883 }
4884 
4885 static struct md_sysfs_entry md_new_device =
4886 __ATTR(new_dev, S_IWUSR, null_show, new_dev_store);
4887 
4888 static ssize_t
bitmap_store(struct mddev * mddev,const char * buf,size_t len)4889 bitmap_store(struct mddev *mddev, const char *buf, size_t len)
4890 {
4891 	char *end;
4892 	unsigned long chunk, end_chunk;
4893 	int err;
4894 
4895 	if (!md_bitmap_enabled(mddev, false))
4896 		return len;
4897 
4898 	err = mddev_lock(mddev);
4899 	if (err)
4900 		return err;
4901 	if (!mddev->bitmap)
4902 		goto out;
4903 	/* buf should be <chunk> <chunk> ... or <chunk>-<chunk> ... (range) */
4904 	while (*buf) {
4905 		chunk = end_chunk = simple_strtoul(buf, &end, 0);
4906 		if (buf == end)
4907 			break;
4908 
4909 		if (*end == '-') { /* range */
4910 			buf = end + 1;
4911 			end_chunk = simple_strtoul(buf, &end, 0);
4912 			if (buf == end)
4913 				break;
4914 		}
4915 
4916 		if (*end && !isspace(*end))
4917 			break;
4918 
4919 		mddev->bitmap_ops->dirty_bits(mddev, chunk, end_chunk);
4920 		buf = skip_spaces(end);
4921 	}
4922 	mddev->bitmap_ops->unplug(mddev, true); /* flush the bits to disk */
4923 out:
4924 	mddev_unlock(mddev);
4925 	return len;
4926 }
4927 
4928 static struct md_sysfs_entry md_bitmap =
4929 __ATTR(bitmap_set_bits, S_IWUSR, null_show, bitmap_store);
4930 
4931 static ssize_t
size_show(struct mddev * mddev,char * page)4932 size_show(struct mddev *mddev, char *page)
4933 {
4934 	return sprintf(page, "%llu\n",
4935 		(unsigned long long)mddev->dev_sectors / 2);
4936 }
4937 
4938 static int update_size(struct mddev *mddev, sector_t num_sectors);
4939 
4940 static ssize_t
size_store(struct mddev * mddev,const char * buf,size_t len)4941 size_store(struct mddev *mddev, const char *buf, size_t len)
4942 {
4943 	/* If array is inactive, we can reduce the component size, but
4944 	 * not increase it (except from 0).
4945 	 * If array is active, we can try an on-line resize
4946 	 */
4947 	sector_t sectors;
4948 	int err = strict_blocks_to_sectors(buf, &sectors);
4949 
4950 	if (err < 0)
4951 		return err;
4952 	err = mddev_lock(mddev);
4953 	if (err)
4954 		return err;
4955 	if (mddev->pers) {
4956 		err = update_size(mddev, sectors);
4957 		if (err == 0)
4958 			md_update_sb(mddev, 1);
4959 	} else {
4960 		if (mddev->dev_sectors == 0 ||
4961 		    mddev->dev_sectors > sectors)
4962 			mddev->dev_sectors = sectors;
4963 		else
4964 			err = -ENOSPC;
4965 	}
4966 	mddev_unlock(mddev);
4967 	return err ? err : len;
4968 }
4969 
4970 static struct md_sysfs_entry md_size =
4971 __ATTR(component_size, S_IRUGO|S_IWUSR, size_show, size_store);
4972 
4973 /* Metadata version.
4974  * This is one of
4975  *   'none' for arrays with no metadata (good luck...)
4976  *   'external' for arrays with externally managed metadata,
4977  * or N.M for internally known formats
4978  */
4979 static ssize_t
metadata_show(struct mddev * mddev,char * page)4980 metadata_show(struct mddev *mddev, char *page)
4981 {
4982 	if (mddev->persistent)
4983 		return sprintf(page, "%d.%d\n",
4984 			       mddev->major_version, mddev->minor_version);
4985 	else if (mddev->external)
4986 		return sprintf(page, "external:%s\n", mddev->metadata_type);
4987 	else
4988 		return sprintf(page, "none\n");
4989 }
4990 
4991 static ssize_t
metadata_store(struct mddev * mddev,const char * buf,size_t len)4992 metadata_store(struct mddev *mddev, const char *buf, size_t len)
4993 {
4994 	int major, minor;
4995 	char *e;
4996 	int err;
4997 	/* Changing the details of 'external' metadata is
4998 	 * always permitted.  Otherwise there must be
4999 	 * no devices attached to the array.
5000 	 */
5001 
5002 	err = mddev_lock(mddev);
5003 	if (err)
5004 		return err;
5005 	err = -EBUSY;
5006 	if (mddev->external && strncmp(buf, "external:", 9) == 0)
5007 		;
5008 	else if (!list_empty(&mddev->disks))
5009 		goto out_unlock;
5010 
5011 	err = 0;
5012 	if (cmd_match(buf, "none")) {
5013 		mddev->persistent = 0;
5014 		mddev->external = 0;
5015 		mddev->major_version = 0;
5016 		mddev->minor_version = 90;
5017 		goto out_unlock;
5018 	}
5019 	if (strncmp(buf, "external:", 9) == 0) {
5020 		size_t namelen = len-9;
5021 		if (namelen >= sizeof(mddev->metadata_type))
5022 			namelen = sizeof(mddev->metadata_type)-1;
5023 		memcpy(mddev->metadata_type, buf+9, namelen);
5024 		mddev->metadata_type[namelen] = 0;
5025 		if (namelen && mddev->metadata_type[namelen-1] == '\n')
5026 			mddev->metadata_type[--namelen] = 0;
5027 		mddev->persistent = 0;
5028 		mddev->external = 1;
5029 		mddev->major_version = 0;
5030 		mddev->minor_version = 90;
5031 		goto out_unlock;
5032 	}
5033 	major = simple_strtoul(buf, &e, 10);
5034 	err = -EINVAL;
5035 	if (e==buf || *e != '.')
5036 		goto out_unlock;
5037 	buf = e+1;
5038 	minor = simple_strtoul(buf, &e, 10);
5039 	if (e==buf || (*e && *e != '\n') )
5040 		goto out_unlock;
5041 	err = -ENOENT;
5042 	if (major >= ARRAY_SIZE(super_types) || super_types[major].name == NULL)
5043 		goto out_unlock;
5044 	mddev->major_version = major;
5045 	mddev->minor_version = minor;
5046 	mddev->persistent = 1;
5047 	mddev->external = 0;
5048 	err = 0;
5049 out_unlock:
5050 	mddev_unlock(mddev);
5051 	return err ?: len;
5052 }
5053 
5054 static struct md_sysfs_entry md_metadata =
5055 __ATTR_PREALLOC(metadata_version, S_IRUGO|S_IWUSR, metadata_show, metadata_store);
5056 
rdev_needs_recovery(struct md_rdev * rdev,sector_t sectors)5057 static bool rdev_needs_recovery(struct md_rdev *rdev, sector_t sectors)
5058 {
5059 	return rdev->raid_disk >= 0 &&
5060 	       !test_bit(Journal, &rdev->flags) &&
5061 	       !test_bit(Faulty, &rdev->flags) &&
5062 	       !test_bit(In_sync, &rdev->flags) &&
5063 	       rdev->recovery_offset < sectors;
5064 }
5065 
md_get_active_sync_action(struct mddev * mddev)5066 static enum sync_action md_get_active_sync_action(struct mddev *mddev)
5067 {
5068 	struct md_rdev *rdev;
5069 	bool is_recover = false;
5070 
5071 	if (mddev->resync_offset < MaxSector)
5072 		return ACTION_RESYNC;
5073 
5074 	if (mddev->reshape_position != MaxSector)
5075 		return ACTION_RESHAPE;
5076 
5077 	rcu_read_lock();
5078 	rdev_for_each_rcu(rdev, mddev) {
5079 		if (rdev_needs_recovery(rdev, MaxSector)) {
5080 			is_recover = true;
5081 			break;
5082 		}
5083 	}
5084 	rcu_read_unlock();
5085 
5086 	return is_recover ? ACTION_RECOVER : ACTION_IDLE;
5087 }
5088 
md_sync_action(struct mddev * mddev)5089 enum sync_action md_sync_action(struct mddev *mddev)
5090 {
5091 	unsigned long recovery = mddev->recovery;
5092 	enum sync_action active_action;
5093 
5094 	/*
5095 	 * frozen has the highest priority, means running sync_thread will be
5096 	 * stopped immediately, and no new sync_thread can start.
5097 	 */
5098 	if (test_bit(MD_RECOVERY_FROZEN, &recovery))
5099 		return ACTION_FROZEN;
5100 
5101 	/*
5102 	 * read-only array can't register sync_thread, and it can only
5103 	 * add/remove spares.
5104 	 */
5105 	if (!md_is_rdwr(mddev))
5106 		return ACTION_IDLE;
5107 
5108 	/*
5109 	 * idle means no sync_thread is running, and no new sync_thread is
5110 	 * requested.
5111 	 */
5112 	if (!test_bit(MD_RECOVERY_RUNNING, &recovery) &&
5113 	    !test_bit(MD_RECOVERY_NEEDED, &recovery))
5114 		return ACTION_IDLE;
5115 
5116 	/*
5117 	 * Check if any sync operation (resync/recover/reshape) is
5118 	 * currently active. This ensures that only one sync operation
5119 	 * can run at a time. Returns the type of active operation, or
5120 	 * ACTION_IDLE if none are active.
5121 	 */
5122 	active_action = md_get_active_sync_action(mddev);
5123 	if (active_action != ACTION_IDLE)
5124 		return active_action;
5125 
5126 	if (test_bit(MD_RECOVERY_RESHAPE, &recovery))
5127 		return ACTION_RESHAPE;
5128 
5129 	if (test_bit(MD_RECOVERY_RECOVER, &recovery))
5130 		return ACTION_RECOVER;
5131 
5132 	if (test_bit(MD_RECOVERY_SYNC, &recovery)) {
5133 		/*
5134 		 * MD_RECOVERY_CHECK must be paired with
5135 		 * MD_RECOVERY_REQUESTED.
5136 		 */
5137 		if (test_bit(MD_RECOVERY_CHECK, &recovery))
5138 			return ACTION_CHECK;
5139 		if (test_bit(MD_RECOVERY_REQUESTED, &recovery))
5140 			return ACTION_REPAIR;
5141 		return ACTION_RESYNC;
5142 	}
5143 
5144 	/*
5145 	 * MD_RECOVERY_NEEDED or MD_RECOVERY_RUNNING is set, however, no
5146 	 * sync_action is specified.
5147 	 */
5148 	return ACTION_IDLE;
5149 }
5150 
md_sync_action_by_name(const char * page)5151 enum sync_action md_sync_action_by_name(const char *page)
5152 {
5153 	enum sync_action action;
5154 
5155 	for (action = 0; action < NR_SYNC_ACTIONS; ++action) {
5156 		if (cmd_match(page, action_name[action]))
5157 			return action;
5158 	}
5159 
5160 	return NR_SYNC_ACTIONS;
5161 }
5162 
md_sync_action_name(enum sync_action action)5163 const char *md_sync_action_name(enum sync_action action)
5164 {
5165 	return action_name[action];
5166 }
5167 
5168 static ssize_t
action_show(struct mddev * mddev,char * page)5169 action_show(struct mddev *mddev, char *page)
5170 {
5171 	enum sync_action action = md_sync_action(mddev);
5172 
5173 	return sprintf(page, "%s\n", md_sync_action_name(action));
5174 }
5175 
5176 /**
5177  * stop_sync_thread() - wait for sync_thread to stop if it's running.
5178  * @mddev:	the array.
5179  * @locked:	if set, reconfig_mutex will still be held after this function
5180  *		return; if not set, reconfig_mutex will be released after this
5181  *		function return.
5182  */
stop_sync_thread(struct mddev * mddev,bool locked)5183 static void stop_sync_thread(struct mddev *mddev, bool locked)
5184 {
5185 	int sync_seq = atomic_read(&mddev->sync_seq);
5186 
5187 	if (!test_bit(MD_RECOVERY_RUNNING, &mddev->recovery)) {
5188 		if (!locked)
5189 			mddev_unlock(mddev);
5190 		return;
5191 	}
5192 
5193 	mddev_unlock(mddev);
5194 
5195 	set_bit(MD_RECOVERY_INTR, &mddev->recovery);
5196 	/*
5197 	 * Thread might be blocked waiting for metadata update which will now
5198 	 * never happen
5199 	 */
5200 	md_wakeup_thread_directly(&mddev->sync_thread);
5201 	if (work_pending(&mddev->sync_work))
5202 		flush_work(&mddev->sync_work);
5203 
5204 	wait_event(resync_wait,
5205 		   !test_bit(MD_RECOVERY_RUNNING, &mddev->recovery) ||
5206 		   (!test_bit(MD_RECOVERY_FROZEN, &mddev->recovery) &&
5207 		    sync_seq != atomic_read(&mddev->sync_seq)));
5208 
5209 	if (locked)
5210 		mddev_lock_nointr(mddev);
5211 }
5212 
md_idle_sync_thread(struct mddev * mddev)5213 void md_idle_sync_thread(struct mddev *mddev)
5214 {
5215 	lockdep_assert_held(&mddev->reconfig_mutex);
5216 
5217 	clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
5218 	stop_sync_thread(mddev, true);
5219 }
5220 EXPORT_SYMBOL_GPL(md_idle_sync_thread);
5221 
md_frozen_sync_thread(struct mddev * mddev)5222 void md_frozen_sync_thread(struct mddev *mddev)
5223 {
5224 	lockdep_assert_held(&mddev->reconfig_mutex);
5225 
5226 	set_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
5227 	stop_sync_thread(mddev, true);
5228 }
5229 EXPORT_SYMBOL_GPL(md_frozen_sync_thread);
5230 
md_unfrozen_sync_thread(struct mddev * mddev)5231 void md_unfrozen_sync_thread(struct mddev *mddev)
5232 {
5233 	lockdep_assert_held(&mddev->reconfig_mutex);
5234 
5235 	clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
5236 	set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
5237 	md_wakeup_thread(mddev->thread);
5238 	sysfs_notify_dirent_safe(mddev->sysfs_action);
5239 }
5240 EXPORT_SYMBOL_GPL(md_unfrozen_sync_thread);
5241 
mddev_start_reshape(struct mddev * mddev)5242 static int mddev_start_reshape(struct mddev *mddev)
5243 {
5244 	int ret;
5245 
5246 	if (mddev->pers->start_reshape == NULL)
5247 		return -EINVAL;
5248 
5249 	if (mddev->reshape_position == MaxSector ||
5250 	    mddev->pers->check_reshape == NULL ||
5251 	    mddev->pers->check_reshape(mddev)) {
5252 		clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
5253 		ret = mddev->pers->start_reshape(mddev);
5254 		if (ret)
5255 			return ret;
5256 	} else {
5257 		/*
5258 		 * If reshape is still in progress, and md_check_recovery() can
5259 		 * continue to reshape, don't restart reshape because data can
5260 		 * be corrupted for raid456.
5261 		 */
5262 		clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
5263 	}
5264 
5265 	sysfs_notify_dirent_safe(mddev->sysfs_degraded);
5266 	return 0;
5267 }
5268 
5269 static ssize_t
action_store(struct mddev * mddev,const char * page,size_t len)5270 action_store(struct mddev *mddev, const char *page, size_t len)
5271 {
5272 	int ret;
5273 	enum sync_action action;
5274 
5275 	if (!mddev->pers || !mddev->pers->sync_request)
5276 		return -EINVAL;
5277 
5278 	action = md_sync_action_by_name(page);
5279 	if (action == ACTION_RESHAPE) {
5280 		ret = mddev_suspend(mddev, true);
5281 		if (ret)
5282 			return ret;
5283 	}
5284 retry:
5285 	if (work_busy(&mddev->sync_work))
5286 		flush_work(&mddev->sync_work);
5287 
5288 	ret = mddev_lock(mddev);
5289 	if (ret) {
5290 		if (action == ACTION_RESHAPE)
5291 			mddev_resume(mddev);
5292 		return ret;
5293 	}
5294 
5295 	if (work_busy(&mddev->sync_work)) {
5296 		mddev_unlock(mddev);
5297 		goto retry;
5298 	}
5299 
5300 	/* TODO: mdadm rely on "idle" to start sync_thread. */
5301 	if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery)) {
5302 		switch (action) {
5303 		case ACTION_FROZEN:
5304 			md_frozen_sync_thread(mddev);
5305 			ret = len;
5306 			goto out;
5307 		case ACTION_IDLE:
5308 			md_idle_sync_thread(mddev);
5309 			break;
5310 		case ACTION_RESHAPE:
5311 		case ACTION_RECOVER:
5312 		case ACTION_CHECK:
5313 		case ACTION_REPAIR:
5314 		case ACTION_RESYNC:
5315 			ret = -EBUSY;
5316 			goto out;
5317 		default:
5318 			ret = -EINVAL;
5319 			goto out;
5320 		}
5321 	} else {
5322 		switch (action) {
5323 		case ACTION_FROZEN:
5324 			set_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
5325 			ret = len;
5326 			goto out;
5327 		case ACTION_RESHAPE:
5328 			clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
5329 			ret = mddev_start_reshape(mddev);
5330 			if (ret)
5331 				goto out;
5332 			break;
5333 		case ACTION_RECOVER:
5334 			clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
5335 			set_bit(MD_RECOVERY_RECOVER, &mddev->recovery);
5336 			break;
5337 		case ACTION_CHECK:
5338 			set_bit(MD_RECOVERY_CHECK, &mddev->recovery);
5339 			fallthrough;
5340 		case ACTION_REPAIR:
5341 			set_bit(MD_RECOVERY_REQUESTED, &mddev->recovery);
5342 			set_bit(MD_RECOVERY_SYNC, &mddev->recovery);
5343 			fallthrough;
5344 		case ACTION_RESYNC:
5345 		case ACTION_IDLE:
5346 			clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
5347 			break;
5348 		default:
5349 			ret = -EINVAL;
5350 			goto out;
5351 		}
5352 	}
5353 
5354 	if (mddev->ro == MD_AUTO_READ) {
5355 		/* A write to sync_action is enough to justify
5356 		 * canceling read-auto mode
5357 		 */
5358 		mddev->ro = MD_RDWR;
5359 		md_wakeup_thread(mddev->sync_thread);
5360 	}
5361 
5362 	set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
5363 	md_wakeup_thread(mddev->thread);
5364 	sysfs_notify_dirent_safe(mddev->sysfs_action);
5365 	ret = len;
5366 
5367 out:
5368 	mddev_unlock(mddev);
5369 	if (action == ACTION_RESHAPE)
5370 		mddev_resume(mddev);
5371 	return ret;
5372 }
5373 
5374 static struct md_sysfs_entry md_scan_mode =
5375 __ATTR_PREALLOC(sync_action, S_IRUGO|S_IWUSR, action_show, action_store);
5376 
5377 static ssize_t
last_sync_action_show(struct mddev * mddev,char * page)5378 last_sync_action_show(struct mddev *mddev, char *page)
5379 {
5380 	return sprintf(page, "%s\n",
5381 		       md_sync_action_name(mddev->last_sync_action));
5382 }
5383 
5384 static struct md_sysfs_entry md_last_scan_mode = __ATTR_RO(last_sync_action);
5385 
5386 static ssize_t
mismatch_cnt_show(struct mddev * mddev,char * page)5387 mismatch_cnt_show(struct mddev *mddev, char *page)
5388 {
5389 	return sprintf(page, "%llu\n",
5390 		       (unsigned long long)
5391 		       atomic64_read(&mddev->resync_mismatches));
5392 }
5393 
5394 static struct md_sysfs_entry md_mismatches = __ATTR_RO(mismatch_cnt);
5395 
5396 static ssize_t
sync_min_show(struct mddev * mddev,char * page)5397 sync_min_show(struct mddev *mddev, char *page)
5398 {
5399 	return sprintf(page, "%d (%s)\n", speed_min(mddev),
5400 		       mddev->sync_speed_min ? "local" : "system");
5401 }
5402 
5403 static ssize_t
sync_min_store(struct mddev * mddev,const char * buf,size_t len)5404 sync_min_store(struct mddev *mddev, const char *buf, size_t len)
5405 {
5406 	unsigned int min;
5407 	int rv;
5408 
5409 	if (strncmp(buf, "system", 6) == 0) {
5410 		min = 0;
5411 	} else {
5412 		rv = kstrtouint(buf, 10, &min);
5413 		if (rv < 0)
5414 			return rv;
5415 		if (min == 0)
5416 			return -EINVAL;
5417 	}
5418 	mddev->sync_speed_min = min;
5419 	return len;
5420 }
5421 
5422 static struct md_sysfs_entry md_sync_min =
5423 __ATTR(sync_speed_min, S_IRUGO|S_IWUSR, sync_min_show, sync_min_store);
5424 
5425 static ssize_t
sync_max_show(struct mddev * mddev,char * page)5426 sync_max_show(struct mddev *mddev, char *page)
5427 {
5428 	return sprintf(page, "%d (%s)\n", speed_max(mddev),
5429 		       mddev->sync_speed_max ? "local" : "system");
5430 }
5431 
5432 static ssize_t
sync_max_store(struct mddev * mddev,const char * buf,size_t len)5433 sync_max_store(struct mddev *mddev, const char *buf, size_t len)
5434 {
5435 	unsigned int max;
5436 	int rv;
5437 
5438 	if (strncmp(buf, "system", 6) == 0) {
5439 		max = 0;
5440 	} else {
5441 		rv = kstrtouint(buf, 10, &max);
5442 		if (rv < 0)
5443 			return rv;
5444 		if (max == 0)
5445 			return -EINVAL;
5446 	}
5447 	mddev->sync_speed_max = max;
5448 	return len;
5449 }
5450 
5451 static struct md_sysfs_entry md_sync_max =
5452 __ATTR(sync_speed_max, S_IRUGO|S_IWUSR, sync_max_show, sync_max_store);
5453 
5454 static ssize_t
sync_io_depth_show(struct mddev * mddev,char * page)5455 sync_io_depth_show(struct mddev *mddev, char *page)
5456 {
5457 	return sprintf(page, "%d (%s)\n", sync_io_depth(mddev),
5458 		       mddev->sync_io_depth ? "local" : "system");
5459 }
5460 
5461 static ssize_t
sync_io_depth_store(struct mddev * mddev,const char * buf,size_t len)5462 sync_io_depth_store(struct mddev *mddev, const char *buf, size_t len)
5463 {
5464 	unsigned int max;
5465 	int rv;
5466 
5467 	if (strncmp(buf, "system", 6) == 0) {
5468 		max = 0;
5469 	} else {
5470 		rv = kstrtouint(buf, 10, &max);
5471 		if (rv < 0)
5472 			return rv;
5473 		if (max == 0)
5474 			return -EINVAL;
5475 	}
5476 	mddev->sync_io_depth = max;
5477 	return len;
5478 }
5479 
5480 static struct md_sysfs_entry md_sync_io_depth =
5481 __ATTR_RW(sync_io_depth);
5482 
5483 static ssize_t
degraded_show(struct mddev * mddev,char * page)5484 degraded_show(struct mddev *mddev, char *page)
5485 {
5486 	return sprintf(page, "%d\n", mddev->degraded);
5487 }
5488 static struct md_sysfs_entry md_degraded = __ATTR_RO(degraded);
5489 
5490 static ssize_t
sync_force_parallel_show(struct mddev * mddev,char * page)5491 sync_force_parallel_show(struct mddev *mddev, char *page)
5492 {
5493 	return sprintf(page, "%d\n", mddev->parallel_resync);
5494 }
5495 
5496 static ssize_t
sync_force_parallel_store(struct mddev * mddev,const char * buf,size_t len)5497 sync_force_parallel_store(struct mddev *mddev, const char *buf, size_t len)
5498 {
5499 	long n;
5500 
5501 	if (kstrtol(buf, 10, &n))
5502 		return -EINVAL;
5503 
5504 	if (n != 0 && n != 1)
5505 		return -EINVAL;
5506 
5507 	mddev->parallel_resync = n;
5508 
5509 	if (mddev->sync_thread)
5510 		wake_up(&resync_wait);
5511 
5512 	return len;
5513 }
5514 
5515 /* force parallel resync, even with shared block devices */
5516 static struct md_sysfs_entry md_sync_force_parallel =
5517 __ATTR(sync_force_parallel, S_IRUGO|S_IWUSR,
5518        sync_force_parallel_show, sync_force_parallel_store);
5519 
5520 static ssize_t
sync_speed_show(struct mddev * mddev,char * page)5521 sync_speed_show(struct mddev *mddev, char *page)
5522 {
5523 	unsigned long resync, dt, db;
5524 	if (mddev->curr_resync == MD_RESYNC_NONE)
5525 		return sprintf(page, "none\n");
5526 	resync = mddev->curr_mark_cnt - atomic_read(&mddev->recovery_active);
5527 	dt = (jiffies - mddev->resync_mark) / HZ;
5528 	if (!dt) dt++;
5529 	db = resync - mddev->resync_mark_cnt;
5530 	return sprintf(page, "%lu\n", db/dt/2); /* K/sec */
5531 }
5532 
5533 static struct md_sysfs_entry md_sync_speed = __ATTR_RO(sync_speed);
5534 
5535 static ssize_t
sync_completed_show(struct mddev * mddev,char * page)5536 sync_completed_show(struct mddev *mddev, char *page)
5537 {
5538 	unsigned long long max_sectors, resync;
5539 
5540 	if (!test_bit(MD_RECOVERY_RUNNING, &mddev->recovery))
5541 		return sprintf(page, "none\n");
5542 
5543 	if (mddev->curr_resync == MD_RESYNC_YIELDED ||
5544 	    mddev->curr_resync == MD_RESYNC_DELAYED)
5545 		return sprintf(page, "delayed\n");
5546 
5547 	if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery) ||
5548 	    test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery))
5549 		max_sectors = mddev->resync_max_sectors;
5550 	else
5551 		max_sectors = mddev->dev_sectors;
5552 
5553 	resync = mddev->curr_resync_completed;
5554 	return sprintf(page, "%llu / %llu\n", resync, max_sectors);
5555 }
5556 
5557 static struct md_sysfs_entry md_sync_completed =
5558 	__ATTR_PREALLOC(sync_completed, S_IRUGO, sync_completed_show, NULL);
5559 
5560 static ssize_t
min_sync_show(struct mddev * mddev,char * page)5561 min_sync_show(struct mddev *mddev, char *page)
5562 {
5563 	return sprintf(page, "%llu\n",
5564 		       (unsigned long long)mddev->resync_min);
5565 }
5566 static ssize_t
min_sync_store(struct mddev * mddev,const char * buf,size_t len)5567 min_sync_store(struct mddev *mddev, const char *buf, size_t len)
5568 {
5569 	unsigned long long min;
5570 	int err;
5571 
5572 	if (kstrtoull(buf, 10, &min))
5573 		return -EINVAL;
5574 
5575 	spin_lock(&mddev->lock);
5576 	err = -EINVAL;
5577 	if (min > mddev->resync_max)
5578 		goto out_unlock;
5579 
5580 	err = -EBUSY;
5581 	if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery))
5582 		goto out_unlock;
5583 
5584 	/* Round down to multiple of 4K for safety */
5585 	mddev->resync_min = round_down(min, 8);
5586 	err = 0;
5587 
5588 out_unlock:
5589 	spin_unlock(&mddev->lock);
5590 	return err ?: len;
5591 }
5592 
5593 static struct md_sysfs_entry md_min_sync =
5594 __ATTR(sync_min, S_IRUGO|S_IWUSR, min_sync_show, min_sync_store);
5595 
5596 static ssize_t
max_sync_show(struct mddev * mddev,char * page)5597 max_sync_show(struct mddev *mddev, char *page)
5598 {
5599 	if (mddev->resync_max == MaxSector)
5600 		return sprintf(page, "max\n");
5601 	else
5602 		return sprintf(page, "%llu\n",
5603 			       (unsigned long long)mddev->resync_max);
5604 }
5605 static ssize_t
max_sync_store(struct mddev * mddev,const char * buf,size_t len)5606 max_sync_store(struct mddev *mddev, const char *buf, size_t len)
5607 {
5608 	int err;
5609 	spin_lock(&mddev->lock);
5610 	if (strncmp(buf, "max", 3) == 0)
5611 		mddev->resync_max = MaxSector;
5612 	else {
5613 		unsigned long long max;
5614 		int chunk;
5615 
5616 		err = -EINVAL;
5617 		if (kstrtoull(buf, 10, &max))
5618 			goto out_unlock;
5619 		if (max < mddev->resync_min)
5620 			goto out_unlock;
5621 
5622 		err = -EBUSY;
5623 		if (max < mddev->resync_max && md_is_rdwr(mddev) &&
5624 		    test_bit(MD_RECOVERY_RUNNING, &mddev->recovery))
5625 			goto out_unlock;
5626 
5627 		/* Must be a multiple of chunk_size */
5628 		chunk = mddev->chunk_sectors;
5629 		if (chunk) {
5630 			sector_t temp = max;
5631 
5632 			err = -EINVAL;
5633 			if (sector_div(temp, chunk))
5634 				goto out_unlock;
5635 		}
5636 		mddev->resync_max = max;
5637 	}
5638 	wake_up(&mddev->recovery_wait);
5639 	err = 0;
5640 out_unlock:
5641 	spin_unlock(&mddev->lock);
5642 	return err ?: len;
5643 }
5644 
5645 static struct md_sysfs_entry md_max_sync =
5646 __ATTR(sync_max, S_IRUGO|S_IWUSR, max_sync_show, max_sync_store);
5647 
5648 static ssize_t
suspend_lo_show(struct mddev * mddev,char * page)5649 suspend_lo_show(struct mddev *mddev, char *page)
5650 {
5651 	return sprintf(page, "%llu\n",
5652 		       (unsigned long long)READ_ONCE(mddev->suspend_lo));
5653 }
5654 
5655 static ssize_t
suspend_lo_store(struct mddev * mddev,const char * buf,size_t len)5656 suspend_lo_store(struct mddev *mddev, const char *buf, size_t len)
5657 {
5658 	unsigned long long new;
5659 	int err;
5660 
5661 	err = kstrtoull(buf, 10, &new);
5662 	if (err < 0)
5663 		return err;
5664 	if (new != (sector_t)new)
5665 		return -EINVAL;
5666 
5667 	err = mddev_suspend(mddev, true);
5668 	if (err)
5669 		return err;
5670 
5671 	WRITE_ONCE(mddev->suspend_lo, new);
5672 	mddev_resume(mddev);
5673 
5674 	return len;
5675 }
5676 static struct md_sysfs_entry md_suspend_lo =
5677 __ATTR(suspend_lo, S_IRUGO|S_IWUSR, suspend_lo_show, suspend_lo_store);
5678 
5679 static ssize_t
suspend_hi_show(struct mddev * mddev,char * page)5680 suspend_hi_show(struct mddev *mddev, char *page)
5681 {
5682 	return sprintf(page, "%llu\n",
5683 		       (unsigned long long)READ_ONCE(mddev->suspend_hi));
5684 }
5685 
5686 static ssize_t
suspend_hi_store(struct mddev * mddev,const char * buf,size_t len)5687 suspend_hi_store(struct mddev *mddev, const char *buf, size_t len)
5688 {
5689 	unsigned long long new;
5690 	int err;
5691 
5692 	err = kstrtoull(buf, 10, &new);
5693 	if (err < 0)
5694 		return err;
5695 	if (new != (sector_t)new)
5696 		return -EINVAL;
5697 
5698 	err = mddev_suspend(mddev, true);
5699 	if (err)
5700 		return err;
5701 
5702 	WRITE_ONCE(mddev->suspend_hi, new);
5703 	mddev_resume(mddev);
5704 
5705 	return len;
5706 }
5707 static struct md_sysfs_entry md_suspend_hi =
5708 __ATTR(suspend_hi, S_IRUGO|S_IWUSR, suspend_hi_show, suspend_hi_store);
5709 
5710 static ssize_t
reshape_position_show(struct mddev * mddev,char * page)5711 reshape_position_show(struct mddev *mddev, char *page)
5712 {
5713 	if (mddev->reshape_position != MaxSector)
5714 		return sprintf(page, "%llu\n",
5715 			       (unsigned long long)mddev->reshape_position);
5716 	strcpy(page, "none\n");
5717 	return 5;
5718 }
5719 
5720 static ssize_t
reshape_position_store(struct mddev * mddev,const char * buf,size_t len)5721 reshape_position_store(struct mddev *mddev, const char *buf, size_t len)
5722 {
5723 	struct md_rdev *rdev;
5724 	unsigned long long new;
5725 	int err;
5726 
5727 	err = kstrtoull(buf, 10, &new);
5728 	if (err < 0)
5729 		return err;
5730 	if (new != (sector_t)new)
5731 		return -EINVAL;
5732 	err = mddev_lock(mddev);
5733 	if (err)
5734 		return err;
5735 	err = -EBUSY;
5736 	if (mddev->pers)
5737 		goto unlock;
5738 	mddev->reshape_position = new;
5739 	mddev->delta_disks = 0;
5740 	mddev->reshape_backwards = 0;
5741 	mddev->new_level = mddev->level;
5742 	mddev->new_layout = mddev->layout;
5743 	mddev->new_chunk_sectors = mddev->chunk_sectors;
5744 	rdev_for_each(rdev, mddev)
5745 		rdev->new_data_offset = rdev->data_offset;
5746 	err = 0;
5747 unlock:
5748 	mddev_unlock(mddev);
5749 	return err ?: len;
5750 }
5751 
5752 static struct md_sysfs_entry md_reshape_position =
5753 __ATTR(reshape_position, S_IRUGO|S_IWUSR, reshape_position_show,
5754        reshape_position_store);
5755 
5756 static ssize_t
reshape_direction_show(struct mddev * mddev,char * page)5757 reshape_direction_show(struct mddev *mddev, char *page)
5758 {
5759 	return sprintf(page, "%s\n",
5760 		       mddev->reshape_backwards ? "backwards" : "forwards");
5761 }
5762 
5763 static ssize_t
reshape_direction_store(struct mddev * mddev,const char * buf,size_t len)5764 reshape_direction_store(struct mddev *mddev, const char *buf, size_t len)
5765 {
5766 	int backwards = 0;
5767 	int err;
5768 
5769 	if (cmd_match(buf, "forwards"))
5770 		backwards = 0;
5771 	else if (cmd_match(buf, "backwards"))
5772 		backwards = 1;
5773 	else
5774 		return -EINVAL;
5775 	if (mddev->reshape_backwards == backwards)
5776 		return len;
5777 
5778 	err = mddev_lock(mddev);
5779 	if (err)
5780 		return err;
5781 	/* check if we are allowed to change */
5782 	if (mddev->delta_disks)
5783 		err = -EBUSY;
5784 	else if (mddev->persistent &&
5785 	    mddev->major_version == 0)
5786 		err =  -EINVAL;
5787 	else
5788 		mddev->reshape_backwards = backwards;
5789 	mddev_unlock(mddev);
5790 	return err ?: len;
5791 }
5792 
5793 static struct md_sysfs_entry md_reshape_direction =
5794 __ATTR(reshape_direction, S_IRUGO|S_IWUSR, reshape_direction_show,
5795        reshape_direction_store);
5796 
5797 static ssize_t
array_size_show(struct mddev * mddev,char * page)5798 array_size_show(struct mddev *mddev, char *page)
5799 {
5800 	if (mddev->external_size)
5801 		return sprintf(page, "%llu\n",
5802 			       (unsigned long long)mddev->array_sectors/2);
5803 	else
5804 		return sprintf(page, "default\n");
5805 }
5806 
5807 static ssize_t
array_size_store(struct mddev * mddev,const char * buf,size_t len)5808 array_size_store(struct mddev *mddev, const char *buf, size_t len)
5809 {
5810 	sector_t sectors;
5811 	int err;
5812 
5813 	err = mddev_lock(mddev);
5814 	if (err)
5815 		return err;
5816 
5817 	/* cluster raid doesn't support change array_sectors */
5818 	if (mddev_is_clustered(mddev)) {
5819 		mddev_unlock(mddev);
5820 		return -EINVAL;
5821 	}
5822 
5823 	if (strncmp(buf, "default", 7) == 0) {
5824 		if (mddev->pers)
5825 			sectors = mddev->pers->size(mddev, 0, 0);
5826 		else
5827 			sectors = mddev->array_sectors;
5828 
5829 		mddev->external_size = 0;
5830 	} else {
5831 		if (strict_blocks_to_sectors(buf, &sectors) < 0)
5832 			err = -EINVAL;
5833 		else if (mddev->pers && mddev->pers->size(mddev, 0, 0) < sectors)
5834 			err = -E2BIG;
5835 		else
5836 			mddev->external_size = 1;
5837 	}
5838 
5839 	if (!err) {
5840 		mddev->array_sectors = sectors;
5841 		if (mddev->pers)
5842 			set_capacity_and_notify(mddev->gendisk,
5843 						mddev->array_sectors);
5844 	}
5845 	mddev_unlock(mddev);
5846 	return err ?: len;
5847 }
5848 
5849 static struct md_sysfs_entry md_array_size =
5850 __ATTR(array_size, S_IRUGO|S_IWUSR, array_size_show,
5851        array_size_store);
5852 
5853 static ssize_t
consistency_policy_show(struct mddev * mddev,char * page)5854 consistency_policy_show(struct mddev *mddev, char *page)
5855 {
5856 	int ret;
5857 
5858 	if (test_bit(MD_HAS_JOURNAL, &mddev->flags)) {
5859 		ret = sprintf(page, "journal\n");
5860 	} else if (test_bit(MD_HAS_PPL, &mddev->flags)) {
5861 		ret = sprintf(page, "ppl\n");
5862 	} else if (mddev->bitmap) {
5863 		ret = sprintf(page, "bitmap\n");
5864 	} else if (mddev->pers) {
5865 		if (mddev->pers->sync_request)
5866 			ret = sprintf(page, "resync\n");
5867 		else
5868 			ret = sprintf(page, "none\n");
5869 	} else {
5870 		ret = sprintf(page, "unknown\n");
5871 	}
5872 
5873 	return ret;
5874 }
5875 
5876 static ssize_t
consistency_policy_store(struct mddev * mddev,const char * buf,size_t len)5877 consistency_policy_store(struct mddev *mddev, const char *buf, size_t len)
5878 {
5879 	int err = 0;
5880 
5881 	if (mddev->pers) {
5882 		if (mddev->pers->change_consistency_policy)
5883 			err = mddev->pers->change_consistency_policy(mddev, buf);
5884 		else
5885 			err = -EBUSY;
5886 	} else if (mddev->external && strncmp(buf, "ppl", 3) == 0) {
5887 		set_bit(MD_HAS_PPL, &mddev->flags);
5888 	} else {
5889 		err = -EINVAL;
5890 	}
5891 
5892 	return err ? err : len;
5893 }
5894 
5895 static struct md_sysfs_entry md_consistency_policy =
5896 __ATTR(consistency_policy, S_IRUGO | S_IWUSR, consistency_policy_show,
5897        consistency_policy_store);
5898 
fail_last_dev_show(struct mddev * mddev,char * page)5899 static ssize_t fail_last_dev_show(struct mddev *mddev, char *page)
5900 {
5901 	return sprintf(page, "%d\n", test_bit(MD_FAILLAST_DEV, &mddev->flags));
5902 }
5903 
5904 /*
5905  * Setting MD_FAILLAST_DEV to allow last device to be forcibly removed
5906  * from RAID1/RAID10.
5907  */
5908 static ssize_t
fail_last_dev_store(struct mddev * mddev,const char * buf,size_t len)5909 fail_last_dev_store(struct mddev *mddev, const char *buf, size_t len)
5910 {
5911 	int ret;
5912 	bool value;
5913 
5914 	ret = kstrtobool(buf, &value);
5915 	if (ret)
5916 		return ret;
5917 
5918 	if (value)
5919 		set_bit(MD_FAILLAST_DEV, &mddev->flags);
5920 	else
5921 		clear_bit(MD_FAILLAST_DEV, &mddev->flags);
5922 
5923 	return len;
5924 }
5925 static struct md_sysfs_entry md_fail_last_dev =
5926 __ATTR(fail_last_dev, S_IRUGO | S_IWUSR, fail_last_dev_show,
5927        fail_last_dev_store);
5928 
serialize_policy_show(struct mddev * mddev,char * page)5929 static ssize_t serialize_policy_show(struct mddev *mddev, char *page)
5930 {
5931 	if (mddev->pers == NULL || (mddev->pers->head.id != ID_RAID1))
5932 		return sprintf(page, "n/a\n");
5933 	else
5934 		return sprintf(page, "%d\n",
5935 			       test_bit(MD_SERIALIZE_POLICY, &mddev->flags));
5936 }
5937 
5938 /*
5939  * Setting MD_SERIALIZE_POLICY enforce write IO is not reordered
5940  * for raid1.
5941  */
5942 static ssize_t
serialize_policy_store(struct mddev * mddev,const char * buf,size_t len)5943 serialize_policy_store(struct mddev *mddev, const char *buf, size_t len)
5944 {
5945 	int err;
5946 	bool value;
5947 
5948 	err = kstrtobool(buf, &value);
5949 	if (err)
5950 		return err;
5951 
5952 	if (value == test_bit(MD_SERIALIZE_POLICY, &mddev->flags))
5953 		return len;
5954 
5955 	err = mddev_suspend_and_lock(mddev);
5956 	if (err)
5957 		return err;
5958 	if (mddev->pers == NULL || (mddev->pers->head.id != ID_RAID1)) {
5959 		pr_err("md: serialize_policy is only effective for raid1\n");
5960 		err = -EINVAL;
5961 		goto unlock;
5962 	}
5963 
5964 	if (value) {
5965 		mddev_create_serial_pool(mddev, NULL);
5966 		set_bit(MD_SERIALIZE_POLICY, &mddev->flags);
5967 	} else {
5968 		mddev_destroy_serial_pool(mddev, NULL);
5969 		clear_bit(MD_SERIALIZE_POLICY, &mddev->flags);
5970 	}
5971 unlock:
5972 	mddev_unlock_and_resume(mddev);
5973 	return err ?: len;
5974 }
5975 
5976 static struct md_sysfs_entry md_serialize_policy =
5977 __ATTR(serialize_policy, S_IRUGO | S_IWUSR, serialize_policy_show,
5978        serialize_policy_store);
5979 
mddev_set_logical_block_size(struct mddev * mddev,unsigned int lbs)5980 static int mddev_set_logical_block_size(struct mddev *mddev,
5981 				unsigned int lbs)
5982 {
5983 	int err = 0;
5984 	struct queue_limits lim;
5985 
5986 	if (queue_logical_block_size(mddev->gendisk->queue) >= lbs) {
5987 		pr_err("%s: Cannot set LBS smaller than mddev LBS %u\n",
5988 		       mdname(mddev), lbs);
5989 		return -EINVAL;
5990 	}
5991 
5992 	lim = queue_limits_start_update(mddev->gendisk->queue);
5993 	lim.logical_block_size = lbs;
5994 	pr_info("%s: logical_block_size is changed, data may be lost\n",
5995 		mdname(mddev));
5996 	err = queue_limits_commit_update(mddev->gendisk->queue, &lim);
5997 	if (err)
5998 		return err;
5999 
6000 	mddev->logical_block_size = lbs;
6001 	/* New lbs will be written to superblock after array is running */
6002 	set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags);
6003 	return 0;
6004 }
6005 
6006 static ssize_t
lbs_show(struct mddev * mddev,char * page)6007 lbs_show(struct mddev *mddev, char *page)
6008 {
6009 	return sprintf(page, "%u\n", mddev->logical_block_size);
6010 }
6011 
6012 static ssize_t
lbs_store(struct mddev * mddev,const char * buf,size_t len)6013 lbs_store(struct mddev *mddev, const char *buf, size_t len)
6014 {
6015 	unsigned int lbs;
6016 	int err = -EBUSY;
6017 
6018 	/* Only 1.x meta supports configurable LBS */
6019 	if (mddev->major_version == 0)
6020 		return -EINVAL;
6021 
6022 	err = kstrtouint(buf, 10, &lbs);
6023 	if (err < 0)
6024 		return -EINVAL;
6025 
6026 	if (mddev->pers) {
6027 		unsigned int curr_lbs;
6028 
6029 		if (mddev->logical_block_size)
6030 			return -EBUSY;
6031 		/*
6032 		 * To fix forward compatibility issues, LBS is not
6033 		 * configured for arrays from old kernels (<=6.18) by default.
6034 		 * If the user confirms no rollback to old kernels,
6035 		 * enable LBS by writing current LBS — to prevent data
6036 		 * loss from LBS changes.
6037 		 */
6038 		curr_lbs = queue_logical_block_size(mddev->gendisk->queue);
6039 		if (lbs != curr_lbs)
6040 			return -EINVAL;
6041 
6042 		mddev->logical_block_size = curr_lbs;
6043 		set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags);
6044 		pr_info("%s: logical block size configured successfully, array will not be assembled in old kernels (<= 6.18)\n",
6045 			mdname(mddev));
6046 		return len;
6047 	}
6048 
6049 	err = mddev_lock(mddev);
6050 	if (err)
6051 		goto unlock;
6052 
6053 	err = mddev_set_logical_block_size(mddev, lbs);
6054 
6055 unlock:
6056 	mddev_unlock(mddev);
6057 	return err ?: len;
6058 }
6059 
6060 static struct md_sysfs_entry md_logical_block_size =
6061 __ATTR(logical_block_size, 0644, lbs_show, lbs_store);
6062 
6063 static struct attribute *md_default_attrs[] = {
6064 	&md_level.attr,
6065 	&md_new_level.attr,
6066 	&md_bitmap_type.attr,
6067 	&md_layout.attr,
6068 	&md_raid_disks.attr,
6069 	&md_uuid.attr,
6070 	&md_chunk_size.attr,
6071 	&md_size.attr,
6072 	&md_resync_start.attr,
6073 	&md_metadata.attr,
6074 	&md_new_device.attr,
6075 	&md_safe_delay.attr,
6076 	&md_array_state.attr,
6077 	&md_reshape_position.attr,
6078 	&md_reshape_direction.attr,
6079 	&md_array_size.attr,
6080 	&max_corr_read_errors.attr,
6081 	&md_consistency_policy.attr,
6082 	&md_fail_last_dev.attr,
6083 	&md_serialize_policy.attr,
6084 	&md_logical_block_size.attr,
6085 	NULL,
6086 };
6087 ATTRIBUTE_GROUPS(md_default);
6088 
6089 static struct attribute *md_redundancy_attrs[] = {
6090 	&md_scan_mode.attr,
6091 	&md_last_scan_mode.attr,
6092 	&md_mismatches.attr,
6093 	&md_sync_min.attr,
6094 	&md_sync_max.attr,
6095 	&md_sync_io_depth.attr,
6096 	&md_sync_speed.attr,
6097 	&md_sync_force_parallel.attr,
6098 	&md_sync_completed.attr,
6099 	&md_min_sync.attr,
6100 	&md_max_sync.attr,
6101 	&md_suspend_lo.attr,
6102 	&md_suspend_hi.attr,
6103 	&md_bitmap.attr,
6104 	&md_degraded.attr,
6105 	NULL,
6106 };
6107 static const struct attribute_group md_redundancy_group = {
6108 	.name = NULL,
6109 	.attrs = md_redundancy_attrs,
6110 };
6111 
6112 static ssize_t
md_attr_show(struct kobject * kobj,struct attribute * attr,char * page)6113 md_attr_show(struct kobject *kobj, struct attribute *attr, char *page)
6114 {
6115 	struct md_sysfs_entry *entry = container_of(attr, struct md_sysfs_entry, attr);
6116 	struct mddev *mddev = container_of(kobj, struct mddev, kobj);
6117 	ssize_t rv;
6118 
6119 	if (!entry->show)
6120 		return -EIO;
6121 	spin_lock(&all_mddevs_lock);
6122 	if (!mddev_get(mddev)) {
6123 		spin_unlock(&all_mddevs_lock);
6124 		return -EBUSY;
6125 	}
6126 	spin_unlock(&all_mddevs_lock);
6127 
6128 	rv = entry->show(mddev, page);
6129 	mddev_put(mddev);
6130 	return rv;
6131 }
6132 
6133 static ssize_t
md_attr_store(struct kobject * kobj,struct attribute * attr,const char * page,size_t length)6134 md_attr_store(struct kobject *kobj, struct attribute *attr,
6135 	      const char *page, size_t length)
6136 {
6137 	struct md_sysfs_entry *entry = container_of(attr, struct md_sysfs_entry, attr);
6138 	struct mddev *mddev = container_of(kobj, struct mddev, kobj);
6139 	ssize_t rv;
6140 	struct kernfs_node *kn = NULL;
6141 
6142 	if (!entry->store)
6143 		return -EIO;
6144 	if (!capable(CAP_SYS_ADMIN))
6145 		return -EACCES;
6146 
6147 	if (entry->store == array_state_store && cmd_match(page, "clear"))
6148 		kn = sysfs_break_active_protection(kobj, attr);
6149 
6150 	spin_lock(&all_mddevs_lock);
6151 	if (!mddev_get(mddev)) {
6152 		spin_unlock(&all_mddevs_lock);
6153 		if (kn)
6154 			sysfs_unbreak_active_protection(kn);
6155 		return -EBUSY;
6156 	}
6157 	spin_unlock(&all_mddevs_lock);
6158 	rv = entry->store(mddev, page, length);
6159 
6160 	/*
6161 	 * For "array_state=clear", dropping the extra kobject reference from
6162 	 * sysfs_break_active_protection() can trigger md kobject deletion.
6163 	 * Restore active protection before mddev_put() so deletion happens
6164 	 * after the sysfs write path fully unwinds.
6165 	 */
6166 	if (kn)
6167 		sysfs_unbreak_active_protection(kn);
6168 	mddev_put(mddev);
6169 
6170 	return rv;
6171 }
6172 
md_kobj_release(struct kobject * ko)6173 static void md_kobj_release(struct kobject *ko)
6174 {
6175 	struct mddev *mddev = container_of(ko, struct mddev, kobj);
6176 
6177 	if (legacy_async_del_gendisk) {
6178 		if (mddev->sysfs_state)
6179 			sysfs_put(mddev->sysfs_state);
6180 		if (mddev->sysfs_level)
6181 			sysfs_put(mddev->sysfs_level);
6182 		del_gendisk(mddev->gendisk);
6183 	}
6184 	put_disk(mddev->gendisk);
6185 }
6186 
6187 static const struct sysfs_ops md_sysfs_ops = {
6188 	.show	= md_attr_show,
6189 	.store	= md_attr_store,
6190 };
6191 static const struct kobj_type md_ktype = {
6192 	.release	= md_kobj_release,
6193 	.sysfs_ops	= &md_sysfs_ops,
6194 	.default_groups	= md_default_groups,
6195 };
6196 
6197 int mdp_major = 0;
6198 
6199 /* stack the limit for all rdevs into lim */
mddev_stack_rdev_limits(struct mddev * mddev,struct queue_limits * lim,unsigned int flags)6200 int mddev_stack_rdev_limits(struct mddev *mddev, struct queue_limits *lim,
6201 		unsigned int flags)
6202 {
6203 	struct md_rdev *rdev;
6204 
6205 	rdev_for_each(rdev, mddev) {
6206 		queue_limits_stack_bdev(lim, rdev->bdev, rdev->data_offset,
6207 					mddev->gendisk->disk_name);
6208 		if ((flags & MDDEV_STACK_INTEGRITY) &&
6209 		    !queue_limits_stack_integrity_bdev(lim, rdev->bdev))
6210 			return -EINVAL;
6211 	}
6212 
6213 	/*
6214 	 * Before RAID adding folio support, the logical_block_size
6215 	 * should be smaller than the page size.
6216 	 */
6217 	if (lim->logical_block_size > PAGE_SIZE) {
6218 		pr_err("%s: logical_block_size must not larger than PAGE_SIZE\n",
6219 			mdname(mddev));
6220 		return -EINVAL;
6221 	}
6222 
6223 	/* Only 1.x meta needs to set logical block size */
6224 	if (mddev->major_version == 0)
6225 		return 0;
6226 
6227 	/*
6228 	 * Fix forward compatibility issue. Only set LBS by default for
6229 	 * new arrays, mddev->events == 0 indicates the array was just
6230 	 * created. When assembling an array, read LBS from the superblock
6231 	 * instead — LBS is 0 in superblocks created by old kernels.
6232 	 */
6233 	if (!mddev->events) {
6234 		pr_info("%s: array will not be assembled in old kernels that lack configurable LBS support (<= 6.18)\n",
6235 			mdname(mddev));
6236 		mddev->logical_block_size = lim->logical_block_size;
6237 	}
6238 
6239 	if (!mddev->logical_block_size)
6240 		pr_warn("%s: echo current LBS to md/logical_block_size to prevent data loss issues from LBS changes.\n"
6241 			"\tNote: After setting, array will not be assembled in old kernels (<= 6.18)\n",
6242 			mdname(mddev));
6243 
6244 	return 0;
6245 }
6246 EXPORT_SYMBOL_GPL(mddev_stack_rdev_limits);
6247 
6248 /* apply the extra stacking limits from a new rdev into mddev */
mddev_stack_new_rdev(struct mddev * mddev,struct md_rdev * rdev)6249 int mddev_stack_new_rdev(struct mddev *mddev, struct md_rdev *rdev)
6250 {
6251 	struct queue_limits lim;
6252 
6253 	if (mddev_is_dm(mddev))
6254 		return 0;
6255 
6256 	if (queue_logical_block_size(rdev->bdev->bd_disk->queue) >
6257 	    queue_logical_block_size(mddev->gendisk->queue)) {
6258 		pr_err("%s: incompatible logical_block_size, can not add\n",
6259 		       mdname(mddev));
6260 		return -EINVAL;
6261 	}
6262 
6263 	lim = queue_limits_start_update(mddev->gendisk->queue);
6264 	queue_limits_stack_bdev(&lim, rdev->bdev, rdev->data_offset,
6265 				mddev->gendisk->disk_name);
6266 
6267 	if (!queue_limits_stack_integrity_bdev(&lim, rdev->bdev)) {
6268 		pr_err("%s: incompatible integrity profile for %pg\n",
6269 		       mdname(mddev), rdev->bdev);
6270 		queue_limits_cancel_update(mddev->gendisk->queue);
6271 		return -ENXIO;
6272 	}
6273 
6274 	return queue_limits_commit_update(mddev->gendisk->queue, &lim);
6275 }
6276 EXPORT_SYMBOL_GPL(mddev_stack_new_rdev);
6277 
6278 /* update the optimal I/O size after a reshape */
mddev_update_io_opt(struct mddev * mddev,unsigned int nr_stripes)6279 void mddev_update_io_opt(struct mddev *mddev, unsigned int nr_stripes)
6280 {
6281 	struct queue_limits lim;
6282 
6283 	if (mddev_is_dm(mddev))
6284 		return;
6285 
6286 	/* don't bother updating io_opt if we can't suspend the array */
6287 	if (mddev_suspend(mddev, false) < 0)
6288 		return;
6289 	lim = queue_limits_start_update(mddev->gendisk->queue);
6290 	lim.io_opt = lim.io_min * nr_stripes;
6291 	queue_limits_commit_update(mddev->gendisk->queue, &lim);
6292 	mddev_resume(mddev);
6293 }
6294 EXPORT_SYMBOL_GPL(mddev_update_io_opt);
6295 
mddev_delayed_delete(struct work_struct * ws)6296 static void mddev_delayed_delete(struct work_struct *ws)
6297 {
6298 	struct mddev *mddev = container_of(ws, struct mddev, del_work);
6299 
6300 	kobject_put(&mddev->kobj);
6301 }
6302 
md_init_stacking_limits(struct queue_limits * lim)6303 void md_init_stacking_limits(struct queue_limits *lim)
6304 {
6305 	blk_set_stacking_limits(lim);
6306 	lim->features = BLK_FEAT_WRITE_CACHE | BLK_FEAT_FUA |
6307 			BLK_FEAT_IO_STAT;
6308 }
6309 EXPORT_SYMBOL_GPL(md_init_stacking_limits);
6310 
md_alloc(dev_t dev,char * name)6311 struct mddev *md_alloc(dev_t dev, char *name)
6312 {
6313 	/*
6314 	 * If dev is zero, name is the name of a device to allocate with
6315 	 * an arbitrary minor number.  It will be "md_???"
6316 	 * If dev is non-zero it must be a device number with a MAJOR of
6317 	 * MD_MAJOR or mdp_major.  In this case, if "name" is NULL, then
6318 	 * the device is being created by opening a node in /dev.
6319 	 * If "name" is not NULL, the device is being created by
6320 	 * writing to /sys/module/md_mod/parameters/new_array.
6321 	 */
6322 	static DEFINE_MUTEX(disks_mutex);
6323 	struct mddev *mddev;
6324 	struct gendisk *disk;
6325 	int partitioned;
6326 	int shift;
6327 	int unit;
6328 	int error;
6329 
6330 	/*
6331 	 * Wait for any previous instance of this device to be completely
6332 	 * removed (mddev_delayed_delete).
6333 	 */
6334 	flush_workqueue(md_misc_wq);
6335 
6336 	mutex_lock(&disks_mutex);
6337 	mddev = mddev_alloc(dev);
6338 	if (IS_ERR(mddev)) {
6339 		error = PTR_ERR(mddev);
6340 		goto out_unlock;
6341 	}
6342 
6343 	partitioned = (MAJOR(mddev->unit) != MD_MAJOR);
6344 	shift = partitioned ? MdpMinorShift : 0;
6345 	unit = MINOR(mddev->unit) >> shift;
6346 
6347 	if (name && !dev) {
6348 		/* Need to ensure that 'name' is not a duplicate.
6349 		 */
6350 		struct mddev *mddev2;
6351 		spin_lock(&all_mddevs_lock);
6352 
6353 		list_for_each_entry(mddev2, &all_mddevs, all_mddevs)
6354 			if (mddev2->gendisk &&
6355 			    strcmp(mddev2->gendisk->disk_name, name) == 0) {
6356 				spin_unlock(&all_mddevs_lock);
6357 				error = -EEXIST;
6358 				goto out_free_mddev;
6359 			}
6360 		spin_unlock(&all_mddevs_lock);
6361 	}
6362 	if (name && dev)
6363 		/*
6364 		 * Creating /dev/mdNNN via "newarray", so adjust hold_active.
6365 		 */
6366 		mddev->hold_active = UNTIL_STOP;
6367 
6368 	disk = blk_alloc_disk(NULL, NUMA_NO_NODE);
6369 	if (IS_ERR(disk)) {
6370 		error = PTR_ERR(disk);
6371 		goto out_free_mddev;
6372 	}
6373 
6374 	disk->major = MAJOR(mddev->unit);
6375 	disk->first_minor = unit << shift;
6376 	disk->minors = 1 << shift;
6377 	if (name)
6378 		strcpy(disk->disk_name, name);
6379 	else if (partitioned)
6380 		sprintf(disk->disk_name, "md_d%d", unit);
6381 	else
6382 		sprintf(disk->disk_name, "md%d", unit);
6383 	disk->fops = &md_fops;
6384 	disk->private_data = mddev;
6385 
6386 	disk->events |= DISK_EVENT_MEDIA_CHANGE;
6387 	mddev->gendisk = disk;
6388 	error = add_disk(disk);
6389 	if (error)
6390 		goto out_put_disk;
6391 
6392 	kobject_init(&mddev->kobj, &md_ktype);
6393 	error = kobject_add(&mddev->kobj, &disk_to_dev(disk)->kobj, "%s", "md");
6394 	if (error) {
6395 		/*
6396 		 * The disk is already live at this point.  Clear the hold flag
6397 		 * and let mddev_put take care of the deletion, as it isn't any
6398 		 * different from a normal close on last release now.
6399 		 */
6400 		mddev->hold_active = 0;
6401 		mutex_unlock(&disks_mutex);
6402 		mddev_put(mddev);
6403 		return ERR_PTR(error);
6404 	}
6405 
6406 	kobject_uevent(&mddev->kobj, KOBJ_ADD);
6407 	mddev->sysfs_state = sysfs_get_dirent_safe(mddev->kobj.sd, "array_state");
6408 	mddev->sysfs_level = sysfs_get_dirent_safe(mddev->kobj.sd, "level");
6409 	mutex_unlock(&disks_mutex);
6410 	return mddev;
6411 
6412 out_put_disk:
6413 	put_disk(disk);
6414 out_free_mddev:
6415 	mddev_free(mddev);
6416 out_unlock:
6417 	mutex_unlock(&disks_mutex);
6418 	return ERR_PTR(error);
6419 }
6420 
md_alloc_and_put(dev_t dev,char * name)6421 static int md_alloc_and_put(dev_t dev, char *name)
6422 {
6423 	struct mddev *mddev = md_alloc(dev, name);
6424 
6425 	if (legacy_async_del_gendisk)
6426 		pr_warn("md: async del_gendisk mode will be removed in future, please upgrade to mdadm-4.5+\n");
6427 
6428 	if (IS_ERR(mddev))
6429 		return PTR_ERR(mddev);
6430 	mddev_put(mddev);
6431 	return 0;
6432 }
6433 
md_probe(dev_t dev)6434 static void md_probe(dev_t dev)
6435 {
6436 	if (MAJOR(dev) == MD_MAJOR && MINOR(dev) >= 512)
6437 		return;
6438 	if (create_on_open)
6439 		md_alloc_and_put(dev, NULL);
6440 }
6441 
add_named_array(const char * val,const struct kernel_param * kp)6442 static int add_named_array(const char *val, const struct kernel_param *kp)
6443 {
6444 	/*
6445 	 * val must be "md_*" or "mdNNN".
6446 	 * For "md_*" we allocate an array with a large free minor number, and
6447 	 * set the name to val.  val must not already be an active name.
6448 	 * For "mdNNN" we allocate an array with the minor number NNN
6449 	 * which must not already be in use.
6450 	 */
6451 	int len = strlen(val);
6452 	char buf[DISK_NAME_LEN];
6453 	unsigned long devnum;
6454 
6455 	while (len && val[len-1] == '\n')
6456 		len--;
6457 	if (len >= DISK_NAME_LEN)
6458 		return -E2BIG;
6459 	strscpy(buf, val, len+1);
6460 	if (strncmp(buf, "md_", 3) == 0)
6461 		return md_alloc_and_put(0, buf);
6462 	if (strncmp(buf, "md", 2) == 0 &&
6463 	    isdigit(buf[2]) &&
6464 	    kstrtoul(buf+2, 10, &devnum) == 0 &&
6465 	    devnum <= MINORMASK)
6466 		return md_alloc_and_put(MKDEV(MD_MAJOR, devnum), NULL);
6467 
6468 	return -EINVAL;
6469 }
6470 
md_safemode_timeout(struct timer_list * t)6471 static void md_safemode_timeout(struct timer_list *t)
6472 {
6473 	struct mddev *mddev = timer_container_of(mddev, t, safemode_timer);
6474 
6475 	mddev->safemode = 1;
6476 	if (mddev->external)
6477 		sysfs_notify_dirent_safe(mddev->sysfs_state);
6478 
6479 	md_wakeup_thread(mddev->thread);
6480 }
6481 
6482 static int start_dirty_degraded;
6483 
6484 /*
6485  * Read bitmap superblock and return the bitmap_id based on disk version.
6486  * This is used as fallback when default bitmap version and on-disk version
6487  * doesn't match, and mdadm is not the latest version to set bitmap_type.
6488  */
md_bitmap_get_id_from_sb(struct mddev * mddev)6489 static enum md_submodule_id md_bitmap_get_id_from_sb(struct mddev *mddev)
6490 {
6491 	struct md_rdev *rdev;
6492 	struct page *sb_page;
6493 	bitmap_super_t *sb;
6494 	enum md_submodule_id id = ID_BITMAP_NONE;
6495 	sector_t sector;
6496 	u32 version;
6497 
6498 	if (!mddev->bitmap_info.offset)
6499 		return ID_BITMAP_NONE;
6500 
6501 	sb_page = alloc_page(GFP_KERNEL);
6502 	if (!sb_page) {
6503 		pr_warn("md: %s: failed to allocate memory for bitmap\n",
6504 			mdname(mddev));
6505 		return ID_BITMAP_NONE;
6506 	}
6507 
6508 	sector = mddev->bitmap_info.offset;
6509 
6510 	rdev_for_each(rdev, mddev) {
6511 		u32 iosize;
6512 
6513 		if (!test_bit(In_sync, &rdev->flags) ||
6514 		    test_bit(Faulty, &rdev->flags) ||
6515 		    test_bit(Bitmap_sync, &rdev->flags))
6516 			continue;
6517 
6518 		iosize = roundup(sizeof(bitmap_super_t),
6519 				 bdev_logical_block_size(rdev->bdev));
6520 		if (sync_page_io(rdev, sector, iosize, sb_page, REQ_OP_READ,
6521 				 true))
6522 			goto read_ok;
6523 	}
6524 	pr_warn("md: %s: failed to read bitmap from any device\n",
6525 		mdname(mddev));
6526 	goto out;
6527 
6528 read_ok:
6529 	sb = kmap_local_page(sb_page);
6530 	if (sb->magic != cpu_to_le32(BITMAP_MAGIC)) {
6531 		pr_warn("md: %s: invalid bitmap magic 0x%x\n",
6532 			mdname(mddev), le32_to_cpu(sb->magic));
6533 		goto out_unmap;
6534 	}
6535 
6536 	version = le32_to_cpu(sb->version);
6537 	switch (version) {
6538 	case BITMAP_MAJOR_LO:
6539 	case BITMAP_MAJOR_HI:
6540 	case BITMAP_MAJOR_CLUSTERED:
6541 		id = ID_BITMAP;
6542 		break;
6543 	case BITMAP_MAJOR_LOCKLESS:
6544 		id = ID_LLBITMAP;
6545 		break;
6546 	default:
6547 		pr_warn("md: %s: unknown bitmap version %u\n",
6548 			mdname(mddev), version);
6549 		break;
6550 	}
6551 
6552 out_unmap:
6553 	kunmap_local(sb);
6554 out:
6555 	__free_page(sb_page);
6556 	return id;
6557 }
6558 
md_bitmap_create_nosysfs(struct mddev * mddev)6559 int md_bitmap_create_nosysfs(struct mddev *mddev)
6560 {
6561 	enum md_submodule_id orig_id = mddev->bitmap_id;
6562 	enum md_submodule_id sb_id;
6563 	int err;
6564 
6565 	if (mddev->bitmap_id == ID_BITMAP_NONE)
6566 		return -EINVAL;
6567 
6568 	if (!mddev_set_bitmap_ops_nosysfs(mddev)) {
6569 		mddev->bitmap_id = orig_id;
6570 		return -ENOENT;
6571 	}
6572 
6573 	err = mddev->bitmap_ops->create(mddev);
6574 	if (!err)
6575 		return 0;
6576 
6577 	/*
6578 	 * Create failed, if default bitmap version and on-disk version
6579 	 * doesn't match, and mdadm is not the latest version to set
6580 	 * bitmap_type, set bitmap_ops based on the disk version.
6581 	 */
6582 	mddev->bitmap_ops = NULL;
6583 
6584 	sb_id = md_bitmap_get_id_from_sb(mddev);
6585 	if (sb_id == ID_BITMAP_NONE || sb_id == orig_id) {
6586 		mddev->bitmap_id = orig_id;
6587 		return err;
6588 	}
6589 
6590 	pr_info("md: %s: bitmap version mismatch, switching from %d to %d\n",
6591 		mdname(mddev), orig_id, sb_id);
6592 
6593 	mddev->bitmap_id = sb_id;
6594 	if (!mddev_set_bitmap_ops_nosysfs(mddev)) {
6595 		mddev->bitmap_id = orig_id;
6596 		return -ENOENT;
6597 	}
6598 
6599 	err = mddev->bitmap_ops->create(mddev);
6600 	if (err) {
6601 		mddev->bitmap_ops = NULL;
6602 		mddev->bitmap_id = orig_id;
6603 	}
6604 
6605 	return err;
6606 }
6607 
md_bitmap_create(struct mddev * mddev)6608 static int md_bitmap_create(struct mddev *mddev)
6609 {
6610 	int err;
6611 
6612 	err = md_bitmap_create_nosysfs(mddev);
6613 	if (err)
6614 		return err;
6615 
6616 	if (!mddev_is_dm(mddev) && mddev->bitmap_ops->groups)
6617 		md_bitmap_sysfs_add(mddev);
6618 
6619 	return 0;
6620 }
6621 
md_bitmap_destroy_nosysfs(struct mddev * mddev)6622 void md_bitmap_destroy_nosysfs(struct mddev *mddev)
6623 {
6624 	if (!md_bitmap_registered(mddev))
6625 		return;
6626 
6627 	mddev->bitmap_ops->destroy(mddev);
6628 	mddev->bitmap_ops = NULL;
6629 }
6630 
md_bitmap_destroy(struct mddev * mddev)6631 static void md_bitmap_destroy(struct mddev *mddev)
6632 {
6633 	if (!mddev_is_dm(mddev) && mddev->bitmap_ops &&
6634 	    mddev->bitmap_ops->groups)
6635 		md_bitmap_sysfs_del(mddev);
6636 
6637 	md_bitmap_destroy_nosysfs(mddev);
6638 }
6639 
md_bitmap_set_none(struct mddev * mddev)6640 static void md_bitmap_set_none(struct mddev *mddev)
6641 {
6642 	mddev->bitmap_id = ID_BITMAP_NONE;
6643 	if (!mddev_set_bitmap_ops_nosysfs(mddev))
6644 		return;
6645 
6646 	if (!mddev_is_dm(mddev) && mddev->bitmap_ops->groups)
6647 		md_bitmap_sysfs_add(mddev);
6648 }
6649 
md_run(struct mddev * mddev)6650 int md_run(struct mddev *mddev)
6651 {
6652 	int err;
6653 	struct md_rdev *rdev;
6654 	struct md_personality *pers;
6655 
6656 	if (list_empty(&mddev->disks))
6657 		/* cannot run an array with no devices.. */
6658 		return -EINVAL;
6659 
6660 	if (mddev->pers)
6661 		return -EBUSY;
6662 	/* Cannot run until previous stop completes properly */
6663 	if (mddev->sysfs_active)
6664 		return -EBUSY;
6665 
6666 	/*
6667 	 * Analyze all RAID superblock(s)
6668 	 */
6669 	if (!mddev->raid_disks) {
6670 		if (!mddev->persistent)
6671 			return -EINVAL;
6672 		err = analyze_sbs(mddev);
6673 		if (err)
6674 			return -EINVAL;
6675 	}
6676 
6677 	if (mddev->level != LEVEL_NONE)
6678 		request_module("md-level-%d", mddev->level);
6679 	else if (mddev->clevel[0])
6680 		request_module("md-%s", mddev->clevel);
6681 
6682 	/*
6683 	 * Drop all container device buffers, from now on
6684 	 * the only valid external interface is through the md
6685 	 * device.
6686 	 */
6687 	clear_bit(MD_HAS_SUPERBLOCK, &mddev->flags);
6688 	rdev_for_each(rdev, mddev) {
6689 		if (test_bit(Faulty, &rdev->flags))
6690 			continue;
6691 		sync_blockdev(rdev->bdev);
6692 		invalidate_bdev(rdev->bdev);
6693 		if (mddev->ro != MD_RDONLY && rdev_read_only(rdev)) {
6694 			mddev->ro = MD_RDONLY;
6695 			if (!mddev_is_dm(mddev))
6696 				set_disk_ro(mddev->gendisk, 1);
6697 		}
6698 
6699 		if (rdev->sb_page)
6700 			set_bit(MD_HAS_SUPERBLOCK, &mddev->flags);
6701 
6702 		/* perform some consistency tests on the device.
6703 		 * We don't want the data to overlap the metadata,
6704 		 * Internal Bitmap issues have been handled elsewhere.
6705 		 */
6706 		if (rdev->meta_bdev) {
6707 			/* Nothing to check */;
6708 		} else if (rdev->data_offset < rdev->sb_start) {
6709 			if (mddev->dev_sectors &&
6710 			    rdev->data_offset + mddev->dev_sectors
6711 			    > rdev->sb_start) {
6712 				pr_warn("md: %s: data overlaps metadata\n",
6713 					mdname(mddev));
6714 				return -EINVAL;
6715 			}
6716 		} else {
6717 			if (rdev->sb_start + rdev->sb_size/512
6718 			    > rdev->data_offset) {
6719 				pr_warn("md: %s: metadata overlaps data\n",
6720 					mdname(mddev));
6721 				return -EINVAL;
6722 			}
6723 		}
6724 		sysfs_notify_dirent_safe(rdev->sysfs_state);
6725 	}
6726 
6727 	pers = get_pers(mddev->level, mddev->clevel);
6728 	if (!pers)
6729 		return -EINVAL;
6730 	if (mddev->level != pers->head.id) {
6731 		mddev->level = pers->head.id;
6732 		mddev->new_level = pers->head.id;
6733 	}
6734 	strscpy(mddev->clevel, pers->head.name, sizeof(mddev->clevel));
6735 
6736 	if (mddev->reshape_position != MaxSector &&
6737 	    pers->start_reshape == NULL) {
6738 		/* This personality cannot handle reshaping... */
6739 		put_pers(pers);
6740 		return -EINVAL;
6741 	}
6742 
6743 	if (pers->sync_request) {
6744 		/* Warn if this is a potentially silly
6745 		 * configuration.
6746 		 */
6747 		struct md_rdev *rdev2;
6748 		int warned = 0;
6749 
6750 		rdev_for_each(rdev, mddev)
6751 			rdev_for_each(rdev2, mddev) {
6752 				if (rdev < rdev2 &&
6753 				    rdev->bdev->bd_disk ==
6754 				    rdev2->bdev->bd_disk) {
6755 					pr_warn("%s: WARNING: %pg appears to be on the same physical disk as %pg.\n",
6756 						mdname(mddev),
6757 						rdev->bdev,
6758 						rdev2->bdev);
6759 					warned = 1;
6760 				}
6761 			}
6762 
6763 		if (warned)
6764 			pr_warn("True protection against single-disk failure might be compromised.\n");
6765 	}
6766 
6767 	/* dm-raid expect sync_thread to be frozen until resume */
6768 	if (!mddev_is_dm(mddev))
6769 		mddev->recovery = 0;
6770 
6771 	/* may be over-ridden by personality */
6772 	mddev->resync_max_sectors = mddev->dev_sectors;
6773 
6774 	mddev->ok_start_degraded = start_dirty_degraded;
6775 
6776 	if (start_readonly && md_is_rdwr(mddev))
6777 		mddev->ro = MD_AUTO_READ; /* read-only, but switch on first write */
6778 
6779 	err = pers->run(mddev);
6780 	if (err)
6781 		pr_warn("md: pers->run() failed ...\n");
6782 	else if (pers->size(mddev, 0, 0) < mddev->array_sectors) {
6783 		WARN_ONCE(!mddev->external_size,
6784 			  "%s: default size too small, but 'external_size' not in effect?\n",
6785 			  __func__);
6786 		pr_warn("md: invalid array_size %llu > default size %llu\n",
6787 			(unsigned long long)mddev->array_sectors / 2,
6788 			(unsigned long long)pers->size(mddev, 0, 0) / 2);
6789 		err = -EINVAL;
6790 	}
6791 	if (err == 0 && pers->sync_request &&
6792 	    (mddev->bitmap_info.file || mddev->bitmap_info.offset)) {
6793 		err = md_bitmap_create(mddev);
6794 		if (err)
6795 			pr_warn("%s: failed to create bitmap (%d)\n",
6796 				mdname(mddev), err);
6797 	}
6798 	if (err)
6799 		goto bitmap_abort;
6800 
6801 	if (mddev->bitmap_info.max_write_behind > 0) {
6802 		bool create_pool = false;
6803 
6804 		rdev_for_each(rdev, mddev) {
6805 			if (test_bit(WriteMostly, &rdev->flags) &&
6806 			    rdev_init_serial(rdev))
6807 				create_pool = true;
6808 		}
6809 		if (create_pool && mddev->serial_info_pool == NULL) {
6810 			mddev->serial_info_pool =
6811 				mempool_create_kmalloc_pool(NR_SERIAL_INFOS,
6812 						    sizeof(struct serial_info));
6813 			if (!mddev->serial_info_pool) {
6814 				err = -ENOMEM;
6815 				goto bitmap_abort;
6816 			}
6817 		}
6818 	}
6819 
6820 	if (pers->sync_request) {
6821 		if (mddev->kobj.sd &&
6822 		    sysfs_create_group(&mddev->kobj, &md_redundancy_group))
6823 			pr_warn("md: cannot register extra attributes for %s\n",
6824 				mdname(mddev));
6825 		mddev->sysfs_action = sysfs_get_dirent_safe(mddev->kobj.sd, "sync_action");
6826 		mddev->sysfs_completed = sysfs_get_dirent_safe(mddev->kobj.sd, "sync_completed");
6827 		mddev->sysfs_degraded = sysfs_get_dirent_safe(mddev->kobj.sd, "degraded");
6828 	} else if (mddev->ro == MD_AUTO_READ)
6829 		mddev->ro = MD_RDWR;
6830 
6831 	atomic_set(&mddev->max_corr_read_errors,
6832 		   MD_DEFAULT_MAX_CORRECTED_READ_ERRORS);
6833 	mddev->safemode = 0;
6834 	if (mddev_is_clustered(mddev))
6835 		mddev->safemode_delay = 0;
6836 	else
6837 		mddev->safemode_delay = DEFAULT_SAFEMODE_DELAY;
6838 	mddev->in_sync = 1;
6839 	smp_wmb();
6840 	spin_lock(&mddev->lock);
6841 	mddev->pers = pers;
6842 	spin_unlock(&mddev->lock);
6843 	rdev_for_each(rdev, mddev)
6844 		if (rdev->raid_disk >= 0)
6845 			sysfs_link_rdev(mddev, rdev); /* failure here is OK */
6846 
6847 	if (mddev->degraded && md_is_rdwr(mddev))
6848 		/* This ensures that recovering status is reported immediately
6849 		 * via sysfs - until a lack of spares is confirmed.
6850 		 */
6851 		set_bit(MD_RECOVERY_RECOVER, &mddev->recovery);
6852 	set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
6853 
6854 	if (mddev->sb_flags)
6855 		md_update_sb(mddev, 0);
6856 
6857 	if (IS_ENABLED(CONFIG_MD_BITMAP) && !mddev->bitmap_info.file &&
6858 	    !mddev->bitmap_info.offset)
6859 		md_bitmap_set_none(mddev);
6860 
6861 	md_new_event();
6862 	return 0;
6863 
6864 bitmap_abort:
6865 	mddev_detach(mddev);
6866 	if (mddev->private)
6867 		pers->free(mddev, mddev->private);
6868 	mddev->private = NULL;
6869 	put_pers(pers);
6870 	md_bitmap_destroy(mddev);
6871 	return err;
6872 }
6873 EXPORT_SYMBOL_GPL(md_run);
6874 
do_md_run(struct mddev * mddev)6875 int do_md_run(struct mddev *mddev)
6876 {
6877 	int err;
6878 
6879 	set_bit(MD_NOT_READY, &mddev->flags);
6880 	err = md_run(mddev);
6881 	if (err)
6882 		goto out;
6883 
6884 	if (md_bitmap_registered(mddev)) {
6885 		err = mddev->bitmap_ops->load(mddev);
6886 		if (err) {
6887 			md_bitmap_destroy(mddev);
6888 			goto out;
6889 		}
6890 	}
6891 
6892 	if (mddev_is_clustered(mddev))
6893 		md_allow_write(mddev);
6894 
6895 	/* run start up tasks that require md_thread */
6896 	md_start(mddev);
6897 
6898 	md_wakeup_thread(mddev->sync_thread); /* possibly kick off a reshape */
6899 
6900 	set_capacity_and_notify(mddev->gendisk, mddev->array_sectors);
6901 	clear_bit(MD_NOT_READY, &mddev->flags);
6902 	mddev->changed = 1;
6903 	kobject_uevent(&disk_to_dev(mddev->gendisk)->kobj, KOBJ_CHANGE);
6904 	sysfs_notify_dirent_safe(mddev->sysfs_state);
6905 	sysfs_notify_dirent_safe(mddev->sysfs_action);
6906 	sysfs_notify_dirent_safe(mddev->sysfs_degraded);
6907 out:
6908 	clear_bit(MD_NOT_READY, &mddev->flags);
6909 	return err;
6910 }
6911 
md_start(struct mddev * mddev)6912 int md_start(struct mddev *mddev)
6913 {
6914 	int ret = 0;
6915 
6916 	if (mddev->pers->start) {
6917 		set_bit(MD_RECOVERY_WAIT, &mddev->recovery);
6918 		ret = mddev->pers->start(mddev);
6919 		clear_bit(MD_RECOVERY_WAIT, &mddev->recovery);
6920 		md_wakeup_thread(mddev->sync_thread);
6921 	}
6922 	return ret;
6923 }
6924 EXPORT_SYMBOL_GPL(md_start);
6925 
restart_array(struct mddev * mddev)6926 static int restart_array(struct mddev *mddev)
6927 {
6928 	struct gendisk *disk = mddev->gendisk;
6929 	struct md_rdev *rdev;
6930 	bool has_journal = false;
6931 	bool has_readonly = false;
6932 
6933 	/* Complain if it has no devices */
6934 	if (list_empty(&mddev->disks))
6935 		return -ENXIO;
6936 	if (!mddev->pers)
6937 		return -EINVAL;
6938 	if (md_is_rdwr(mddev))
6939 		return -EBUSY;
6940 
6941 	rcu_read_lock();
6942 	rdev_for_each_rcu(rdev, mddev) {
6943 		if (test_bit(Journal, &rdev->flags) &&
6944 		    !test_bit(Faulty, &rdev->flags))
6945 			has_journal = true;
6946 		if (rdev_read_only(rdev))
6947 			has_readonly = true;
6948 	}
6949 	rcu_read_unlock();
6950 	if (test_bit(MD_HAS_JOURNAL, &mddev->flags) && !has_journal)
6951 		/* Don't restart rw with journal missing/faulty */
6952 			return -EINVAL;
6953 	if (has_readonly)
6954 		return -EROFS;
6955 
6956 	mddev->safemode = 0;
6957 	mddev->ro = MD_RDWR;
6958 	set_disk_ro(disk, 0);
6959 	pr_debug("md: %s switched to read-write mode.\n", mdname(mddev));
6960 	/* Kick recovery or resync if necessary */
6961 	set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
6962 	md_wakeup_thread(mddev->sync_thread);
6963 	sysfs_notify_dirent_safe(mddev->sysfs_state);
6964 	return 0;
6965 }
6966 
md_clean(struct mddev * mddev)6967 static void md_clean(struct mddev *mddev)
6968 {
6969 	mddev->array_sectors = 0;
6970 	mddev->external_size = 0;
6971 	mddev->dev_sectors = 0;
6972 	mddev->raid_disks = 0;
6973 	mddev->resync_offset = 0;
6974 	mddev->resync_min = 0;
6975 	mddev->resync_max = MaxSector;
6976 	mddev->reshape_position = MaxSector;
6977 	/* we still need mddev->external in export_rdev, do not clear it yet */
6978 	mddev->persistent = 0;
6979 	mddev->level = LEVEL_NONE;
6980 	mddev->clevel[0] = 0;
6981 
6982 	/*
6983 	 * For legacy_async_del_gendisk mode, it can stop the array in the
6984 	 * middle of assembling it, then it still can access the array. So
6985 	 * it needs to clear MD_CLOSING. If not legacy_async_del_gendisk,
6986 	 * it can't open the array again after stopping it. So it doesn't
6987 	 * clear MD_CLOSING.
6988 	 */
6989 	if (legacy_async_del_gendisk && mddev->hold_active) {
6990 		clear_bit(MD_CLOSING, &mddev->flags);
6991 	} else {
6992 		/* if UNTIL_STOP is set, it's cleared here */
6993 		mddev->hold_active = 0;
6994 		/* Don't clear MD_CLOSING, or mddev can be opened again. */
6995 		mddev->flags &= BIT_ULL_MASK(MD_CLOSING);
6996 	}
6997 	mddev->sb_flags = 0;
6998 	mddev->ro = MD_RDWR;
6999 	mddev->metadata_type[0] = 0;
7000 	mddev->chunk_sectors = 0;
7001 	mddev->ctime = mddev->utime = 0;
7002 	mddev->layout = 0;
7003 	mddev->logical_block_size = 0;
7004 	mddev->max_disks = 0;
7005 	mddev->events = 0;
7006 	mddev->can_decrease_events = 0;
7007 	mddev->delta_disks = 0;
7008 	mddev->reshape_backwards = 0;
7009 	mddev->new_level = LEVEL_NONE;
7010 	mddev->new_layout = 0;
7011 	mddev->new_chunk_sectors = 0;
7012 	mddev->curr_resync = MD_RESYNC_NONE;
7013 	atomic64_set(&mddev->resync_mismatches, 0);
7014 	mddev->suspend_lo = mddev->suspend_hi = 0;
7015 	mddev->sync_speed_min = mddev->sync_speed_max = 0;
7016 	mddev->recovery = 0;
7017 	mddev->in_sync = 0;
7018 	mddev->changed = 0;
7019 	mddev->degraded = 0;
7020 	mddev->safemode = 0;
7021 	mddev->private = NULL;
7022 	mddev->cluster_info = NULL;
7023 	mddev->bitmap_info.offset = 0;
7024 	mddev->bitmap_info.default_offset = 0;
7025 	mddev->bitmap_info.default_space = 0;
7026 	mddev->bitmap_info.chunksize = 0;
7027 	mddev->bitmap_info.daemon_sleep = 0;
7028 	mddev->bitmap_info.max_write_behind = 0;
7029 	mddev->bitmap_info.nodes = 0;
7030 }
7031 
__md_stop_writes(struct mddev * mddev)7032 static void __md_stop_writes(struct mddev *mddev)
7033 {
7034 	timer_delete_sync(&mddev->safemode_timer);
7035 
7036 	if (md_is_rdwr(mddev) || !mddev_is_dm(mddev)) {
7037 		if (mddev->pers && mddev->pers->quiesce) {
7038 			mddev->pers->quiesce(mddev, 1);
7039 			mddev->pers->quiesce(mddev, 0);
7040 		}
7041 
7042 		if (md_bitmap_enabled(mddev, true))
7043 			mddev->bitmap_ops->flush(mddev);
7044 	}
7045 
7046 	if (md_is_rdwr(mddev) &&
7047 	    ((!mddev->in_sync && !mddev_is_clustered(mddev)) ||
7048 	     mddev->sb_flags)) {
7049 		/* mark array as shutdown cleanly */
7050 		if (!mddev_is_clustered(mddev))
7051 			mddev->in_sync = 1;
7052 		md_update_sb(mddev, 1);
7053 	}
7054 	/* disable policy to guarantee rdevs free resources for serialization */
7055 	clear_bit(MD_SERIALIZE_POLICY, &mddev->flags);
7056 	mddev_destroy_serial_pool(mddev, NULL);
7057 }
7058 
md_stop_writes(struct mddev * mddev)7059 void md_stop_writes(struct mddev *mddev)
7060 {
7061 	mddev_lock_nointr(mddev);
7062 	set_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
7063 	stop_sync_thread(mddev, true);
7064 	__md_stop_writes(mddev);
7065 	mddev_unlock(mddev);
7066 }
7067 EXPORT_SYMBOL_GPL(md_stop_writes);
7068 
mddev_detach(struct mddev * mddev)7069 static void mddev_detach(struct mddev *mddev)
7070 {
7071 	if (md_bitmap_enabled(mddev, false))
7072 		mddev->bitmap_ops->wait_behind_writes(mddev);
7073 	if (mddev->pers && mddev->pers->quiesce && !is_md_suspended(mddev)) {
7074 		mddev->pers->quiesce(mddev, 1);
7075 		mddev->pers->quiesce(mddev, 0);
7076 	}
7077 	md_unregister_thread(mddev, &mddev->thread);
7078 
7079 	/* the unplug fn references 'conf' */
7080 	if (!mddev_is_dm(mddev))
7081 		blk_sync_queue(mddev->gendisk->queue);
7082 }
7083 
__md_stop(struct mddev * mddev)7084 static void __md_stop(struct mddev *mddev)
7085 {
7086 	struct md_personality *pers = mddev->pers;
7087 
7088 	mddev_detach(mddev);
7089 	md_bitmap_destroy(mddev);
7090 	spin_lock(&mddev->lock);
7091 	mddev->pers = NULL;
7092 	spin_unlock(&mddev->lock);
7093 	if (mddev->private)
7094 		pers->free(mddev, mddev->private);
7095 	mddev->private = NULL;
7096 	put_pers(pers);
7097 	clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
7098 }
7099 
md_stop(struct mddev * mddev)7100 void md_stop(struct mddev *mddev)
7101 {
7102 	lockdep_assert_held(&mddev->reconfig_mutex);
7103 
7104 	/* stop the array and free an attached data structures.
7105 	 * This is called from dm-raid
7106 	 */
7107 	__md_stop_writes(mddev);
7108 	__md_stop(mddev);
7109 }
7110 
7111 EXPORT_SYMBOL_GPL(md_stop);
7112 
7113 /* ensure 'mddev->pers' exist before calling md_set_readonly() */
md_set_readonly(struct mddev * mddev)7114 static int md_set_readonly(struct mddev *mddev)
7115 {
7116 	int err = 0;
7117 	int did_freeze = 0;
7118 
7119 	if (mddev->external && test_bit(MD_SB_CHANGE_PENDING, &mddev->sb_flags))
7120 		return -EBUSY;
7121 
7122 	if (!test_bit(MD_RECOVERY_FROZEN, &mddev->recovery)) {
7123 		did_freeze = 1;
7124 		set_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
7125 	}
7126 
7127 	stop_sync_thread(mddev, false);
7128 	wait_event(mddev->sb_wait,
7129 		   !test_bit(MD_SB_CHANGE_PENDING, &mddev->sb_flags));
7130 	mddev_lock_nointr(mddev);
7131 
7132 	if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery)) {
7133 		pr_warn("md: %s still in use.\n",mdname(mddev));
7134 		err = -EBUSY;
7135 		goto out;
7136 	}
7137 
7138 	__md_stop_writes(mddev);
7139 
7140 	if (mddev->ro == MD_RDONLY) {
7141 		err  = -ENXIO;
7142 		goto out;
7143 	}
7144 
7145 	mddev->ro = MD_RDONLY;
7146 	set_disk_ro(mddev->gendisk, 1);
7147 
7148 out:
7149 	if (!err || did_freeze) {
7150 		clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
7151 		set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
7152 		sysfs_notify_dirent_safe(mddev->sysfs_state);
7153 	}
7154 
7155 	return err;
7156 }
7157 
7158 /* mode:
7159  *   0 - completely stop and dis-assemble array
7160  *   2 - stop but do not disassemble array
7161  */
do_md_stop(struct mddev * mddev,int mode)7162 static int do_md_stop(struct mddev *mddev, int mode)
7163 {
7164 	struct gendisk *disk = mddev->gendisk;
7165 	struct md_rdev *rdev;
7166 	int did_freeze = 0;
7167 
7168 	if (!test_bit(MD_RECOVERY_FROZEN, &mddev->recovery)) {
7169 		did_freeze = 1;
7170 		set_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
7171 	}
7172 
7173 	stop_sync_thread(mddev, true);
7174 
7175 	if (mddev->sysfs_active ||
7176 	    test_bit(MD_RECOVERY_RUNNING, &mddev->recovery)) {
7177 		pr_warn("md: %s still in use.\n",mdname(mddev));
7178 		if (did_freeze) {
7179 			clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
7180 			set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
7181 		}
7182 		return -EBUSY;
7183 	}
7184 	if (mddev->pers) {
7185 		if (!md_is_rdwr(mddev))
7186 			set_disk_ro(disk, 0);
7187 
7188 		if (mode == 2 && mddev->pers->sync_request &&
7189 		    mddev->to_remove == NULL)
7190 			mddev->to_remove = &md_redundancy_group;
7191 
7192 		__md_stop_writes(mddev);
7193 		__md_stop(mddev);
7194 
7195 		/* tell userspace to handle 'inactive' */
7196 		sysfs_notify_dirent_safe(mddev->sysfs_state);
7197 
7198 		rdev_for_each(rdev, mddev)
7199 			if (rdev->raid_disk >= 0)
7200 				sysfs_unlink_rdev(mddev, rdev);
7201 
7202 		set_capacity_and_notify(disk, 0);
7203 		mddev->changed = 1;
7204 
7205 		if (!md_is_rdwr(mddev))
7206 			mddev->ro = MD_RDWR;
7207 	}
7208 	/*
7209 	 * Free resources if final stop
7210 	 */
7211 	if (mode == 0) {
7212 		pr_info("md: %s stopped.\n", mdname(mddev));
7213 
7214 		if (mddev->bitmap_info.file) {
7215 			struct file *f = mddev->bitmap_info.file;
7216 			spin_lock(&mddev->lock);
7217 			mddev->bitmap_info.file = NULL;
7218 			spin_unlock(&mddev->lock);
7219 			fput(f);
7220 		}
7221 		mddev->bitmap_info.offset = 0;
7222 
7223 		export_array(mddev);
7224 		md_clean(mddev);
7225 		if (!legacy_async_del_gendisk)
7226 			set_bit(MD_DELETED, &mddev->flags);
7227 	}
7228 	md_new_event();
7229 	sysfs_notify_dirent_safe(mddev->sysfs_state);
7230 	return 0;
7231 }
7232 
7233 #ifndef MODULE
autorun_array(struct mddev * mddev)7234 static void autorun_array(struct mddev *mddev)
7235 {
7236 	struct md_rdev *rdev;
7237 	int err;
7238 
7239 	if (list_empty(&mddev->disks))
7240 		return;
7241 
7242 	pr_info("md: running: ");
7243 
7244 	rdev_for_each(rdev, mddev) {
7245 		pr_cont("<%pg>", rdev->bdev);
7246 	}
7247 	pr_cont("\n");
7248 
7249 	err = do_md_run(mddev);
7250 	if (err) {
7251 		pr_warn("md: do_md_run() returned %d\n", err);
7252 		do_md_stop(mddev, 0);
7253 	}
7254 }
7255 
7256 /*
7257  * lets try to run arrays based on all disks that have arrived
7258  * until now. (those are in pending_raid_disks)
7259  *
7260  * the method: pick the first pending disk, collect all disks with
7261  * the same UUID, remove all from the pending list and put them into
7262  * the 'same_array' list. Then order this list based on superblock
7263  * update time (freshest comes first), kick out 'old' disks and
7264  * compare superblocks. If everything's fine then run it.
7265  *
7266  * If "unit" is allocated, then bump its reference count
7267  */
autorun_devices(int part)7268 static void autorun_devices(int part)
7269 {
7270 	struct md_rdev *rdev0, *rdev, *tmp;
7271 	struct mddev *mddev;
7272 
7273 	pr_info("md: autorun ...\n");
7274 	while (!list_empty(&pending_raid_disks)) {
7275 		int unit;
7276 		dev_t dev;
7277 		LIST_HEAD(candidates);
7278 		rdev0 = list_entry(pending_raid_disks.next,
7279 					 struct md_rdev, same_set);
7280 
7281 		pr_debug("md: considering %pg ...\n", rdev0->bdev);
7282 		INIT_LIST_HEAD(&candidates);
7283 		rdev_for_each_list(rdev, tmp, &pending_raid_disks)
7284 			if (super_90_load(rdev, rdev0, 0) >= 0) {
7285 				pr_debug("md:  adding %pg ...\n",
7286 					 rdev->bdev);
7287 				list_move(&rdev->same_set, &candidates);
7288 			}
7289 		/*
7290 		 * now we have a set of devices, with all of them having
7291 		 * mostly sane superblocks. It's time to allocate the
7292 		 * mddev.
7293 		 */
7294 		if (part) {
7295 			dev = MKDEV(mdp_major,
7296 				    rdev0->preferred_minor << MdpMinorShift);
7297 			unit = MINOR(dev) >> MdpMinorShift;
7298 		} else {
7299 			dev = MKDEV(MD_MAJOR, rdev0->preferred_minor);
7300 			unit = MINOR(dev);
7301 		}
7302 		if (rdev0->preferred_minor != unit) {
7303 			pr_warn("md: unit number in %pg is bad: %d\n",
7304 				rdev0->bdev, rdev0->preferred_minor);
7305 			break;
7306 		}
7307 
7308 		mddev = md_alloc(dev, NULL);
7309 		if (IS_ERR(mddev))
7310 			break;
7311 
7312 		if (mddev_suspend_and_lock(mddev))
7313 			pr_warn("md: %s locked, cannot run\n", mdname(mddev));
7314 		else if (mddev->raid_disks || mddev->major_version
7315 			 || !list_empty(&mddev->disks)) {
7316 			pr_warn("md: %s already running, cannot run %pg\n",
7317 				mdname(mddev), rdev0->bdev);
7318 			mddev_unlock_and_resume(mddev);
7319 		} else {
7320 			pr_debug("md: created %s\n", mdname(mddev));
7321 			mddev->persistent = 1;
7322 			rdev_for_each_list(rdev, tmp, &candidates) {
7323 				list_del_init(&rdev->same_set);
7324 				if (bind_rdev_to_array(rdev, mddev))
7325 					export_rdev(rdev);
7326 			}
7327 			autorun_array(mddev);
7328 			mddev_unlock_and_resume(mddev);
7329 		}
7330 		/* on success, candidates will be empty, on error
7331 		 * it won't...
7332 		 */
7333 		rdev_for_each_list(rdev, tmp, &candidates) {
7334 			list_del_init(&rdev->same_set);
7335 			export_rdev(rdev);
7336 		}
7337 		mddev_put(mddev);
7338 	}
7339 	pr_info("md: ... autorun DONE.\n");
7340 }
7341 #endif /* !MODULE */
7342 
get_version(void __user * arg)7343 static int get_version(void __user *arg)
7344 {
7345 	mdu_version_t ver;
7346 
7347 	ver.major = MD_MAJOR_VERSION;
7348 	ver.minor = MD_MINOR_VERSION;
7349 	ver.patchlevel = MD_PATCHLEVEL_VERSION;
7350 
7351 	if (copy_to_user(arg, &ver, sizeof(ver)))
7352 		return -EFAULT;
7353 
7354 	return 0;
7355 }
7356 
get_array_info(struct mddev * mddev,void __user * arg)7357 static int get_array_info(struct mddev *mddev, void __user *arg)
7358 {
7359 	mdu_array_info_t info;
7360 	int nr,working,insync,failed,spare;
7361 	struct md_rdev *rdev;
7362 
7363 	nr = working = insync = failed = spare = 0;
7364 	rcu_read_lock();
7365 	rdev_for_each_rcu(rdev, mddev) {
7366 		nr++;
7367 		if (test_bit(Faulty, &rdev->flags))
7368 			failed++;
7369 		else {
7370 			working++;
7371 			if (test_bit(In_sync, &rdev->flags))
7372 				insync++;
7373 			else if (test_bit(Journal, &rdev->flags))
7374 				/* TODO: add journal count to md_u.h */
7375 				;
7376 			else
7377 				spare++;
7378 		}
7379 	}
7380 	rcu_read_unlock();
7381 
7382 	info.major_version = mddev->major_version;
7383 	info.minor_version = mddev->minor_version;
7384 	info.patch_version = MD_PATCHLEVEL_VERSION;
7385 	info.ctime         = clamp_t(time64_t, mddev->ctime, 0, U32_MAX);
7386 	info.level         = mddev->level;
7387 	info.size          = mddev->dev_sectors / 2;
7388 	if (info.size != mddev->dev_sectors / 2) /* overflow */
7389 		info.size = -1;
7390 	info.nr_disks      = nr;
7391 	info.raid_disks    = mddev->raid_disks;
7392 	info.md_minor      = mddev->md_minor;
7393 	info.not_persistent= !mddev->persistent;
7394 
7395 	info.utime         = clamp_t(time64_t, mddev->utime, 0, U32_MAX);
7396 	info.state         = 0;
7397 	if (mddev->in_sync)
7398 		info.state = (1<<MD_SB_CLEAN);
7399 	if (mddev->bitmap && mddev->bitmap_info.offset)
7400 		info.state |= (1<<MD_SB_BITMAP_PRESENT);
7401 	if (mddev_is_clustered(mddev))
7402 		info.state |= (1<<MD_SB_CLUSTERED);
7403 	info.active_disks  = insync;
7404 	info.working_disks = working;
7405 	info.failed_disks  = failed;
7406 	info.spare_disks   = spare;
7407 
7408 	info.layout        = mddev->layout;
7409 	info.chunk_size    = mddev->chunk_sectors << 9;
7410 
7411 	if (copy_to_user(arg, &info, sizeof(info)))
7412 		return -EFAULT;
7413 
7414 	return 0;
7415 }
7416 
get_bitmap_file(struct mddev * mddev,void __user * arg)7417 static int get_bitmap_file(struct mddev *mddev, void __user * arg)
7418 {
7419 	mdu_bitmap_file_t *file = NULL; /* too big for stack allocation */
7420 	char *ptr;
7421 	int err;
7422 
7423 	file = kzalloc_obj(*file, GFP_NOIO);
7424 	if (!file)
7425 		return -ENOMEM;
7426 
7427 	err = 0;
7428 	spin_lock(&mddev->lock);
7429 	/* bitmap enabled */
7430 	if (mddev->bitmap_info.file) {
7431 		ptr = file_path(mddev->bitmap_info.file, file->pathname,
7432 				sizeof(file->pathname));
7433 		if (IS_ERR(ptr))
7434 			err = PTR_ERR(ptr);
7435 		else
7436 			memmove(file->pathname, ptr,
7437 				sizeof(file->pathname)-(ptr-file->pathname));
7438 	}
7439 	spin_unlock(&mddev->lock);
7440 
7441 	if (err == 0 &&
7442 	    copy_to_user(arg, file, sizeof(*file)))
7443 		err = -EFAULT;
7444 
7445 	kfree(file);
7446 	return err;
7447 }
7448 
get_disk_info(struct mddev * mddev,void __user * arg)7449 static int get_disk_info(struct mddev *mddev, void __user * arg)
7450 {
7451 	mdu_disk_info_t info;
7452 	struct md_rdev *rdev;
7453 
7454 	if (copy_from_user(&info, arg, sizeof(info)))
7455 		return -EFAULT;
7456 
7457 	rcu_read_lock();
7458 	rdev = md_find_rdev_nr_rcu(mddev, info.number);
7459 	if (rdev) {
7460 		info.major = MAJOR(rdev->bdev->bd_dev);
7461 		info.minor = MINOR(rdev->bdev->bd_dev);
7462 		info.raid_disk = rdev->raid_disk;
7463 		info.state = 0;
7464 		if (test_bit(Faulty, &rdev->flags))
7465 			info.state |= (1<<MD_DISK_FAULTY);
7466 		else if (test_bit(In_sync, &rdev->flags)) {
7467 			info.state |= (1<<MD_DISK_ACTIVE);
7468 			info.state |= (1<<MD_DISK_SYNC);
7469 		}
7470 		if (test_bit(Journal, &rdev->flags))
7471 			info.state |= (1<<MD_DISK_JOURNAL);
7472 		if (test_bit(WriteMostly, &rdev->flags))
7473 			info.state |= (1<<MD_DISK_WRITEMOSTLY);
7474 		if (test_bit(FailFast, &rdev->flags))
7475 			info.state |= (1<<MD_DISK_FAILFAST);
7476 	} else {
7477 		info.major = info.minor = 0;
7478 		info.raid_disk = -1;
7479 		info.state = (1<<MD_DISK_REMOVED);
7480 	}
7481 	rcu_read_unlock();
7482 
7483 	if (copy_to_user(arg, &info, sizeof(info)))
7484 		return -EFAULT;
7485 
7486 	return 0;
7487 }
7488 
md_add_new_disk(struct mddev * mddev,struct mdu_disk_info_s * info)7489 int md_add_new_disk(struct mddev *mddev, struct mdu_disk_info_s *info)
7490 {
7491 	struct md_rdev *rdev;
7492 	dev_t dev = MKDEV(info->major,info->minor);
7493 
7494 	if (mddev_is_clustered(mddev) &&
7495 		!(info->state & ((1 << MD_DISK_CLUSTER_ADD) | (1 << MD_DISK_CANDIDATE)))) {
7496 		pr_warn("%s: Cannot add to clustered mddev.\n",
7497 			mdname(mddev));
7498 		return -EINVAL;
7499 	}
7500 
7501 	if (info->major != MAJOR(dev) || info->minor != MINOR(dev))
7502 		return -EOVERFLOW;
7503 
7504 	if (!mddev->raid_disks) {
7505 		int err;
7506 		/* expecting a device which has a superblock */
7507 		rdev = md_import_device(dev, mddev->major_version, mddev->minor_version);
7508 		if (IS_ERR(rdev)) {
7509 			pr_warn("md: md_import_device returned %ld\n",
7510 				PTR_ERR(rdev));
7511 			return PTR_ERR(rdev);
7512 		}
7513 		if (!list_empty(&mddev->disks)) {
7514 			struct md_rdev *rdev0
7515 				= list_entry(mddev->disks.next,
7516 					     struct md_rdev, same_set);
7517 			err = super_types[mddev->major_version]
7518 				.load_super(rdev, rdev0, mddev->minor_version);
7519 			if (err < 0) {
7520 				pr_warn("md: %pg has different UUID to %pg\n",
7521 					rdev->bdev,
7522 					rdev0->bdev);
7523 				export_rdev(rdev);
7524 				return -EINVAL;
7525 			}
7526 		}
7527 		err = bind_rdev_to_array(rdev, mddev);
7528 		if (err)
7529 			export_rdev(rdev);
7530 		return err;
7531 	}
7532 
7533 	/*
7534 	 * md_add_new_disk can be used once the array is assembled
7535 	 * to add "hot spares".  They must already have a superblock
7536 	 * written
7537 	 */
7538 	if (mddev->pers) {
7539 		int err;
7540 		if (!mddev->pers->hot_add_disk) {
7541 			pr_warn("%s: personality does not support diskops!\n",
7542 				mdname(mddev));
7543 			return -EINVAL;
7544 		}
7545 		if (mddev->persistent)
7546 			rdev = md_import_device(dev, mddev->major_version,
7547 						mddev->minor_version);
7548 		else
7549 			rdev = md_import_device(dev, -1, -1);
7550 		if (IS_ERR(rdev)) {
7551 			pr_warn("md: md_import_device returned %ld\n",
7552 				PTR_ERR(rdev));
7553 			return PTR_ERR(rdev);
7554 		}
7555 		/* set saved_raid_disk if appropriate */
7556 		if (!mddev->persistent) {
7557 			if (info->state & (1<<MD_DISK_SYNC)  &&
7558 			    info->raid_disk < mddev->raid_disks) {
7559 				rdev->raid_disk = info->raid_disk;
7560 				clear_bit(Bitmap_sync, &rdev->flags);
7561 			} else
7562 				rdev->raid_disk = -1;
7563 			rdev->saved_raid_disk = rdev->raid_disk;
7564 		} else
7565 			super_types[mddev->major_version].
7566 				validate_super(mddev, NULL/*freshest*/, rdev);
7567 		if ((info->state & (1<<MD_DISK_SYNC)) &&
7568 		     rdev->raid_disk != info->raid_disk) {
7569 			/* This was a hot-add request, but events doesn't
7570 			 * match, so reject it.
7571 			 */
7572 			export_rdev(rdev);
7573 			return -EINVAL;
7574 		}
7575 
7576 		clear_bit(In_sync, &rdev->flags); /* just to be sure */
7577 		if (info->state & (1<<MD_DISK_WRITEMOSTLY))
7578 			set_bit(WriteMostly, &rdev->flags);
7579 		else
7580 			clear_bit(WriteMostly, &rdev->flags);
7581 		if (info->state & (1<<MD_DISK_FAILFAST))
7582 			set_bit(FailFast, &rdev->flags);
7583 		else
7584 			clear_bit(FailFast, &rdev->flags);
7585 
7586 		if (info->state & (1<<MD_DISK_JOURNAL)) {
7587 			struct md_rdev *rdev2;
7588 			bool has_journal = false;
7589 
7590 			/* make sure no existing journal disk */
7591 			rdev_for_each(rdev2, mddev) {
7592 				if (test_bit(Journal, &rdev2->flags)) {
7593 					has_journal = true;
7594 					break;
7595 				}
7596 			}
7597 			if (has_journal || mddev->bitmap) {
7598 				export_rdev(rdev);
7599 				return -EBUSY;
7600 			}
7601 			set_bit(Journal, &rdev->flags);
7602 		}
7603 		/*
7604 		 * check whether the device shows up in other nodes
7605 		 */
7606 		if (mddev_is_clustered(mddev)) {
7607 			if (info->state & (1 << MD_DISK_CANDIDATE))
7608 				set_bit(Candidate, &rdev->flags);
7609 			else if (info->state & (1 << MD_DISK_CLUSTER_ADD)) {
7610 				/* --add initiated by this node */
7611 				err = mddev->cluster_ops->add_new_disk(mddev, rdev);
7612 				if (err) {
7613 					export_rdev(rdev);
7614 					return err;
7615 				}
7616 			}
7617 		}
7618 
7619 		rdev->raid_disk = -1;
7620 		err = bind_rdev_to_array(rdev, mddev);
7621 
7622 		if (err)
7623 			export_rdev(rdev);
7624 
7625 		if (mddev_is_clustered(mddev)) {
7626 			if (info->state & (1 << MD_DISK_CANDIDATE)) {
7627 				if (!err) {
7628 					err = mddev->cluster_ops->new_disk_ack(
7629 							mddev, err == 0);
7630 					if (err)
7631 						md_kick_rdev_from_array(rdev);
7632 				}
7633 			} else {
7634 				if (err)
7635 					mddev->cluster_ops->add_new_disk_cancel(mddev);
7636 				else
7637 					err = add_bound_rdev(rdev);
7638 			}
7639 
7640 		} else if (!err)
7641 			err = add_bound_rdev(rdev);
7642 
7643 		return err;
7644 	}
7645 
7646 	/* otherwise, md_add_new_disk is only allowed
7647 	 * for major_version==0 superblocks
7648 	 */
7649 	if (mddev->major_version != 0) {
7650 		pr_warn("%s: ADD_NEW_DISK not supported\n", mdname(mddev));
7651 		return -EINVAL;
7652 	}
7653 
7654 	if (!(info->state & (1<<MD_DISK_FAULTY))) {
7655 		int err;
7656 		rdev = md_import_device(dev, -1, 0);
7657 		if (IS_ERR(rdev)) {
7658 			pr_warn("md: error, md_import_device() returned %ld\n",
7659 				PTR_ERR(rdev));
7660 			return PTR_ERR(rdev);
7661 		}
7662 		rdev->desc_nr = info->number;
7663 		if (info->raid_disk < mddev->raid_disks)
7664 			rdev->raid_disk = info->raid_disk;
7665 		else
7666 			rdev->raid_disk = -1;
7667 
7668 		if (rdev->raid_disk < mddev->raid_disks)
7669 			if (info->state & (1<<MD_DISK_SYNC))
7670 				set_bit(In_sync, &rdev->flags);
7671 
7672 		if (info->state & (1<<MD_DISK_WRITEMOSTLY))
7673 			set_bit(WriteMostly, &rdev->flags);
7674 		if (info->state & (1<<MD_DISK_FAILFAST))
7675 			set_bit(FailFast, &rdev->flags);
7676 
7677 		if (!mddev->persistent) {
7678 			pr_debug("md: nonpersistent superblock ...\n");
7679 			rdev->sb_start = bdev_nr_sectors(rdev->bdev);
7680 		} else
7681 			rdev->sb_start = calc_dev_sboffset(rdev);
7682 		rdev->sectors = rdev->sb_start;
7683 
7684 		err = bind_rdev_to_array(rdev, mddev);
7685 		if (err) {
7686 			export_rdev(rdev);
7687 			return err;
7688 		}
7689 	}
7690 
7691 	return 0;
7692 }
7693 
hot_remove_disk(struct mddev * mddev,dev_t dev)7694 static int hot_remove_disk(struct mddev *mddev, dev_t dev)
7695 {
7696 	struct md_rdev *rdev;
7697 
7698 	if (!mddev->pers)
7699 		return -ENODEV;
7700 
7701 	rdev = find_rdev(mddev, dev);
7702 	if (!rdev)
7703 		return -ENXIO;
7704 
7705 	if (rdev->raid_disk < 0)
7706 		goto kick_rdev;
7707 
7708 	clear_bit(Blocked, &rdev->flags);
7709 	remove_and_add_spares(mddev, rdev);
7710 
7711 	if (rdev->raid_disk >= 0)
7712 		goto busy;
7713 
7714 kick_rdev:
7715 	if (mddev_is_clustered(mddev) &&
7716 	    mddev->cluster_ops->remove_disk(mddev, rdev))
7717 		goto busy;
7718 
7719 	md_kick_rdev_from_array(rdev);
7720 	set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags);
7721 	if (!mddev->thread)
7722 		md_update_sb(mddev, 1);
7723 	md_new_event();
7724 
7725 	return 0;
7726 busy:
7727 	pr_debug("md: cannot remove active disk %pg from %s ...\n",
7728 		 rdev->bdev, mdname(mddev));
7729 	return -EBUSY;
7730 }
7731 
hot_add_disk(struct mddev * mddev,dev_t dev)7732 static int hot_add_disk(struct mddev *mddev, dev_t dev)
7733 {
7734 	int err;
7735 	struct md_rdev *rdev;
7736 
7737 	if (!mddev->pers)
7738 		return -ENODEV;
7739 
7740 	if (mddev->major_version != 0) {
7741 		pr_warn("%s: HOT_ADD may only be used with version-0 superblocks.\n",
7742 			mdname(mddev));
7743 		return -EINVAL;
7744 	}
7745 	if (!mddev->pers->hot_add_disk) {
7746 		pr_warn("%s: personality does not support diskops!\n",
7747 			mdname(mddev));
7748 		return -EINVAL;
7749 	}
7750 
7751 	rdev = md_import_device(dev, -1, 0);
7752 	if (IS_ERR(rdev)) {
7753 		pr_warn("md: error, md_import_device() returned %ld\n",
7754 			PTR_ERR(rdev));
7755 		return -EINVAL;
7756 	}
7757 
7758 	if (mddev->persistent)
7759 		rdev->sb_start = calc_dev_sboffset(rdev);
7760 	else
7761 		rdev->sb_start = bdev_nr_sectors(rdev->bdev);
7762 
7763 	rdev->sectors = rdev->sb_start;
7764 
7765 	if (test_bit(Faulty, &rdev->flags)) {
7766 		pr_warn("md: can not hot-add faulty %pg disk to %s!\n",
7767 			rdev->bdev, mdname(mddev));
7768 		err = -EINVAL;
7769 		goto abort_export;
7770 	}
7771 
7772 	clear_bit(In_sync, &rdev->flags);
7773 	rdev->desc_nr = -1;
7774 	rdev->saved_raid_disk = -1;
7775 	err = bind_rdev_to_array(rdev, mddev);
7776 	if (err)
7777 		goto abort_export;
7778 
7779 	/*
7780 	 * The rest should better be atomic, we can have disk failures
7781 	 * noticed in interrupt contexts ...
7782 	 */
7783 
7784 	rdev->raid_disk = -1;
7785 
7786 	set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags);
7787 	if (!mddev->thread)
7788 		md_update_sb(mddev, 1);
7789 	/*
7790 	 * Kick recovery, maybe this spare has to be added to the
7791 	 * array immediately.
7792 	 */
7793 	set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
7794 	md_new_event();
7795 	return 0;
7796 
7797 abort_export:
7798 	export_rdev(rdev);
7799 	return err;
7800 }
7801 
set_bitmap_file(struct mddev * mddev,int fd)7802 static int set_bitmap_file(struct mddev *mddev, int fd)
7803 {
7804 	int err = 0;
7805 
7806 	if (!md_bitmap_registered(mddev) ||
7807 	    mddev->bitmap_id == ID_BITMAP_NONE)
7808 		return -EINVAL;
7809 
7810 	if (mddev->pers) {
7811 		if (!mddev->pers->quiesce || !mddev->thread)
7812 			return -EBUSY;
7813 		if (mddev->recovery || mddev->sync_thread)
7814 			return -EBUSY;
7815 		/* we should be able to change the bitmap.. */
7816 	}
7817 
7818 	if (fd >= 0) {
7819 		struct inode *inode;
7820 		struct file *f;
7821 
7822 		if (mddev->bitmap || mddev->bitmap_info.file)
7823 			return -EEXIST; /* cannot add when bitmap is present */
7824 
7825 		if (!IS_ENABLED(CONFIG_MD_BITMAP_FILE)) {
7826 			pr_warn("%s: bitmap files not supported by this kernel\n",
7827 				mdname(mddev));
7828 			return -EINVAL;
7829 		}
7830 		pr_warn("%s: using deprecated bitmap file support\n",
7831 			mdname(mddev));
7832 
7833 		f = fget(fd);
7834 
7835 		if (f == NULL) {
7836 			pr_warn("%s: error: failed to get bitmap file\n",
7837 				mdname(mddev));
7838 			return -EBADF;
7839 		}
7840 
7841 		inode = f->f_mapping->host;
7842 		if (!S_ISREG(inode->i_mode)) {
7843 			pr_warn("%s: error: bitmap file must be a regular file\n",
7844 				mdname(mddev));
7845 			err = -EBADF;
7846 		} else if (!(f->f_mode & FMODE_WRITE)) {
7847 			pr_warn("%s: error: bitmap file must open for write\n",
7848 				mdname(mddev));
7849 			err = -EBADF;
7850 		} else if (atomic_read(&inode->i_writecount) != 1) {
7851 			pr_warn("%s: error: bitmap file is already in use\n",
7852 				mdname(mddev));
7853 			err = -EBUSY;
7854 		}
7855 		if (err) {
7856 			fput(f);
7857 			return err;
7858 		}
7859 		mddev->bitmap_info.file = f;
7860 		mddev->bitmap_info.offset = 0; /* file overrides offset */
7861 	} else if (mddev->bitmap == NULL)
7862 		return -ENOENT; /* cannot remove what isn't there */
7863 	err = 0;
7864 	if (mddev->pers) {
7865 		if (fd >= 0) {
7866 			err = md_bitmap_create(mddev);
7867 			if (!err)
7868 				err = mddev->bitmap_ops->load(mddev);
7869 
7870 			if (err) {
7871 				md_bitmap_destroy(mddev);
7872 				md_bitmap_set_none(mddev);
7873 				fd = -1;
7874 			}
7875 		} else if (fd < 0) {
7876 			md_bitmap_destroy(mddev);
7877 			md_bitmap_set_none(mddev);
7878 		}
7879 	}
7880 
7881 	if (fd < 0) {
7882 		struct file *f = mddev->bitmap_info.file;
7883 		if (f) {
7884 			spin_lock(&mddev->lock);
7885 			mddev->bitmap_info.file = NULL;
7886 			spin_unlock(&mddev->lock);
7887 			fput(f);
7888 		}
7889 	}
7890 
7891 	return err;
7892 }
7893 
7894 /*
7895  * md_set_array_info is used two different ways
7896  * The original usage is when creating a new array.
7897  * In this usage, raid_disks is > 0 and it together with
7898  *  level, size, not_persistent,layout,chunksize determine the
7899  *  shape of the array.
7900  *  This will always create an array with a type-0.90.0 superblock.
7901  * The newer usage is when assembling an array.
7902  *  In this case raid_disks will be 0, and the major_version field is
7903  *  use to determine which style super-blocks are to be found on the devices.
7904  *  The minor and patch _version numbers are also kept incase the
7905  *  super_block handler wishes to interpret them.
7906  */
md_set_array_info(struct mddev * mddev,struct mdu_array_info_s * info)7907 int md_set_array_info(struct mddev *mddev, struct mdu_array_info_s *info)
7908 {
7909 	if (info->raid_disks == 0) {
7910 		/* just setting version number for superblock loading */
7911 		if (info->major_version < 0 ||
7912 		    info->major_version >= ARRAY_SIZE(super_types) ||
7913 		    super_types[info->major_version].name == NULL) {
7914 			/* maybe try to auto-load a module? */
7915 			pr_warn("md: superblock version %d not known\n",
7916 				info->major_version);
7917 			return -EINVAL;
7918 		}
7919 		mddev->major_version = info->major_version;
7920 		mddev->minor_version = info->minor_version;
7921 		mddev->patch_version = info->patch_version;
7922 		mddev->persistent = !info->not_persistent;
7923 		/* ensure mddev_put doesn't delete this now that there
7924 		 * is some minimal configuration.
7925 		 */
7926 		mddev->ctime         = ktime_get_real_seconds();
7927 		return 0;
7928 	}
7929 	mddev->major_version = MD_MAJOR_VERSION;
7930 	mddev->minor_version = MD_MINOR_VERSION;
7931 	mddev->patch_version = MD_PATCHLEVEL_VERSION;
7932 	mddev->ctime         = ktime_get_real_seconds();
7933 
7934 	mddev->level         = info->level;
7935 	mddev->clevel[0]     = 0;
7936 	mddev->dev_sectors   = 2 * (sector_t)info->size;
7937 	mddev->raid_disks    = info->raid_disks;
7938 	/* don't set md_minor, it is determined by which /dev/md* was
7939 	 * openned
7940 	 */
7941 	if (info->state & (1<<MD_SB_CLEAN))
7942 		mddev->resync_offset = MaxSector;
7943 	else
7944 		mddev->resync_offset = 0;
7945 	mddev->persistent    = ! info->not_persistent;
7946 	mddev->external	     = 0;
7947 
7948 	mddev->layout        = info->layout;
7949 	if (mddev->level == 0)
7950 		/* Cannot trust RAID0 layout info here */
7951 		mddev->layout = -1;
7952 	mddev->chunk_sectors = info->chunk_size >> 9;
7953 
7954 	if (mddev->persistent) {
7955 		mddev->max_disks = MD_SB_DISKS;
7956 		mddev->flags = 0;
7957 		mddev->sb_flags = 0;
7958 	}
7959 	set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags);
7960 
7961 	mddev->bitmap_info.default_offset = MD_SB_BYTES >> 9;
7962 	mddev->bitmap_info.default_space = 64*2 - (MD_SB_BYTES >> 9);
7963 	mddev->bitmap_info.offset = 0;
7964 
7965 	mddev->reshape_position = MaxSector;
7966 
7967 	/*
7968 	 * Generate a 128 bit UUID
7969 	 */
7970 	get_random_bytes(mddev->uuid, 16);
7971 
7972 	mddev->new_level = mddev->level;
7973 	mddev->new_chunk_sectors = mddev->chunk_sectors;
7974 	mddev->new_layout = mddev->layout;
7975 	mddev->delta_disks = 0;
7976 	mddev->reshape_backwards = 0;
7977 
7978 	return 0;
7979 }
7980 
md_set_array_sectors(struct mddev * mddev,sector_t array_sectors)7981 void md_set_array_sectors(struct mddev *mddev, sector_t array_sectors)
7982 {
7983 	lockdep_assert_held(&mddev->reconfig_mutex);
7984 
7985 	if (mddev->external_size)
7986 		return;
7987 
7988 	mddev->array_sectors = array_sectors;
7989 }
7990 EXPORT_SYMBOL(md_set_array_sectors);
7991 
update_size(struct mddev * mddev,sector_t num_sectors)7992 static int update_size(struct mddev *mddev, sector_t num_sectors)
7993 {
7994 	struct md_rdev *rdev;
7995 	int rv;
7996 	int fit = (num_sectors == 0);
7997 	sector_t old_dev_sectors = mddev->dev_sectors;
7998 
7999 	if (mddev->pers->resize == NULL)
8000 		return -EINVAL;
8001 	/* The "num_sectors" is the number of sectors of each device that
8002 	 * is used.  This can only make sense for arrays with redundancy.
8003 	 * linear and raid0 always use whatever space is available. We can only
8004 	 * consider changing this number if no resync or reconstruction is
8005 	 * happening, and if the new size is acceptable. It must fit before the
8006 	 * sb_start or, if that is <data_offset, it must fit before the size
8007 	 * of each device.  If num_sectors is zero, we find the largest size
8008 	 * that fits.
8009 	 */
8010 	if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery))
8011 		return -EBUSY;
8012 	if (!md_is_rdwr(mddev))
8013 		return -EROFS;
8014 
8015 	rdev_for_each(rdev, mddev) {
8016 		sector_t avail = rdev->sectors;
8017 
8018 		if (fit && (num_sectors == 0 || num_sectors > avail))
8019 			num_sectors = avail;
8020 		if (avail < num_sectors)
8021 			return -ENOSPC;
8022 	}
8023 	rv = mddev->pers->resize(mddev, num_sectors);
8024 	if (!rv) {
8025 		if (mddev_is_clustered(mddev))
8026 			mddev->cluster_ops->update_size(mddev, old_dev_sectors);
8027 		else if (!mddev_is_dm(mddev))
8028 			set_capacity_and_notify(mddev->gendisk,
8029 						mddev->array_sectors);
8030 	}
8031 	return rv;
8032 }
8033 
update_raid_disks(struct mddev * mddev,int raid_disks)8034 static int update_raid_disks(struct mddev *mddev, int raid_disks)
8035 {
8036 	int rv;
8037 	struct md_rdev *rdev;
8038 	/* change the number of raid disks */
8039 	if (mddev->pers->check_reshape == NULL)
8040 		return -EINVAL;
8041 	if (!md_is_rdwr(mddev))
8042 		return -EROFS;
8043 	if (raid_disks <= 0 ||
8044 	    (mddev->max_disks && raid_disks >= mddev->max_disks))
8045 		return -EINVAL;
8046 	if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery) ||
8047 	    test_bit(MD_RESYNCING_REMOTE, &mddev->recovery) ||
8048 	    mddev->reshape_position != MaxSector)
8049 		return -EBUSY;
8050 
8051 	rdev_for_each(rdev, mddev) {
8052 		if (mddev->raid_disks < raid_disks &&
8053 		    rdev->data_offset < rdev->new_data_offset)
8054 			return -EINVAL;
8055 		if (mddev->raid_disks > raid_disks &&
8056 		    rdev->data_offset > rdev->new_data_offset)
8057 			return -EINVAL;
8058 	}
8059 
8060 	mddev->delta_disks = raid_disks - mddev->raid_disks;
8061 	if (mddev->delta_disks < 0)
8062 		mddev->reshape_backwards = 1;
8063 	else if (mddev->delta_disks > 0)
8064 		mddev->reshape_backwards = 0;
8065 
8066 	rv = mddev->pers->check_reshape(mddev);
8067 	if (rv < 0) {
8068 		mddev->delta_disks = 0;
8069 		mddev->reshape_backwards = 0;
8070 	}
8071 	return rv;
8072 }
8073 
get_cluster_ops(struct mddev * mddev)8074 static int get_cluster_ops(struct mddev *mddev)
8075 {
8076 	xa_lock(&md_submodule);
8077 	mddev->cluster_ops = xa_load(&md_submodule, ID_CLUSTER);
8078 	if (mddev->cluster_ops &&
8079 	    !try_module_get(mddev->cluster_ops->head.owner))
8080 		mddev->cluster_ops = NULL;
8081 	xa_unlock(&md_submodule);
8082 
8083 	return mddev->cluster_ops == NULL ? -ENOENT : 0;
8084 }
8085 
put_cluster_ops(struct mddev * mddev)8086 static void put_cluster_ops(struct mddev *mddev)
8087 {
8088 	if (!mddev->cluster_ops)
8089 		return;
8090 
8091 	mddev->cluster_ops->leave(mddev);
8092 	module_put(mddev->cluster_ops->head.owner);
8093 	mddev->cluster_ops = NULL;
8094 }
8095 
8096 /*
8097  * update_array_info is used to change the configuration of an
8098  * on-line array.
8099  * The version, ctime,level,size,raid_disks,not_persistent, layout,chunk_size
8100  * fields in the info are checked against the array.
8101  * Any differences that cannot be handled will cause an error.
8102  * Normally, only one change can be managed at a time.
8103  */
update_array_info(struct mddev * mddev,mdu_array_info_t * info)8104 static int update_array_info(struct mddev *mddev, mdu_array_info_t *info)
8105 {
8106 	int rv = 0;
8107 	int cnt = 0;
8108 	int state = 0;
8109 
8110 	/* calculate expected state,ignoring low bits */
8111 	if (mddev->bitmap && mddev->bitmap_info.offset)
8112 		state |= (1 << MD_SB_BITMAP_PRESENT);
8113 
8114 	if (mddev->major_version != info->major_version ||
8115 	    mddev->minor_version != info->minor_version ||
8116 /*	    mddev->patch_version != info->patch_version || */
8117 	    mddev->ctime         != info->ctime         ||
8118 	    mddev->level         != info->level         ||
8119 /*	    mddev->layout        != info->layout        || */
8120 	    mddev->persistent	 != !info->not_persistent ||
8121 	    mddev->chunk_sectors != info->chunk_size >> 9 ||
8122 	    /* ignore bottom 8 bits of state, and allow SB_BITMAP_PRESENT to change */
8123 	    ((state^info->state) & 0xfffffe00)
8124 		)
8125 		return -EINVAL;
8126 	/* Check there is only one change */
8127 	if (info->size >= 0 && mddev->dev_sectors / 2 != info->size)
8128 		cnt++;
8129 	if (mddev->raid_disks != info->raid_disks)
8130 		cnt++;
8131 	if (mddev->layout != info->layout)
8132 		cnt++;
8133 	if ((state ^ info->state) & (1<<MD_SB_BITMAP_PRESENT))
8134 		cnt++;
8135 	if (cnt == 0)
8136 		return 0;
8137 	if (cnt > 1)
8138 		return -EINVAL;
8139 
8140 	if (mddev->layout != info->layout) {
8141 		/* Change layout
8142 		 * we don't need to do anything at the md level, the
8143 		 * personality will take care of it all.
8144 		 */
8145 		if (mddev->pers->check_reshape == NULL)
8146 			return -EINVAL;
8147 		else {
8148 			mddev->new_layout = info->layout;
8149 			rv = mddev->pers->check_reshape(mddev);
8150 			if (rv)
8151 				mddev->new_layout = mddev->layout;
8152 			return rv;
8153 		}
8154 	}
8155 	if (info->size >= 0 && mddev->dev_sectors / 2 != info->size)
8156 		rv = update_size(mddev, (sector_t)info->size * 2);
8157 
8158 	if (mddev->raid_disks    != info->raid_disks)
8159 		rv = update_raid_disks(mddev, info->raid_disks);
8160 
8161 	if ((state ^ info->state) & (1<<MD_SB_BITMAP_PRESENT)) {
8162 		if (mddev->pers->quiesce == NULL || mddev->thread == NULL) {
8163 			rv = -EINVAL;
8164 			goto err;
8165 		}
8166 		if (mddev->recovery || mddev->sync_thread) {
8167 			rv = -EBUSY;
8168 			goto err;
8169 		}
8170 		if (info->state & (1<<MD_SB_BITMAP_PRESENT)) {
8171 			/* add the bitmap */
8172 			if (mddev->bitmap) {
8173 				rv = -EEXIST;
8174 				goto err;
8175 			}
8176 			if (mddev->bitmap_info.default_offset == 0) {
8177 				rv = -EINVAL;
8178 				goto err;
8179 			}
8180 			mddev->bitmap_info.offset =
8181 				mddev->bitmap_info.default_offset;
8182 			mddev->bitmap_info.space =
8183 				mddev->bitmap_info.default_space;
8184 			mddev->bitmap_id = ID_BITMAP;
8185 			rv = md_bitmap_create(mddev);
8186 			if (!rv)
8187 				rv = mddev->bitmap_ops->load(mddev);
8188 
8189 			if (rv) {
8190 				md_bitmap_destroy(mddev);
8191 				mddev->bitmap_info.offset = 0;
8192 				md_bitmap_set_none(mddev);
8193 			}
8194 		} else {
8195 			struct md_bitmap_stats stats;
8196 
8197 			rv = mddev->bitmap_ops->get_stats(mddev->bitmap, &stats);
8198 			if (rv)
8199 				goto err;
8200 
8201 			if (stats.file) {
8202 				rv = -EINVAL;
8203 				goto err;
8204 			}
8205 
8206 			if (mddev->bitmap_info.nodes) {
8207 				/* hold PW on all the bitmap lock */
8208 				if (mddev->cluster_ops->lock_all_bitmaps(mddev) <= 0) {
8209 					pr_warn("md: can't change bitmap to none since the array is in use by more than one node\n");
8210 					rv = -EPERM;
8211 					mddev->cluster_ops->unlock_all_bitmaps(mddev);
8212 					goto err;
8213 				}
8214 
8215 				mddev->bitmap_info.nodes = 0;
8216 				put_cluster_ops(mddev);
8217 				mddev->safemode_delay = DEFAULT_SAFEMODE_DELAY;
8218 			}
8219 			md_bitmap_destroy(mddev);
8220 			mddev->bitmap_info.offset = 0;
8221 			md_bitmap_set_none(mddev);
8222 		}
8223 	}
8224 	md_update_sb(mddev, 1);
8225 	return rv;
8226 err:
8227 	return rv;
8228 }
8229 
set_disk_faulty(struct mddev * mddev,dev_t dev)8230 static int set_disk_faulty(struct mddev *mddev, dev_t dev)
8231 {
8232 	struct md_rdev *rdev;
8233 	int err = 0;
8234 
8235 	if (mddev->pers == NULL)
8236 		return -ENODEV;
8237 
8238 	rcu_read_lock();
8239 	rdev = md_find_rdev_rcu(mddev, dev);
8240 	if (!rdev)
8241 		err =  -ENODEV;
8242 	else {
8243 		md_error(mddev, rdev);
8244 		if (test_bit(MD_BROKEN, &mddev->flags))
8245 			err = -EBUSY;
8246 	}
8247 	rcu_read_unlock();
8248 	return err;
8249 }
8250 
8251 /*
8252  * We have a problem here : there is no easy way to give a CHS
8253  * virtual geometry. We currently pretend that we have a 2 heads
8254  * 4 sectors (with a BIG number of cylinders...). This drives
8255  * dosfs just mad... ;-)
8256  */
md_getgeo(struct gendisk * disk,struct hd_geometry * geo)8257 static int md_getgeo(struct gendisk *disk, struct hd_geometry *geo)
8258 {
8259 	struct mddev *mddev = disk->private_data;
8260 
8261 	geo->heads = 2;
8262 	geo->sectors = 4;
8263 	geo->cylinders = mddev->array_sectors / 8;
8264 	return 0;
8265 }
8266 
md_ioctl_valid(unsigned int cmd)8267 static inline int md_ioctl_valid(unsigned int cmd)
8268 {
8269 	switch (cmd) {
8270 	case GET_ARRAY_INFO:
8271 	case GET_DISK_INFO:
8272 	case RAID_VERSION:
8273 		return 0;
8274 	case ADD_NEW_DISK:
8275 	case GET_BITMAP_FILE:
8276 	case HOT_ADD_DISK:
8277 	case HOT_REMOVE_DISK:
8278 	case RESTART_ARRAY_RW:
8279 	case RUN_ARRAY:
8280 	case SET_ARRAY_INFO:
8281 	case SET_BITMAP_FILE:
8282 	case SET_DISK_FAULTY:
8283 	case STOP_ARRAY:
8284 	case STOP_ARRAY_RO:
8285 	case CLUSTERED_DISK_NACK:
8286 		if (!capable(CAP_SYS_ADMIN))
8287 			return -EACCES;
8288 		return 0;
8289 	default:
8290 		return -ENOTTY;
8291 	}
8292 }
8293 
md_ioctl_need_suspend(unsigned int cmd)8294 static bool md_ioctl_need_suspend(unsigned int cmd)
8295 {
8296 	switch (cmd) {
8297 	case ADD_NEW_DISK:
8298 	case HOT_ADD_DISK:
8299 	case HOT_REMOVE_DISK:
8300 	case SET_BITMAP_FILE:
8301 	case SET_ARRAY_INFO:
8302 		return true;
8303 	default:
8304 		return false;
8305 	}
8306 }
8307 
__md_set_array_info(struct mddev * mddev,void __user * argp)8308 static int __md_set_array_info(struct mddev *mddev, void __user *argp)
8309 {
8310 	mdu_array_info_t info;
8311 	int err;
8312 
8313 	if (!argp)
8314 		memset(&info, 0, sizeof(info));
8315 	else if (copy_from_user(&info, argp, sizeof(info)))
8316 		return -EFAULT;
8317 
8318 	if (mddev->pers) {
8319 		err = update_array_info(mddev, &info);
8320 		if (err)
8321 			pr_warn("md: couldn't update array info. %d\n", err);
8322 		return err;
8323 	}
8324 
8325 	if (!list_empty(&mddev->disks)) {
8326 		pr_warn("md: array %s already has disks!\n", mdname(mddev));
8327 		return -EBUSY;
8328 	}
8329 
8330 	if (mddev->raid_disks) {
8331 		pr_warn("md: array %s already initialised!\n", mdname(mddev));
8332 		return -EBUSY;
8333 	}
8334 
8335 	err = md_set_array_info(mddev, &info);
8336 	if (err)
8337 		pr_warn("md: couldn't set array info. %d\n", err);
8338 
8339 	return err;
8340 }
8341 
md_ioctl(struct block_device * bdev,blk_mode_t mode,unsigned int cmd,unsigned long arg)8342 static int md_ioctl(struct block_device *bdev, blk_mode_t mode,
8343 			unsigned int cmd, unsigned long arg)
8344 {
8345 	int err = 0;
8346 	unsigned int noio_flags = 0;
8347 	void __user *argp = (void __user *)arg;
8348 	struct mddev *mddev = NULL;
8349 	bool suspend;
8350 
8351 	err = md_ioctl_valid(cmd);
8352 	if (err)
8353 		return err;
8354 
8355 	/*
8356 	 * Commands dealing with the RAID driver but not any
8357 	 * particular array:
8358 	 */
8359 	if (cmd == RAID_VERSION)
8360 		return get_version(argp);
8361 
8362 	/*
8363 	 * Commands creating/starting a new array:
8364 	 */
8365 
8366 	mddev = bdev->bd_disk->private_data;
8367 
8368 	/* Some actions do not requires the mutex */
8369 	switch (cmd) {
8370 	case GET_ARRAY_INFO:
8371 		if (!mddev->raid_disks && !mddev->external)
8372 			return -ENODEV;
8373 		return get_array_info(mddev, argp);
8374 
8375 	case GET_DISK_INFO:
8376 		if (!mddev->raid_disks && !mddev->external)
8377 			return -ENODEV;
8378 		return get_disk_info(mddev, argp);
8379 
8380 	case SET_DISK_FAULTY:
8381 		return set_disk_faulty(mddev, new_decode_dev(arg));
8382 
8383 	case GET_BITMAP_FILE:
8384 		return get_bitmap_file(mddev, argp);
8385 	}
8386 
8387 	if (cmd == STOP_ARRAY || cmd == STOP_ARRAY_RO) {
8388 		/* Need to flush page cache, and ensure no-one else opens
8389 		 * and writes
8390 		 */
8391 		err = mddev_set_closing_and_sync_blockdev(mddev, 1);
8392 		if (err)
8393 			return err;
8394 	}
8395 
8396 	if (!md_is_rdwr(mddev))
8397 		flush_work(&mddev->sync_work);
8398 
8399 	suspend = md_ioctl_need_suspend(cmd);
8400 	err = suspend ? mddev_suspend_and_lock(mddev) : mddev_lock(mddev);
8401 	if (err) {
8402 		pr_debug("md: ioctl lock interrupted, reason %d, cmd %d\n",
8403 			 err, cmd);
8404 		goto out;
8405 	}
8406 	if (suspend)
8407 		noio_flags = memalloc_noio_save();
8408 
8409 	if (cmd == SET_ARRAY_INFO) {
8410 		err = __md_set_array_info(mddev, argp);
8411 		goto unlock;
8412 	}
8413 
8414 	/*
8415 	 * Commands querying/configuring an existing array:
8416 	 */
8417 	/* if we are not initialised yet, only ADD_NEW_DISK, STOP_ARRAY,
8418 	 * RUN_ARRAY, and GET_ and SET_BITMAP_FILE are allowed */
8419 	if ((!mddev->raid_disks && !mddev->external)
8420 	    && cmd != ADD_NEW_DISK && cmd != STOP_ARRAY
8421 	    && cmd != RUN_ARRAY && cmd != SET_BITMAP_FILE
8422 	    && cmd != GET_BITMAP_FILE) {
8423 		err = -ENODEV;
8424 		goto unlock;
8425 	}
8426 
8427 	/*
8428 	 * Commands even a read-only array can execute:
8429 	 */
8430 	switch (cmd) {
8431 	case RESTART_ARRAY_RW:
8432 		err = restart_array(mddev);
8433 		goto unlock;
8434 
8435 	case STOP_ARRAY:
8436 		err = do_md_stop(mddev, 0);
8437 		goto unlock;
8438 
8439 	case STOP_ARRAY_RO:
8440 		if (mddev->pers)
8441 			err = md_set_readonly(mddev);
8442 		goto unlock;
8443 
8444 	case HOT_REMOVE_DISK:
8445 		err = hot_remove_disk(mddev, new_decode_dev(arg));
8446 		goto unlock;
8447 
8448 	case ADD_NEW_DISK:
8449 		/* We can support ADD_NEW_DISK on read-only arrays
8450 		 * only if we are re-adding a preexisting device.
8451 		 * So require mddev->pers and MD_DISK_SYNC.
8452 		 */
8453 		if (mddev->pers) {
8454 			mdu_disk_info_t info;
8455 			if (copy_from_user(&info, argp, sizeof(info)))
8456 				err = -EFAULT;
8457 			else if (!(info.state & (1<<MD_DISK_SYNC)))
8458 				/* Need to clear read-only for this */
8459 				break;
8460 			else
8461 				err = md_add_new_disk(mddev, &info);
8462 			goto unlock;
8463 		}
8464 		break;
8465 	}
8466 
8467 	/*
8468 	 * The remaining ioctls are changing the state of the
8469 	 * superblock, so we do not allow them on read-only arrays.
8470 	 */
8471 	if (!md_is_rdwr(mddev) && mddev->pers) {
8472 		if (mddev->ro != MD_AUTO_READ) {
8473 			err = -EROFS;
8474 			goto unlock;
8475 		}
8476 		mddev->ro = MD_RDWR;
8477 		sysfs_notify_dirent_safe(mddev->sysfs_state);
8478 		set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
8479 		/* mddev_unlock will wake thread */
8480 		/* If a device failed while we were read-only, we
8481 		 * need to make sure the metadata is updated now.
8482 		 */
8483 		if (test_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags)) {
8484 			mddev_unlock(mddev);
8485 			wait_event(mddev->sb_wait,
8486 				   !test_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags) &&
8487 				   !test_bit(MD_SB_CHANGE_PENDING, &mddev->sb_flags));
8488 			mddev_lock_nointr(mddev);
8489 		}
8490 	}
8491 
8492 	switch (cmd) {
8493 	case ADD_NEW_DISK:
8494 	{
8495 		mdu_disk_info_t info;
8496 		if (copy_from_user(&info, argp, sizeof(info)))
8497 			err = -EFAULT;
8498 		else
8499 			err = md_add_new_disk(mddev, &info);
8500 		goto unlock;
8501 	}
8502 
8503 	case CLUSTERED_DISK_NACK:
8504 		if (mddev_is_clustered(mddev))
8505 			mddev->cluster_ops->new_disk_ack(mddev, false);
8506 		else
8507 			err = -EINVAL;
8508 		goto unlock;
8509 
8510 	case HOT_ADD_DISK:
8511 		err = hot_add_disk(mddev, new_decode_dev(arg));
8512 		goto unlock;
8513 
8514 	case RUN_ARRAY:
8515 		err = do_md_run(mddev);
8516 		goto unlock;
8517 
8518 	case SET_BITMAP_FILE:
8519 		err = set_bitmap_file(mddev, (int)arg);
8520 		goto unlock;
8521 
8522 	default:
8523 		err = -EINVAL;
8524 		goto unlock;
8525 	}
8526 
8527 unlock:
8528 	if (mddev->hold_active == UNTIL_IOCTL &&
8529 	    err != -EINVAL)
8530 		mddev->hold_active = 0;
8531 
8532 	if (suspend) {
8533 		memalloc_noio_restore(noio_flags);
8534 		mddev_unlock_and_resume(mddev);
8535 	} else {
8536 		mddev_unlock(mddev);
8537 	}
8538 
8539 out:
8540 	if (cmd == STOP_ARRAY_RO || (err && cmd == STOP_ARRAY))
8541 		clear_bit(MD_CLOSING, &mddev->flags);
8542 	return err;
8543 }
8544 #ifdef CONFIG_COMPAT
md_compat_ioctl(struct block_device * bdev,blk_mode_t mode,unsigned int cmd,unsigned long arg)8545 static int md_compat_ioctl(struct block_device *bdev, blk_mode_t mode,
8546 		    unsigned int cmd, unsigned long arg)
8547 {
8548 	switch (cmd) {
8549 	case HOT_REMOVE_DISK:
8550 	case HOT_ADD_DISK:
8551 	case SET_DISK_FAULTY:
8552 	case SET_BITMAP_FILE:
8553 		/* These take in integer arg, do not convert */
8554 		break;
8555 	default:
8556 		arg = (unsigned long)compat_ptr(arg);
8557 		break;
8558 	}
8559 
8560 	return md_ioctl(bdev, mode, cmd, arg);
8561 }
8562 #endif /* CONFIG_COMPAT */
8563 
md_set_read_only(struct block_device * bdev,bool ro)8564 static int md_set_read_only(struct block_device *bdev, bool ro)
8565 {
8566 	struct mddev *mddev = bdev->bd_disk->private_data;
8567 	int err;
8568 
8569 	err = mddev_lock(mddev);
8570 	if (err)
8571 		return err;
8572 
8573 	if (!mddev->raid_disks && !mddev->external) {
8574 		err = -ENODEV;
8575 		goto out_unlock;
8576 	}
8577 
8578 	/*
8579 	 * Transitioning to read-auto need only happen for arrays that call
8580 	 * md_write_start and which are not ready for writes yet.
8581 	 */
8582 	if (!ro && mddev->ro == MD_RDONLY && mddev->pers) {
8583 		err = restart_array(mddev);
8584 		if (err)
8585 			goto out_unlock;
8586 		mddev->ro = MD_AUTO_READ;
8587 	}
8588 
8589 out_unlock:
8590 	mddev_unlock(mddev);
8591 	return err;
8592 }
8593 
md_open(struct gendisk * disk,blk_mode_t mode)8594 static int md_open(struct gendisk *disk, blk_mode_t mode)
8595 {
8596 	struct mddev *mddev;
8597 	int err;
8598 
8599 	spin_lock(&all_mddevs_lock);
8600 	mddev = mddev_get(disk->private_data);
8601 	spin_unlock(&all_mddevs_lock);
8602 	if (!mddev)
8603 		return -ENODEV;
8604 
8605 	err = mutex_lock_interruptible(&mddev->open_mutex);
8606 	if (err)
8607 		goto out;
8608 
8609 	err = -ENODEV;
8610 	if (test_bit(MD_CLOSING, &mddev->flags))
8611 		goto out_unlock;
8612 
8613 	atomic_inc(&mddev->openers);
8614 	mutex_unlock(&mddev->open_mutex);
8615 
8616 	disk_check_media_change(disk);
8617 	return 0;
8618 
8619 out_unlock:
8620 	mutex_unlock(&mddev->open_mutex);
8621 out:
8622 	mddev_put(mddev);
8623 	return err;
8624 }
8625 
md_release(struct gendisk * disk)8626 static void md_release(struct gendisk *disk)
8627 {
8628 	struct mddev *mddev = disk->private_data;
8629 
8630 	BUG_ON(!mddev);
8631 	atomic_dec(&mddev->openers);
8632 	mddev_put(mddev);
8633 }
8634 
md_check_events(struct gendisk * disk,unsigned int clearing)8635 static unsigned int md_check_events(struct gendisk *disk, unsigned int clearing)
8636 {
8637 	struct mddev *mddev = disk->private_data;
8638 	unsigned int ret = 0;
8639 
8640 	if (mddev->changed)
8641 		ret = DISK_EVENT_MEDIA_CHANGE;
8642 	mddev->changed = 0;
8643 	return ret;
8644 }
8645 
md_free_disk(struct gendisk * disk)8646 static void md_free_disk(struct gendisk *disk)
8647 {
8648 	struct mddev *mddev = disk->private_data;
8649 
8650 	mddev_free(mddev);
8651 }
8652 
8653 const struct block_device_operations md_fops =
8654 {
8655 	.owner		= THIS_MODULE,
8656 	.submit_bio	= md_submit_bio,
8657 	.open		= md_open,
8658 	.release	= md_release,
8659 	.ioctl		= md_ioctl,
8660 #ifdef CONFIG_COMPAT
8661 	.compat_ioctl	= md_compat_ioctl,
8662 #endif
8663 	.getgeo		= md_getgeo,
8664 	.check_events	= md_check_events,
8665 	.set_read_only	= md_set_read_only,
8666 	.free_disk	= md_free_disk,
8667 };
8668 
md_thread(void * arg)8669 static int md_thread(void *arg)
8670 {
8671 	struct md_thread *thread = arg;
8672 
8673 	/*
8674 	 * md_thread is a 'system-thread', it's priority should be very
8675 	 * high. We avoid resource deadlocks individually in each
8676 	 * raid personality. (RAID5 does preallocation) We also use RR and
8677 	 * the very same RT priority as kswapd, thus we will never get
8678 	 * into a priority inversion deadlock.
8679 	 *
8680 	 * we definitely have to have equal or higher priority than
8681 	 * bdflush, otherwise bdflush will deadlock if there are too
8682 	 * many dirty RAID5 blocks.
8683 	 */
8684 
8685 	allow_signal(SIGKILL);
8686 	while (!kthread_should_stop()) {
8687 
8688 		/* We need to wait INTERRUPTIBLE so that
8689 		 * we don't add to the load-average.
8690 		 * That means we need to be sure no signals are
8691 		 * pending
8692 		 */
8693 		if (signal_pending(current))
8694 			flush_signals(current);
8695 
8696 		wait_event_interruptible_timeout
8697 			(thread->wqueue,
8698 			 test_bit(THREAD_WAKEUP, &thread->flags)
8699 			 || kthread_should_stop() || kthread_should_park(),
8700 			 thread->timeout);
8701 
8702 		clear_bit(THREAD_WAKEUP, &thread->flags);
8703 		if (kthread_should_park())
8704 			kthread_parkme();
8705 		if (!kthread_should_stop())
8706 			thread->run(thread);
8707 	}
8708 
8709 	return 0;
8710 }
8711 
md_wakeup_thread_directly(struct md_thread __rcu ** thread)8712 static void md_wakeup_thread_directly(struct md_thread __rcu **thread)
8713 {
8714 	struct md_thread *t;
8715 
8716 	rcu_read_lock();
8717 	t = rcu_dereference(*thread);
8718 	if (t)
8719 		wake_up_process(t->tsk);
8720 	rcu_read_unlock();
8721 }
8722 
__md_wakeup_thread(struct md_thread __rcu * thread)8723 void __md_wakeup_thread(struct md_thread __rcu *thread)
8724 {
8725 	struct md_thread *t;
8726 
8727 	t = rcu_dereference(thread);
8728 	if (t) {
8729 		pr_debug("md: waking up MD thread %s.\n", t->tsk->comm);
8730 		set_bit(THREAD_WAKEUP, &t->flags);
8731 		if (wq_has_sleeper(&t->wqueue))
8732 			wake_up(&t->wqueue);
8733 	}
8734 }
8735 EXPORT_SYMBOL(__md_wakeup_thread);
8736 
md_register_thread(void (* run)(struct md_thread *),struct mddev * mddev,const char * name)8737 struct md_thread *md_register_thread(void (*run) (struct md_thread *),
8738 		struct mddev *mddev, const char *name)
8739 {
8740 	struct md_thread *thread;
8741 
8742 	thread = kzalloc_obj(struct md_thread);
8743 	if (!thread)
8744 		return NULL;
8745 
8746 	init_waitqueue_head(&thread->wqueue);
8747 
8748 	thread->run = run;
8749 	thread->mddev = mddev;
8750 	thread->timeout = MAX_SCHEDULE_TIMEOUT;
8751 	thread->tsk = kthread_run(md_thread, thread,
8752 				  "%s_%s",
8753 				  mdname(thread->mddev),
8754 				  name);
8755 	if (IS_ERR(thread->tsk)) {
8756 		kfree(thread);
8757 		return NULL;
8758 	}
8759 	return thread;
8760 }
8761 EXPORT_SYMBOL(md_register_thread);
8762 
md_unregister_thread(struct mddev * mddev,struct md_thread __rcu ** threadp)8763 void md_unregister_thread(struct mddev *mddev, struct md_thread __rcu **threadp)
8764 {
8765 	struct md_thread *thread = rcu_dereference_protected(*threadp,
8766 					lockdep_is_held(&mddev->reconfig_mutex));
8767 
8768 	if (!thread)
8769 		return;
8770 
8771 	rcu_assign_pointer(*threadp, NULL);
8772 	synchronize_rcu();
8773 
8774 	pr_debug("interrupting MD-thread pid %d\n", task_pid_nr(thread->tsk));
8775 	kthread_stop(thread->tsk);
8776 	kfree(thread);
8777 }
8778 EXPORT_SYMBOL(md_unregister_thread);
8779 
md_error(struct mddev * mddev,struct md_rdev * rdev)8780 void md_error(struct mddev *mddev, struct md_rdev *rdev)
8781 {
8782 	if (!rdev || test_bit(Faulty, &rdev->flags))
8783 		return;
8784 
8785 	if (!mddev->pers || !mddev->pers->error_handler)
8786 		return;
8787 	mddev->pers->error_handler(mddev, rdev);
8788 
8789 	if (mddev->pers->head.id == ID_RAID0 ||
8790 	    mddev->pers->head.id == ID_LINEAR)
8791 		return;
8792 
8793 	if (mddev->degraded && !test_bit(MD_BROKEN, &mddev->flags))
8794 		set_bit(MD_RECOVERY_RECOVER, &mddev->recovery);
8795 	sysfs_notify_dirent_safe(rdev->sysfs_state);
8796 	set_bit(MD_RECOVERY_INTR, &mddev->recovery);
8797 	if (!test_bit(MD_BROKEN, &mddev->flags)) {
8798 		set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
8799 		md_wakeup_thread(mddev->thread);
8800 	}
8801 	if (mddev->event_work.func)
8802 		queue_work(md_misc_wq, &mddev->event_work);
8803 	md_new_event();
8804 }
8805 EXPORT_SYMBOL(md_error);
8806 
8807 /* seq_file implementation /proc/mdstat */
8808 
status_unused(struct seq_file * seq)8809 static void status_unused(struct seq_file *seq)
8810 {
8811 	int i = 0;
8812 	struct md_rdev *rdev;
8813 
8814 	seq_printf(seq, "unused devices: ");
8815 
8816 	list_for_each_entry(rdev, &pending_raid_disks, same_set) {
8817 		i++;
8818 		seq_printf(seq, "%pg ", rdev->bdev);
8819 	}
8820 	if (!i)
8821 		seq_printf(seq, "<none>");
8822 
8823 	seq_printf(seq, "\n");
8824 }
8825 
status_personalities(struct seq_file * seq)8826 static void status_personalities(struct seq_file *seq)
8827 {
8828 	struct md_submodule_head *head;
8829 	unsigned long i;
8830 
8831 	seq_puts(seq, "Personalities : ");
8832 
8833 	xa_lock(&md_submodule);
8834 	xa_for_each(&md_submodule, i, head)
8835 		if (head->type == MD_PERSONALITY)
8836 			seq_printf(seq, "[%s] ", head->name);
8837 	xa_unlock(&md_submodule);
8838 
8839 	seq_puts(seq, "\n");
8840 }
8841 
status_resync(struct seq_file * seq,struct mddev * mddev)8842 static int status_resync(struct seq_file *seq, struct mddev *mddev)
8843 {
8844 	sector_t max_sectors, resync, res;
8845 	unsigned long dt, db = 0;
8846 	sector_t rt, curr_mark_cnt, resync_mark_cnt;
8847 	int scale, recovery_active;
8848 	unsigned int per_milli;
8849 
8850 	if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery) ||
8851 	    test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery))
8852 		max_sectors = mddev->resync_max_sectors;
8853 	else
8854 		max_sectors = mddev->dev_sectors;
8855 
8856 	resync = mddev->curr_resync;
8857 	if (resync < MD_RESYNC_ACTIVE) {
8858 		if (test_bit(MD_RECOVERY_DONE, &mddev->recovery))
8859 			/* Still cleaning up */
8860 			resync = max_sectors;
8861 	} else if (resync > max_sectors) {
8862 		resync = max_sectors;
8863 	} else {
8864 		res = atomic_read(&mddev->recovery_active);
8865 		/*
8866 		 * Resync has started, but the subtraction has overflowed or
8867 		 * yielded one of the special values. Force it to active to
8868 		 * ensure the status reports an active resync.
8869 		 */
8870 		if (resync < res || resync - res < MD_RESYNC_ACTIVE)
8871 			resync = MD_RESYNC_ACTIVE;
8872 		else
8873 			resync -= res;
8874 	}
8875 
8876 	if (resync == MD_RESYNC_NONE) {
8877 		if (test_bit(MD_RESYNCING_REMOTE, &mddev->recovery)) {
8878 			struct md_rdev *rdev;
8879 
8880 			rdev_for_each(rdev, mddev)
8881 				if (rdev->raid_disk >= 0 &&
8882 				    !test_bit(Faulty, &rdev->flags) &&
8883 				    rdev->recovery_offset != MaxSector &&
8884 				    rdev->recovery_offset) {
8885 					seq_printf(seq, "\trecover=REMOTE");
8886 					return 1;
8887 				}
8888 			if (mddev->reshape_position != MaxSector)
8889 				seq_printf(seq, "\treshape=REMOTE");
8890 			else
8891 				seq_printf(seq, "\tresync=REMOTE");
8892 			return 1;
8893 		}
8894 		if (mddev->resync_offset < MaxSector) {
8895 			seq_printf(seq, "\tresync=PENDING");
8896 			return 1;
8897 		}
8898 		return 0;
8899 	}
8900 	if (resync < MD_RESYNC_ACTIVE) {
8901 		seq_printf(seq, "\tresync=DELAYED");
8902 		return 1;
8903 	}
8904 
8905 	WARN_ON(max_sectors == 0);
8906 	/* Pick 'scale' such that (resync>>scale)*1000 will fit
8907 	 * in a sector_t, and (max_sectors>>scale) will fit in a
8908 	 * u32, as those are the requirements for sector_div.
8909 	 * Thus 'scale' must be at least 10
8910 	 */
8911 	scale = 10;
8912 	if (sizeof(sector_t) > sizeof(unsigned long)) {
8913 		while ( max_sectors/2 > (1ULL<<(scale+32)))
8914 			scale++;
8915 	}
8916 	res = (resync>>scale)*1000;
8917 	sector_div(res, (u32)((max_sectors>>scale)+1));
8918 
8919 	per_milli = res;
8920 	{
8921 		int i, x = per_milli/50, y = 20-x;
8922 		seq_printf(seq, "[");
8923 		for (i = 0; i < x; i++)
8924 			seq_printf(seq, "=");
8925 		seq_printf(seq, ">");
8926 		for (i = 0; i < y; i++)
8927 			seq_printf(seq, ".");
8928 		seq_printf(seq, "] ");
8929 	}
8930 	seq_printf(seq, " %s =%3u.%u%% (%llu/%llu)",
8931 		   (test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery)?
8932 		    "reshape" :
8933 		    (test_bit(MD_RECOVERY_CHECK, &mddev->recovery)?
8934 		     "check" :
8935 		     (test_bit(MD_RECOVERY_SYNC, &mddev->recovery) ?
8936 		      "resync" : "recovery"))),
8937 		   per_milli/10, per_milli % 10,
8938 		   (unsigned long long) resync/2,
8939 		   (unsigned long long) max_sectors/2);
8940 
8941 	/*
8942 	 * dt: time from mark until now
8943 	 * db: blocks written from mark until now
8944 	 * rt: remaining time
8945 	 *
8946 	 * rt is a sector_t, which is always 64bit now. We are keeping
8947 	 * the original algorithm, but it is not really necessary.
8948 	 *
8949 	 * Original algorithm:
8950 	 *   So we divide before multiply in case it is 32bit and close
8951 	 *   to the limit.
8952 	 *   We scale the divisor (db) by 32 to avoid losing precision
8953 	 *   near the end of resync when the number of remaining sectors
8954 	 *   is close to 'db'.
8955 	 *   We then divide rt by 32 after multiplying by db to compensate.
8956 	 *   The '+1' avoids division by zero if db is very small.
8957 	 */
8958 	dt = ((jiffies - mddev->resync_mark) / HZ);
8959 	if (!dt) dt++;
8960 
8961 	curr_mark_cnt = mddev->curr_mark_cnt;
8962 	recovery_active = atomic_read(&mddev->recovery_active);
8963 	resync_mark_cnt = mddev->resync_mark_cnt;
8964 
8965 	if (curr_mark_cnt >= (recovery_active + resync_mark_cnt))
8966 		db = curr_mark_cnt - (recovery_active + resync_mark_cnt);
8967 
8968 	rt = max_sectors - resync;    /* number of remaining sectors */
8969 	rt = div64_u64(rt, db/32+1);
8970 	rt *= dt;
8971 	rt >>= 5;
8972 
8973 	seq_printf(seq, " finish=%lu.%lumin", (unsigned long)rt / 60,
8974 		   ((unsigned long)rt % 60)/6);
8975 
8976 	seq_printf(seq, " speed=%ldK/sec", db/2/dt);
8977 	return 1;
8978 }
8979 
md_seq_start(struct seq_file * seq,loff_t * pos)8980 static void *md_seq_start(struct seq_file *seq, loff_t *pos)
8981 	__acquires(&all_mddevs_lock)
8982 {
8983 	seq->poll_event = atomic_read(&md_event_count);
8984 	spin_lock(&all_mddevs_lock);
8985 
8986 	return seq_list_start_head(&all_mddevs, *pos);
8987 }
8988 
md_seq_next(struct seq_file * seq,void * v,loff_t * pos)8989 static void *md_seq_next(struct seq_file *seq, void *v, loff_t *pos)
8990 {
8991 	return seq_list_next(v, &all_mddevs, pos);
8992 }
8993 
md_seq_stop(struct seq_file * seq,void * v)8994 static void md_seq_stop(struct seq_file *seq, void *v)
8995 	__releases(&all_mddevs_lock)
8996 {
8997 	spin_unlock(&all_mddevs_lock);
8998 }
8999 
md_bitmap_status(struct seq_file * seq,struct mddev * mddev)9000 static void md_bitmap_status(struct seq_file *seq, struct mddev *mddev)
9001 {
9002 	struct md_bitmap_stats stats;
9003 	unsigned long used_pages;
9004 	unsigned long chunk_kb;
9005 	int err;
9006 
9007 	if (!md_bitmap_enabled(mddev, false))
9008 		return;
9009 
9010 	err = mddev->bitmap_ops->get_stats(mddev->bitmap, &stats);
9011 	if (err)
9012 		return;
9013 
9014 	chunk_kb = mddev->bitmap_info.chunksize >> 10;
9015 	used_pages = stats.pages - stats.missing_pages;
9016 
9017 	seq_printf(seq, "bitmap: %lu/%lu pages [%luKB], %lu%s chunk",
9018 		   used_pages, stats.pages, used_pages << (PAGE_SHIFT - 10),
9019 		   chunk_kb ? chunk_kb : mddev->bitmap_info.chunksize,
9020 		   chunk_kb ? "KB" : "B");
9021 
9022 	if (stats.file) {
9023 		seq_puts(seq, ", file: ");
9024 		seq_file_path(seq, stats.file, " \t\n");
9025 	}
9026 
9027 	seq_putc(seq, '\n');
9028 }
9029 
md_seq_show(struct seq_file * seq,void * v)9030 static int md_seq_show(struct seq_file *seq, void *v)
9031 {
9032 	struct mddev *mddev;
9033 	sector_t sectors;
9034 	struct md_rdev *rdev;
9035 
9036 	if (v == &all_mddevs) {
9037 		status_personalities(seq);
9038 		if (list_empty(&all_mddevs))
9039 			status_unused(seq);
9040 		return 0;
9041 	}
9042 
9043 	mddev = list_entry(v, struct mddev, all_mddevs);
9044 	if (!mddev_get(mddev))
9045 		return 0;
9046 
9047 	spin_unlock(&all_mddevs_lock);
9048 
9049 	/* prevent bitmap to be freed after checking */
9050 	mutex_lock(&mddev->bitmap_info.mutex);
9051 
9052 	spin_lock(&mddev->lock);
9053 	if (mddev->pers || mddev->raid_disks || !list_empty(&mddev->disks)) {
9054 		seq_printf(seq, "%s : ", mdname(mddev));
9055 		if (mddev->pers) {
9056 			if (test_bit(MD_BROKEN, &mddev->flags))
9057 				seq_printf(seq, "broken");
9058 			else
9059 				seq_printf(seq, "active");
9060 			if (mddev->ro == MD_RDONLY)
9061 				seq_printf(seq, " (read-only)");
9062 			if (mddev->ro == MD_AUTO_READ)
9063 				seq_printf(seq, " (auto-read-only)");
9064 			seq_printf(seq, " %s", mddev->pers->head.name);
9065 		} else {
9066 			seq_printf(seq, "inactive");
9067 		}
9068 
9069 		sectors = 0;
9070 		rcu_read_lock();
9071 		rdev_for_each_rcu(rdev, mddev) {
9072 			seq_printf(seq, " %pg[%d]", rdev->bdev, rdev->desc_nr);
9073 
9074 			if (test_bit(WriteMostly, &rdev->flags))
9075 				seq_printf(seq, "(W)");
9076 			if (test_bit(Journal, &rdev->flags))
9077 				seq_printf(seq, "(J)");
9078 			if (test_bit(Faulty, &rdev->flags)) {
9079 				seq_printf(seq, "(F)");
9080 				continue;
9081 			}
9082 			if (rdev->raid_disk < 0)
9083 				seq_printf(seq, "(S)"); /* spare */
9084 			if (test_bit(Replacement, &rdev->flags))
9085 				seq_printf(seq, "(R)");
9086 			sectors += rdev->sectors;
9087 		}
9088 		rcu_read_unlock();
9089 
9090 		if (!list_empty(&mddev->disks)) {
9091 			if (mddev->pers)
9092 				seq_printf(seq, "\n      %llu blocks",
9093 					   (unsigned long long)
9094 					   mddev->array_sectors / 2);
9095 			else
9096 				seq_printf(seq, "\n      %llu blocks",
9097 					   (unsigned long long)sectors / 2);
9098 		}
9099 		if (mddev->persistent) {
9100 			if (mddev->major_version != 0 ||
9101 			    mddev->minor_version != 90) {
9102 				seq_printf(seq," super %d.%d",
9103 					   mddev->major_version,
9104 					   mddev->minor_version);
9105 			}
9106 		} else if (mddev->external)
9107 			seq_printf(seq, " super external:%s",
9108 				   mddev->metadata_type);
9109 		else
9110 			seq_printf(seq, " super non-persistent");
9111 
9112 		if (mddev->pers) {
9113 			mddev->pers->status(seq, mddev);
9114 			seq_printf(seq, "\n      ");
9115 			if (mddev->pers->sync_request) {
9116 				if (status_resync(seq, mddev))
9117 					seq_printf(seq, "\n      ");
9118 			}
9119 		} else
9120 			seq_printf(seq, "\n       ");
9121 
9122 		md_bitmap_status(seq, mddev);
9123 
9124 		seq_printf(seq, "\n");
9125 	}
9126 	spin_unlock(&mddev->lock);
9127 	mutex_unlock(&mddev->bitmap_info.mutex);
9128 	spin_lock(&all_mddevs_lock);
9129 
9130 	if (mddev == list_last_entry(&all_mddevs, struct mddev, all_mddevs))
9131 		status_unused(seq);
9132 
9133 	mddev_put_locked(mddev);
9134 	return 0;
9135 }
9136 
9137 static const struct seq_operations md_seq_ops = {
9138 	.start  = md_seq_start,
9139 	.next   = md_seq_next,
9140 	.stop   = md_seq_stop,
9141 	.show   = md_seq_show,
9142 };
9143 
md_seq_open(struct inode * inode,struct file * file)9144 static int md_seq_open(struct inode *inode, struct file *file)
9145 {
9146 	struct seq_file *seq;
9147 	int error;
9148 
9149 	error = seq_open(file, &md_seq_ops);
9150 	if (error)
9151 		return error;
9152 
9153 	seq = file->private_data;
9154 	seq->poll_event = atomic_read(&md_event_count);
9155 	return error;
9156 }
9157 
9158 static int md_unloading;
mdstat_poll(struct file * filp,poll_table * wait)9159 static __poll_t mdstat_poll(struct file *filp, poll_table *wait)
9160 {
9161 	struct seq_file *seq = filp->private_data;
9162 	__poll_t mask;
9163 
9164 	if (md_unloading)
9165 		return EPOLLIN|EPOLLRDNORM|EPOLLERR|EPOLLPRI;
9166 	poll_wait(filp, &md_event_waiters, wait);
9167 
9168 	/* always allow read */
9169 	mask = EPOLLIN | EPOLLRDNORM;
9170 
9171 	if (seq->poll_event != atomic_read(&md_event_count))
9172 		mask |= EPOLLERR | EPOLLPRI;
9173 	return mask;
9174 }
9175 
9176 static const struct proc_ops mdstat_proc_ops = {
9177 	.proc_open	= md_seq_open,
9178 	.proc_read	= seq_read,
9179 	.proc_lseek	= seq_lseek,
9180 	.proc_release	= seq_release,
9181 	.proc_poll	= mdstat_poll,
9182 };
9183 
register_md_submodule(struct md_submodule_head * msh)9184 int register_md_submodule(struct md_submodule_head *msh)
9185 {
9186 	return xa_insert(&md_submodule, msh->id, msh, GFP_KERNEL);
9187 }
9188 EXPORT_SYMBOL_GPL(register_md_submodule);
9189 
unregister_md_submodule(struct md_submodule_head * msh)9190 void unregister_md_submodule(struct md_submodule_head *msh)
9191 {
9192 	xa_erase(&md_submodule, msh->id);
9193 }
9194 EXPORT_SYMBOL_GPL(unregister_md_submodule);
9195 
md_setup_cluster(struct mddev * mddev,int nodes)9196 int md_setup_cluster(struct mddev *mddev, int nodes)
9197 {
9198 	int ret = get_cluster_ops(mddev);
9199 
9200 	if (ret) {
9201 		request_module("md-cluster");
9202 		ret = get_cluster_ops(mddev);
9203 	}
9204 
9205 	/* ensure module won't be unloaded */
9206 	if (ret) {
9207 		pr_warn("can't find md-cluster module or get its reference.\n");
9208 		return ret;
9209 	}
9210 
9211 	ret = mddev->cluster_ops->join(mddev, nodes);
9212 	if (!ret)
9213 		mddev->safemode_delay = 0;
9214 	return ret;
9215 }
9216 
md_cluster_stop(struct mddev * mddev)9217 void md_cluster_stop(struct mddev *mddev)
9218 {
9219 	put_cluster_ops(mddev);
9220 }
9221 
is_rdev_holder_idle(struct md_rdev * rdev,bool init)9222 static bool is_rdev_holder_idle(struct md_rdev *rdev, bool init)
9223 {
9224 	unsigned long last_events = rdev->last_events;
9225 
9226 	if (!bdev_is_partition(rdev->bdev))
9227 		return true;
9228 
9229 	/*
9230 	 * If rdev is partition, and user doesn't issue IO to the array, the
9231 	 * array is still not idle if user issues IO to other partitions.
9232 	 */
9233 	rdev->last_events = part_stat_read_accum(rdev->bdev->bd_disk->part0,
9234 						 sectors) -
9235 			    part_stat_read_accum(rdev->bdev, sectors);
9236 
9237 	return init || rdev->last_events <= last_events;
9238 }
9239 
9240 /*
9241  * mddev is idle if following conditions are matched since last check:
9242  * 1) mddev doesn't have normal IO completed;
9243  * 2) mddev doesn't have inflight normal IO;
9244  * 3) if any member disk is partition, and other partitions don't have IO
9245  *    completed;
9246  *
9247  * Noted this checking rely on IO accounting is enabled.
9248  */
is_mddev_idle(struct mddev * mddev,int init)9249 static bool is_mddev_idle(struct mddev *mddev, int init)
9250 {
9251 	unsigned long last_events = mddev->normal_io_events;
9252 	struct gendisk *disk;
9253 	struct md_rdev *rdev;
9254 	bool idle = true;
9255 
9256 	disk = mddev_is_dm(mddev) ? mddev->dm_gendisk : mddev->gendisk;
9257 	if (!disk)
9258 		return true;
9259 
9260 	mddev->normal_io_events = part_stat_read_accum(disk->part0, sectors);
9261 	if (!init && (mddev->normal_io_events > last_events ||
9262 		      bdev_count_inflight(disk->part0)))
9263 		idle = false;
9264 
9265 	rcu_read_lock();
9266 	rdev_for_each_rcu(rdev, mddev)
9267 		if (!is_rdev_holder_idle(rdev, init))
9268 			idle = false;
9269 	rcu_read_unlock();
9270 
9271 	return idle;
9272 }
9273 
md_done_sync(struct mddev * mddev,int blocks)9274 void md_done_sync(struct mddev *mddev, int blocks)
9275 {
9276 	/* another "blocks" (512byte) blocks have been synced */
9277 	atomic_sub(blocks, &mddev->recovery_active);
9278 	wake_up(&mddev->recovery_wait);
9279 }
9280 EXPORT_SYMBOL(md_done_sync);
9281 
md_sync_error(struct mddev * mddev)9282 void md_sync_error(struct mddev *mddev)
9283 {
9284 	// stop recovery, signal do_sync ....
9285 	set_bit(MD_RECOVERY_INTR, &mddev->recovery);
9286 	md_wakeup_thread(mddev->thread);
9287 }
9288 EXPORT_SYMBOL(md_sync_error);
9289 
9290 /* md_write_start(mddev, bi)
9291  * If we need to update some array metadata (e.g. 'active' flag
9292  * in superblock) before writing, schedule a superblock update
9293  * and wait for it to complete.
9294  * A return value of 'false' means that the write wasn't recorded
9295  * and cannot proceed as the array is being suspend.
9296  */
md_write_start(struct mddev * mddev,struct bio * bi)9297 void md_write_start(struct mddev *mddev, struct bio *bi)
9298 {
9299 	int did_change = 0;
9300 
9301 	if (bio_data_dir(bi) != WRITE)
9302 		return;
9303 
9304 	BUG_ON(mddev->ro == MD_RDONLY);
9305 	if (mddev->ro == MD_AUTO_READ) {
9306 		/* need to switch to read/write */
9307 		mddev->ro = MD_RDWR;
9308 		set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
9309 		md_wakeup_thread(mddev->thread);
9310 		md_wakeup_thread(mddev->sync_thread);
9311 		did_change = 1;
9312 	}
9313 	rcu_read_lock();
9314 	percpu_ref_get(&mddev->writes_pending);
9315 	smp_mb(); /* Match smp_mb in set_in_sync() */
9316 	if (mddev->safemode == 1)
9317 		mddev->safemode = 0;
9318 	/* sync_checkers is always 0 when writes_pending is in per-cpu mode */
9319 	if (mddev->in_sync || mddev->sync_checkers) {
9320 		spin_lock(&mddev->lock);
9321 		if (mddev->in_sync) {
9322 			mddev->in_sync = 0;
9323 			set_bit(MD_SB_CHANGE_CLEAN, &mddev->sb_flags);
9324 			set_bit(MD_SB_CHANGE_PENDING, &mddev->sb_flags);
9325 			md_wakeup_thread(mddev->thread);
9326 			did_change = 1;
9327 		}
9328 		spin_unlock(&mddev->lock);
9329 	}
9330 	rcu_read_unlock();
9331 	if (did_change)
9332 		sysfs_notify_dirent_safe(mddev->sysfs_state);
9333 	if (!test_bit(MD_HAS_SUPERBLOCK, &mddev->flags))
9334 		return;
9335 	wait_event(mddev->sb_wait,
9336 		   !test_bit(MD_SB_CHANGE_PENDING, &mddev->sb_flags));
9337 }
9338 EXPORT_SYMBOL(md_write_start);
9339 
9340 /* md_write_inc can only be called when md_write_start() has
9341  * already been called at least once of the current request.
9342  * It increments the counter and is useful when a single request
9343  * is split into several parts.  Each part causes an increment and
9344  * so needs a matching md_write_end().
9345  * Unlike md_write_start(), it is safe to call md_write_inc() inside
9346  * a spinlocked region.
9347  */
md_write_inc(struct mddev * mddev,struct bio * bi)9348 void md_write_inc(struct mddev *mddev, struct bio *bi)
9349 {
9350 	if (bio_data_dir(bi) != WRITE)
9351 		return;
9352 	WARN_ON_ONCE(mddev->in_sync || !md_is_rdwr(mddev));
9353 	percpu_ref_get(&mddev->writes_pending);
9354 }
9355 EXPORT_SYMBOL(md_write_inc);
9356 
md_write_end(struct mddev * mddev)9357 void md_write_end(struct mddev *mddev)
9358 {
9359 	percpu_ref_put(&mddev->writes_pending);
9360 
9361 	if (mddev->safemode == 2)
9362 		md_wakeup_thread(mddev->thread);
9363 	else if (mddev->safemode_delay)
9364 		/* The roundup() ensures this only performs locking once
9365 		 * every ->safemode_delay jiffies
9366 		 */
9367 		mod_timer(&mddev->safemode_timer,
9368 			  roundup(jiffies, mddev->safemode_delay) +
9369 			  mddev->safemode_delay);
9370 }
9371 
9372 EXPORT_SYMBOL(md_write_end);
9373 
9374 /* This is used by raid0 and raid10 */
md_submit_discard_bio(struct mddev * mddev,struct md_rdev * rdev,struct bio * bio,sector_t start,sector_t size)9375 void md_submit_discard_bio(struct mddev *mddev, struct md_rdev *rdev,
9376 			struct bio *bio, sector_t start, sector_t size)
9377 {
9378 	struct bio *discard_bio = NULL;
9379 
9380 	/* Discard is optional, so silently skip members that do not support it. */
9381 	if (unlikely(!bdev_max_discard_sectors(rdev->bdev)))
9382 		return;
9383 
9384 	__blkdev_issue_discard(rdev->bdev, start, size, GFP_NOIO, &discard_bio);
9385 	if (!discard_bio)
9386 		return;
9387 
9388 	bio_chain(discard_bio, bio);
9389 	bio_clone_blkg_association(discard_bio, bio);
9390 	mddev_trace_remap(mddev, discard_bio, bio->bi_iter.bi_sector);
9391 	submit_bio_noacct(discard_bio);
9392 }
9393 EXPORT_SYMBOL_GPL(md_submit_discard_bio);
9394 
mddev_bio_split_at_reshape_offset(struct mddev * mddev,struct bio * bio,unsigned int * max_sectors,struct bio_set * bs)9395 struct bio *mddev_bio_split_at_reshape_offset(struct mddev *mddev,
9396 					      struct bio *bio,
9397 					      unsigned int *max_sectors,
9398 					      struct bio_set *bs)
9399 {
9400 	sector_t boundary;
9401 	sector_t start;
9402 	sector_t end;
9403 	unsigned int split_sectors;
9404 
9405 	split_sectors = bio_sectors(bio);
9406 	if (max_sectors && *max_sectors && *max_sectors < split_sectors)
9407 		split_sectors = *max_sectors;
9408 
9409 	if (!test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery))
9410 		goto split;
9411 
9412 	boundary = READ_ONCE(mddev->reshape_position);
9413 	start = bio->bi_iter.bi_sector;
9414 	end = bio_end_sector(bio);
9415 	if (start >= boundary || end <= boundary)
9416 		goto split;
9417 
9418 	if (boundary - start < split_sectors)
9419 		split_sectors = boundary - start;
9420 
9421 split:
9422 	if (max_sectors)
9423 		*max_sectors = split_sectors;
9424 	if (split_sectors < bio_sectors(bio)) {
9425 		bio = bio_submit_split_bioset(bio, split_sectors, bs);
9426 		if (bio)
9427 			bio->bi_opf |= REQ_NOMERGE;
9428 	}
9429 
9430 	return bio;
9431 }
9432 EXPORT_SYMBOL_GPL(mddev_bio_split_at_reshape_offset);
9433 
md_bitmap_prepare_range(struct mddev * mddev,sector_t * offset,unsigned long * sectors,bool discard)9434 static void md_bitmap_prepare_range(struct mddev *mddev, sector_t *offset,
9435 				    unsigned long *sectors, bool discard)
9436 {
9437 	mddev->bitmap_ops->prepare_range(mddev, offset, sectors, discard);
9438 }
9439 
md_bitmap_start(struct mddev * mddev,struct md_io_clone * md_io_clone)9440 static void md_bitmap_start(struct mddev *mddev,
9441 			    struct md_io_clone *md_io_clone)
9442 {
9443 	bool discard = md_io_clone->rw == STAT_DISCARD;
9444 	md_bitmap_fn *fn = discard ? mddev->bitmap_ops->start_discard :
9445 			   mddev->bitmap_ops->start_write;
9446 
9447 	md_bitmap_prepare_range(mddev, &md_io_clone->offset,
9448 				&md_io_clone->sectors, discard);
9449 	if (!md_io_clone->sectors)
9450 		return;
9451 	fn(mddev, md_io_clone->offset, md_io_clone->sectors);
9452 }
9453 
md_bitmap_end(struct mddev * mddev,struct md_io_clone * md_io_clone)9454 static void md_bitmap_end(struct mddev *mddev, struct md_io_clone *md_io_clone)
9455 {
9456 	md_bitmap_fn *fn = unlikely(md_io_clone->rw == STAT_DISCARD) ?
9457 			   mddev->bitmap_ops->end_discard :
9458 			   mddev->bitmap_ops->end_write;
9459 
9460 	fn(mddev, md_io_clone->offset, md_io_clone->sectors);
9461 }
9462 
md_end_clone_io(struct bio * bio)9463 static void md_end_clone_io(struct bio *bio)
9464 {
9465 	struct md_io_clone *md_io_clone = container_of(bio, struct md_io_clone,
9466 						       bio_clone);
9467 	struct bio *orig_bio = md_io_clone->orig_bio;
9468 	struct mddev *mddev = md_io_clone->mddev;
9469 	struct completion *reshape_completion = bio->bi_private;
9470 
9471 	if (bio_data_dir(orig_bio) == WRITE && md_io_clone->sectors &&
9472 	    md_bitmap_enabled(mddev, false))
9473 		md_bitmap_end(mddev, md_io_clone);
9474 
9475 	if (bio->bi_status && !orig_bio->bi_status)
9476 		orig_bio->bi_status = bio->bi_status;
9477 
9478 	if (md_io_clone->start_time)
9479 		bio_end_io_acct(orig_bio, md_io_clone->start_time);
9480 
9481 	bio_put(bio);
9482 	if (unlikely(reshape_completion))
9483 		complete(reshape_completion);
9484 	else
9485 		bio_endio(orig_bio);
9486 	percpu_ref_put(&mddev->active_io);
9487 }
9488 
md_clone_bio(struct mddev * mddev,struct bio ** bio)9489 static void md_clone_bio(struct mddev *mddev, struct bio **bio)
9490 {
9491 	struct block_device *bdev = (*bio)->bi_bdev;
9492 	struct md_io_clone *md_io_clone;
9493 	struct bio *clone =
9494 		bio_alloc_clone(bdev, *bio, GFP_NOIO, &mddev->io_clone_set);
9495 
9496 	md_io_clone = container_of(clone, struct md_io_clone, bio_clone);
9497 	md_io_clone->orig_bio = *bio;
9498 	md_io_clone->mddev = mddev;
9499 	md_io_clone->sectors = 0;
9500 	if (blk_queue_io_stat(bdev->bd_disk->queue))
9501 		md_io_clone->start_time = bio_start_io_acct(*bio);
9502 	else
9503 		md_io_clone->start_time = 0;
9504 
9505 	if (bio_data_dir(*bio) == WRITE && bio_sectors(*bio) &&
9506 	    md_bitmap_enabled(mddev, false)) {
9507 		md_io_clone->offset = (*bio)->bi_iter.bi_sector;
9508 		md_io_clone->sectors = bio_sectors(*bio);
9509 		md_io_clone->rw = op_stat_group(bio_op(*bio));
9510 		md_bitmap_start(mddev, md_io_clone);
9511 	}
9512 
9513 	clone->bi_end_io = md_end_clone_io;
9514 	clone->bi_private = NULL;
9515 	*bio = clone;
9516 }
9517 
md_account_bio(struct mddev * mddev,struct bio ** bio)9518 void md_account_bio(struct mddev *mddev, struct bio **bio)
9519 {
9520 	percpu_ref_get(&mddev->active_io);
9521 	md_clone_bio(mddev, bio);
9522 }
9523 EXPORT_SYMBOL_GPL(md_account_bio);
9524 
9525 /* md_allow_write(mddev)
9526  * Calling this ensures that the array is marked 'active' so that writes
9527  * may proceed without blocking.  It is important to call this before
9528  * attempting a GFP_KERNEL allocation while holding the mddev lock.
9529  * Must be called with mddev_lock held.
9530  */
md_allow_write(struct mddev * mddev)9531 void md_allow_write(struct mddev *mddev)
9532 {
9533 	if (!mddev->pers)
9534 		return;
9535 	if (!md_is_rdwr(mddev))
9536 		return;
9537 	if (!mddev->pers->sync_request)
9538 		return;
9539 
9540 	spin_lock(&mddev->lock);
9541 	if (mddev->in_sync) {
9542 		mddev->in_sync = 0;
9543 		set_bit(MD_SB_CHANGE_CLEAN, &mddev->sb_flags);
9544 		set_bit(MD_SB_CHANGE_PENDING, &mddev->sb_flags);
9545 		if (mddev->safemode_delay &&
9546 		    mddev->safemode == 0)
9547 			mddev->safemode = 1;
9548 		spin_unlock(&mddev->lock);
9549 		md_update_sb(mddev, 0);
9550 		sysfs_notify_dirent_safe(mddev->sysfs_state);
9551 		/* wait for the dirty state to be recorded in the metadata */
9552 		wait_event(mddev->sb_wait,
9553 			   !test_bit(MD_SB_CHANGE_PENDING, &mddev->sb_flags));
9554 	} else
9555 		spin_unlock(&mddev->lock);
9556 }
9557 EXPORT_SYMBOL_GPL(md_allow_write);
9558 
md_sync_max_sectors(struct mddev * mddev,enum sync_action action)9559 static sector_t md_sync_max_sectors(struct mddev *mddev,
9560 				    enum sync_action action)
9561 {
9562 	switch (action) {
9563 	case ACTION_RESYNC:
9564 	case ACTION_CHECK:
9565 	case ACTION_REPAIR:
9566 		atomic64_set(&mddev->resync_mismatches, 0);
9567 		fallthrough;
9568 	case ACTION_RESHAPE:
9569 		return mddev->resync_max_sectors;
9570 	case ACTION_RECOVER:
9571 		return mddev->dev_sectors;
9572 	default:
9573 		return 0;
9574 	}
9575 }
9576 
9577 /*
9578  * If lazy recovery is requested and all rdevs are in sync, select the rdev with
9579  * the higest index to perfore recovery to build initial xor data, this is the
9580  * same as old bitmap.
9581  */
mddev_select_lazy_recover_rdev(struct mddev * mddev)9582 static bool mddev_select_lazy_recover_rdev(struct mddev *mddev)
9583 {
9584 	struct md_rdev *recover_rdev = NULL;
9585 	struct md_rdev *rdev;
9586 	bool ret = false;
9587 
9588 	rcu_read_lock();
9589 	rdev_for_each_rcu(rdev, mddev) {
9590 		if (rdev->raid_disk < 0)
9591 			continue;
9592 
9593 		if (test_bit(Faulty, &rdev->flags) ||
9594 		    !test_bit(In_sync, &rdev->flags))
9595 			break;
9596 
9597 		if (!recover_rdev || recover_rdev->raid_disk < rdev->raid_disk)
9598 			recover_rdev = rdev;
9599 	}
9600 
9601 	if (recover_rdev) {
9602 		clear_bit(In_sync, &recover_rdev->flags);
9603 		ret = true;
9604 	}
9605 
9606 	rcu_read_unlock();
9607 	return ret;
9608 }
9609 
md_sync_position(struct mddev * mddev,enum sync_action action)9610 static sector_t md_sync_position(struct mddev *mddev, enum sync_action action)
9611 {
9612 	sector_t start = 0;
9613 	struct md_rdev *rdev;
9614 
9615 	switch (action) {
9616 	case ACTION_CHECK:
9617 	case ACTION_REPAIR:
9618 		return mddev->resync_min;
9619 	case ACTION_RESYNC:
9620 		if (!mddev->bitmap)
9621 			return mddev->resync_offset;
9622 		return 0;
9623 	case ACTION_RESHAPE:
9624 		/*
9625 		 * If the original node aborts reshaping then we continue the
9626 		 * reshaping, so set again to avoid restart reshape from the
9627 		 * first beginning
9628 		 */
9629 		if (mddev_is_clustered(mddev) &&
9630 		    mddev->reshape_position != MaxSector)
9631 			return mddev->reshape_position;
9632 		return 0;
9633 	case ACTION_RECOVER:
9634 		start = MaxSector;
9635 		rcu_read_lock();
9636 		rdev_for_each_rcu(rdev, mddev)
9637 			if (rdev_needs_recovery(rdev, start))
9638 				start = rdev->recovery_offset;
9639 		rcu_read_unlock();
9640 
9641 		/*
9642 		 * If there are no spares, and raid456 lazy initial recover is
9643 		 * requested.
9644 		 */
9645 		if (test_bit(MD_RECOVERY_LAZY_RECOVER, &mddev->recovery) &&
9646 		    start == MaxSector && mddev_select_lazy_recover_rdev(mddev))
9647 			start = 0;
9648 
9649 		/* If there is a bitmap, we need to make sure all
9650 		 * writes that started before we added a spare
9651 		 * complete before we start doing a recovery.
9652 		 * Otherwise the write might complete and (via
9653 		 * bitmap_endwrite) set a bit in the bitmap after the
9654 		 * recovery has checked that bit and skipped that
9655 		 * region.
9656 		 */
9657 		if (mddev->bitmap) {
9658 			mddev->pers->quiesce(mddev, 1);
9659 			mddev->pers->quiesce(mddev, 0);
9660 		}
9661 		return start;
9662 	default:
9663 		return MaxSector;
9664 	}
9665 }
9666 
sync_io_within_limit(struct mddev * mddev)9667 static bool sync_io_within_limit(struct mddev *mddev)
9668 {
9669 	/*
9670 	 * For raid456, sync IO is stripe(4k) per IO, for other levels, it's
9671 	 * RESYNC_PAGES(64k) per IO.
9672 	 */
9673 	return atomic_read(&mddev->recovery_active) <
9674 	       (raid_is_456(mddev) ? 8 : 128) * sync_io_depth(mddev);
9675 }
9676 
9677 /*
9678  * Update sync offset and mddev status when sync completes
9679  */
md_finish_sync(struct mddev * mddev,enum sync_action action)9680 static void md_finish_sync(struct mddev *mddev, enum sync_action action)
9681 {
9682 	struct md_rdev *rdev;
9683 
9684 	switch (action) {
9685 	case ACTION_RESYNC:
9686 	case ACTION_REPAIR:
9687 		if (!test_bit(MD_RECOVERY_INTR, &mddev->recovery))
9688 			mddev->curr_resync = MaxSector;
9689 		mddev->resync_offset = mddev->curr_resync;
9690 		break;
9691 	case ACTION_RECOVER:
9692 		if (!test_bit(MD_RECOVERY_INTR, &mddev->recovery))
9693 			mddev->curr_resync = MaxSector;
9694 		rcu_read_lock();
9695 		rdev_for_each_rcu(rdev, mddev)
9696 			if (mddev->delta_disks >= 0 &&
9697 			    rdev_needs_recovery(rdev, mddev->curr_resync))
9698 				rdev->recovery_offset = mddev->curr_resync;
9699 		rcu_read_unlock();
9700 		break;
9701 	case ACTION_RESHAPE:
9702 		if (!test_bit(MD_RECOVERY_INTR, &mddev->recovery) &&
9703 		    mddev->delta_disks > 0 &&
9704 		    mddev->pers->finish_reshape &&
9705 		    mddev->pers->size &&
9706 		    !mddev_is_dm(mddev)) {
9707 			mddev_lock_nointr(mddev);
9708 			md_set_array_sectors(mddev, mddev->pers->size(mddev, 0, 0));
9709 			mddev_unlock(mddev);
9710 			if (!mddev_is_clustered(mddev))
9711 				set_capacity_and_notify(mddev->gendisk,
9712 							mddev->array_sectors);
9713 		}
9714 		if (mddev->pers->finish_reshape)
9715 			mddev->pers->finish_reshape(mddev);
9716 		break;
9717 	/* */
9718 	case ACTION_CHECK:
9719 	default:
9720 		break;
9721 	}
9722 }
9723 
9724 #define SYNC_MARKS	10
9725 #define	SYNC_MARK_STEP	(3*HZ)
9726 #define UPDATE_FREQUENCY (5*60*HZ)
md_do_sync(struct md_thread * thread)9727 void md_do_sync(struct md_thread *thread)
9728 {
9729 	struct mddev *mddev = thread->mddev;
9730 	struct mddev *mddev2;
9731 	unsigned int currspeed = 0, window;
9732 	sector_t max_sectors,j, io_sectors, recovery_done;
9733 	unsigned long mark[SYNC_MARKS];
9734 	unsigned long update_time;
9735 	sector_t mark_cnt[SYNC_MARKS];
9736 	int last_mark,m;
9737 	sector_t last_check;
9738 	int skipped = 0;
9739 	enum sync_action action;
9740 	const char *desc;
9741 	struct blk_plug plug;
9742 	int ret;
9743 
9744 	/* just incase thread restarts... */
9745 	if (test_bit(MD_RECOVERY_DONE, &mddev->recovery))
9746 		return;
9747 
9748 	if (test_bit(MD_RECOVERY_INTR, &mddev->recovery))
9749 		goto skip;
9750 
9751 	if (test_bit(MD_RECOVERY_WAIT, &mddev->recovery) ||
9752 	    !md_is_rdwr(mddev)) {/* never try to sync a read-only array */
9753 		set_bit(MD_RECOVERY_INTR, &mddev->recovery);
9754 		goto skip;
9755 	}
9756 
9757 	if (mddev_is_clustered(mddev)) {
9758 		ret = mddev->cluster_ops->resync_start(mddev);
9759 		if (ret)
9760 			goto skip;
9761 
9762 		set_bit(MD_CLUSTER_RESYNC_LOCKED, &mddev->flags);
9763 		if (!(test_bit(MD_RECOVERY_SYNC, &mddev->recovery) ||
9764 			test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery) ||
9765 			test_bit(MD_RECOVERY_RECOVER, &mddev->recovery))
9766 		     && ((unsigned long long)mddev->curr_resync_completed
9767 			 < (unsigned long long)mddev->resync_max_sectors))
9768 			goto skip;
9769 	}
9770 
9771 	action = md_sync_action(mddev);
9772 	if (action == ACTION_FROZEN || action == ACTION_IDLE) {
9773 		set_bit(MD_RECOVERY_INTR, &mddev->recovery);
9774 		goto skip;
9775 	}
9776 
9777 	desc = md_sync_action_name(action);
9778 	mddev->last_sync_action = action;
9779 
9780 	/*
9781 	 * Before starting a resync we must have set curr_resync to
9782 	 * 2, and then checked that every "conflicting" array has curr_resync
9783 	 * less than ours.  When we find one that is the same or higher
9784 	 * we wait on resync_wait.  To avoid deadlock, we reduce curr_resync
9785 	 * to 1 if we choose to yield (based arbitrarily on address of mddev structure).
9786 	 * This will mean we have to start checking from the beginning again.
9787 	 *
9788 	 */
9789 	if (mddev_is_clustered(mddev))
9790 		mddev->cluster_ops->resync_start_notify(mddev);
9791 	do {
9792 		int mddev2_minor = -1;
9793 		mddev->curr_resync = MD_RESYNC_DELAYED;
9794 
9795 	try_again:
9796 		if (test_bit(MD_RECOVERY_INTR, &mddev->recovery))
9797 			goto skip;
9798 		spin_lock(&all_mddevs_lock);
9799 		list_for_each_entry(mddev2, &all_mddevs, all_mddevs) {
9800 			if (test_bit(MD_DELETED, &mddev2->flags))
9801 				continue;
9802 			if (mddev2 == mddev)
9803 				continue;
9804 			if (!mddev->parallel_resync
9805 			&&  mddev2->curr_resync
9806 			&&  match_mddev_units(mddev, mddev2)) {
9807 				DEFINE_WAIT(wq);
9808 				if (mddev < mddev2 &&
9809 				    mddev->curr_resync == MD_RESYNC_DELAYED) {
9810 					/* arbitrarily yield */
9811 					mddev->curr_resync = MD_RESYNC_YIELDED;
9812 					wake_up(&resync_wait);
9813 				}
9814 				if (mddev > mddev2 &&
9815 				    mddev->curr_resync == MD_RESYNC_YIELDED)
9816 					/* no need to wait here, we can wait the next
9817 					 * time 'round when curr_resync == 2
9818 					 */
9819 					continue;
9820 				/* We need to wait 'interruptible' so as not to
9821 				 * contribute to the load average, and not to
9822 				 * be caught by 'softlockup'
9823 				 */
9824 				prepare_to_wait(&resync_wait, &wq, TASK_INTERRUPTIBLE);
9825 				if (!test_bit(MD_RECOVERY_INTR, &mddev->recovery) &&
9826 				    mddev2->curr_resync >= mddev->curr_resync) {
9827 					if (mddev2_minor != mddev2->md_minor) {
9828 						mddev2_minor = mddev2->md_minor;
9829 						pr_info("md: delaying %s of %s until %s has finished (they share one or more physical units)\n",
9830 							desc, mdname(mddev),
9831 							mdname(mddev2));
9832 					}
9833 					spin_unlock(&all_mddevs_lock);
9834 
9835 					if (signal_pending(current))
9836 						flush_signals(current);
9837 					schedule();
9838 					finish_wait(&resync_wait, &wq);
9839 					goto try_again;
9840 				}
9841 				finish_wait(&resync_wait, &wq);
9842 			}
9843 		}
9844 		spin_unlock(&all_mddevs_lock);
9845 	} while (mddev->curr_resync < MD_RESYNC_DELAYED);
9846 
9847 	max_sectors = md_sync_max_sectors(mddev, action);
9848 	j = md_sync_position(mddev, action);
9849 
9850 	pr_info("md: %s of RAID array %s\n", desc, mdname(mddev));
9851 	pr_debug("md: minimum _guaranteed_  speed: %d KB/sec/disk.\n", speed_min(mddev));
9852 	pr_debug("md: using maximum available idle IO bandwidth (but not more than %d KB/sec) for %s.\n",
9853 		 speed_max(mddev), desc);
9854 
9855 	is_mddev_idle(mddev, 1); /* this initializes IO event counters */
9856 
9857 	io_sectors = 0;
9858 	for (m = 0; m < SYNC_MARKS; m++) {
9859 		mark[m] = jiffies;
9860 		mark_cnt[m] = io_sectors;
9861 	}
9862 	last_mark = 0;
9863 	mddev->resync_mark = mark[last_mark];
9864 	mddev->resync_mark_cnt = mark_cnt[last_mark];
9865 
9866 	/*
9867 	 * Tune reconstruction:
9868 	 */
9869 	window = 32 * (PAGE_SIZE / 512);
9870 	pr_debug("md: using %dk window, over a total of %lluk.\n",
9871 		 window/2, (unsigned long long)max_sectors/2);
9872 
9873 	atomic_set(&mddev->recovery_active, 0);
9874 	last_check = 0;
9875 
9876 	if (j >= MD_RESYNC_ACTIVE) {
9877 		pr_debug("md: resuming %s of %s from checkpoint.\n",
9878 			 desc, mdname(mddev));
9879 		mddev->curr_resync = j;
9880 	} else
9881 		mddev->curr_resync = MD_RESYNC_ACTIVE; /* no longer delayed */
9882 	mddev->curr_resync_completed = j;
9883 	sysfs_notify_dirent_safe(mddev->sysfs_completed);
9884 	md_new_event();
9885 	update_time = jiffies;
9886 
9887 	blk_start_plug(&plug);
9888 	while (j < max_sectors) {
9889 		sector_t sectors;
9890 
9891 		skipped = 0;
9892 
9893 		if (!test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery) &&
9894 		    ((mddev->curr_resync > mddev->curr_resync_completed &&
9895 		      (mddev->curr_resync - mddev->curr_resync_completed)
9896 		      > (max_sectors >> 4)) ||
9897 		     time_after_eq(jiffies, update_time + UPDATE_FREQUENCY) ||
9898 		     (j - mddev->curr_resync_completed)*2
9899 		     >= mddev->resync_max - mddev->curr_resync_completed ||
9900 		     mddev->curr_resync_completed > mddev->resync_max
9901 			    )) {
9902 			/* time to update curr_resync_completed */
9903 			wait_event(mddev->recovery_wait,
9904 				   atomic_read(&mddev->recovery_active) == 0);
9905 			mddev->curr_resync_completed = j;
9906 			if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery) &&
9907 			    j > mddev->resync_offset)
9908 				mddev->resync_offset = j;
9909 			update_time = jiffies;
9910 			set_bit(MD_SB_CHANGE_CLEAN, &mddev->sb_flags);
9911 			sysfs_notify_dirent_safe(mddev->sysfs_completed);
9912 		}
9913 
9914 		while (j >= mddev->resync_max &&
9915 		       !test_bit(MD_RECOVERY_INTR, &mddev->recovery)) {
9916 			/* As this condition is controlled by user-space,
9917 			 * we can block indefinitely, so use '_interruptible'
9918 			 * to avoid triggering warnings.
9919 			 */
9920 			flush_signals(current); /* just in case */
9921 			wait_event_interruptible(mddev->recovery_wait,
9922 						 mddev->resync_max > j
9923 						 || test_bit(MD_RECOVERY_INTR,
9924 							     &mddev->recovery));
9925 		}
9926 
9927 		if (test_bit(MD_RECOVERY_INTR, &mddev->recovery))
9928 			break;
9929 
9930 		if (mddev->bitmap_ops && mddev->bitmap_ops->skip_sync_blocks) {
9931 			sectors = mddev->bitmap_ops->skip_sync_blocks(mddev, j);
9932 			if (sectors)
9933 				goto update;
9934 		}
9935 
9936 		sectors = mddev->pers->sync_request(mddev, j, max_sectors,
9937 						    &skipped);
9938 		if (sectors == 0) {
9939 			set_bit(MD_RECOVERY_INTR, &mddev->recovery);
9940 			break;
9941 		}
9942 
9943 		if (!skipped) { /* actual IO requested */
9944 			io_sectors += sectors;
9945 			atomic_add(sectors, &mddev->recovery_active);
9946 		}
9947 
9948 		if (test_bit(MD_RECOVERY_INTR, &mddev->recovery))
9949 			break;
9950 
9951 update:
9952 		j += sectors;
9953 		if (j > max_sectors)
9954 			/* when skipping, extra large numbers can be returned. */
9955 			j = max_sectors;
9956 		if (j >= MD_RESYNC_ACTIVE)
9957 			mddev->curr_resync = j;
9958 		mddev->curr_mark_cnt = io_sectors;
9959 		if (last_check == 0)
9960 			/* this is the earliest that rebuild will be
9961 			 * visible in /proc/mdstat
9962 			 */
9963 			md_new_event();
9964 
9965 		if (last_check + window > io_sectors || j == max_sectors) {
9966 			cond_resched();
9967 			continue;
9968 		}
9969 
9970 		last_check = io_sectors;
9971 	repeat:
9972 		if (time_after_eq(jiffies, mark[last_mark] + SYNC_MARK_STEP )) {
9973 			/* step marks */
9974 			int next = (last_mark+1) % SYNC_MARKS;
9975 
9976 			mddev->resync_mark = mark[next];
9977 			mddev->resync_mark_cnt = mark_cnt[next];
9978 			mark[next] = jiffies;
9979 			mark_cnt[next] = io_sectors - atomic_read(&mddev->recovery_active);
9980 			last_mark = next;
9981 		}
9982 
9983 		if (test_bit(MD_RECOVERY_INTR, &mddev->recovery))
9984 			break;
9985 
9986 		/*
9987 		 * this loop exits only if either when we are slower than
9988 		 * the 'hard' speed limit, or the system was IO-idle for
9989 		 * a jiffy.
9990 		 * the system might be non-idle CPU-wise, but we only care
9991 		 * about not overloading the IO subsystem. (things like an
9992 		 * e2fsck being done on the RAID array should execute fast)
9993 		 */
9994 		cond_resched();
9995 
9996 		recovery_done = io_sectors - atomic_read(&mddev->recovery_active);
9997 		currspeed = ((unsigned long)(recovery_done - mddev->resync_mark_cnt))/2
9998 			/((jiffies-mddev->resync_mark)/HZ +1) +1;
9999 
10000 		if (currspeed > speed_min(mddev)) {
10001 			if (currspeed > speed_max(mddev)) {
10002 				msleep(500);
10003 				goto repeat;
10004 			}
10005 			if (!sync_io_within_limit(mddev) &&
10006 			    !is_mddev_idle(mddev, 0)) {
10007 				/*
10008 				 * Give other IO more of a chance.
10009 				 * The faster the devices, the less we wait.
10010 				 */
10011 				wait_event(mddev->recovery_wait,
10012 					   !atomic_read(&mddev->recovery_active));
10013 			}
10014 		}
10015 	}
10016 	pr_info("md: %s: %s %s.\n",mdname(mddev), desc,
10017 		test_bit(MD_RECOVERY_INTR, &mddev->recovery)
10018 		? "interrupted" : "done");
10019 	/*
10020 	 * this also signals 'finished resyncing' to md_stop
10021 	 */
10022 	blk_finish_plug(&plug);
10023 	wait_event(mddev->recovery_wait, !atomic_read(&mddev->recovery_active));
10024 
10025 	if (!test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery) &&
10026 	    mddev->curr_resync >= MD_RESYNC_ACTIVE) {
10027 		/* All sync IO completes after recovery_active becomes 0 */
10028 		mddev->curr_resync_completed = mddev->curr_resync;
10029 		sysfs_notify_dirent_safe(mddev->sysfs_completed);
10030 	}
10031 	mddev->pers->sync_request(mddev, max_sectors, max_sectors, &skipped);
10032 
10033 	if (mddev->curr_resync > MD_RESYNC_ACTIVE)
10034 		md_finish_sync(mddev, action);
10035  skip:
10036 	/* set CHANGE_PENDING here since maybe another update is needed,
10037 	 * so other nodes are informed. It should be harmless for normal
10038 	 * raid */
10039 	set_mask_bits(&mddev->sb_flags, 0,
10040 		      BIT(MD_SB_CHANGE_PENDING) | BIT(MD_SB_CHANGE_DEVS));
10041 	spin_lock(&mddev->lock);
10042 	if (!test_bit(MD_RECOVERY_INTR, &mddev->recovery)) {
10043 		/* We completed so min/max setting can be forgotten if used. */
10044 		if (test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery))
10045 			mddev->resync_min = 0;
10046 		mddev->resync_max = MaxSector;
10047 	} else if (test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery))
10048 		mddev->resync_min = mddev->curr_resync_completed;
10049 	set_bit(MD_RECOVERY_DONE, &mddev->recovery);
10050 	mddev->curr_resync = MD_RESYNC_NONE;
10051 	spin_unlock(&mddev->lock);
10052 
10053 	wake_up(&resync_wait);
10054 	md_wakeup_thread(mddev->thread);
10055 	return;
10056 }
10057 EXPORT_SYMBOL_GPL(md_do_sync);
10058 
rdev_removeable(struct md_rdev * rdev)10059 static bool rdev_removeable(struct md_rdev *rdev)
10060 {
10061 	/* rdev is not used. */
10062 	if (rdev->raid_disk < 0)
10063 		return false;
10064 
10065 	/* There are still inflight io, don't remove this rdev. */
10066 	if (atomic_read(&rdev->nr_pending))
10067 		return false;
10068 
10069 	/*
10070 	 * An error occurred but has not yet been acknowledged by the metadata
10071 	 * handler, don't remove this rdev.
10072 	 */
10073 	if (test_bit(Blocked, &rdev->flags))
10074 		return false;
10075 
10076 	/* Fautly rdev is not used, it's safe to remove it. */
10077 	if (test_bit(Faulty, &rdev->flags))
10078 		return true;
10079 
10080 	/* Journal disk can only be removed if it's faulty. */
10081 	if (test_bit(Journal, &rdev->flags))
10082 		return false;
10083 
10084 	/*
10085 	 * 'In_sync' is cleared while 'raid_disk' is valid, which means
10086 	 * replacement has just become active from pers->spare_active(), and
10087 	 * then pers->hot_remove_disk() will replace this rdev with replacement.
10088 	 */
10089 	if (!test_bit(In_sync, &rdev->flags))
10090 		return true;
10091 
10092 	return false;
10093 }
10094 
rdev_is_spare(struct md_rdev * rdev)10095 static bool rdev_is_spare(struct md_rdev *rdev)
10096 {
10097 	return !test_bit(Candidate, &rdev->flags) && rdev->raid_disk >= 0 &&
10098 	       !test_bit(In_sync, &rdev->flags) &&
10099 	       !test_bit(Journal, &rdev->flags) &&
10100 	       !test_bit(Faulty, &rdev->flags);
10101 }
10102 
rdev_addable(struct md_rdev * rdev)10103 static bool rdev_addable(struct md_rdev *rdev)
10104 {
10105 	struct mddev *mddev;
10106 
10107 	mddev = READ_ONCE(rdev->mddev);
10108 	if (!mddev)
10109 		return false;
10110 
10111 	/* rdev is already used, don't add it again. */
10112 	if (test_bit(Candidate, &rdev->flags) || rdev->raid_disk >= 0 ||
10113 	    test_bit(Faulty, &rdev->flags))
10114 		return false;
10115 
10116 	/* Allow to add journal disk. */
10117 	if (test_bit(Journal, &rdev->flags))
10118 		return true;
10119 
10120 	/* Allow to add if array is read-write. */
10121 	if (md_is_rdwr(mddev))
10122 		return true;
10123 
10124 	/*
10125 	 * For read-only array, only allow to readd a rdev. And if bitmap is
10126 	 * used, don't allow to readd a rdev that is too old.
10127 	 */
10128 	if (rdev->saved_raid_disk >= 0 && !test_bit(Bitmap_sync, &rdev->flags))
10129 		return true;
10130 
10131 	return false;
10132 }
10133 
md_spares_need_change(struct mddev * mddev)10134 static bool md_spares_need_change(struct mddev *mddev)
10135 {
10136 	struct md_rdev *rdev;
10137 
10138 	rcu_read_lock();
10139 	rdev_for_each_rcu(rdev, mddev) {
10140 		if (rdev_removeable(rdev) || rdev_addable(rdev)) {
10141 			rcu_read_unlock();
10142 			return true;
10143 		}
10144 	}
10145 	rcu_read_unlock();
10146 	return false;
10147 }
10148 
remove_spares(struct mddev * mddev,struct md_rdev * this)10149 static int remove_spares(struct mddev *mddev, struct md_rdev *this)
10150 {
10151 	struct md_rdev *rdev;
10152 	int removed = 0;
10153 
10154 	rdev_for_each(rdev, mddev) {
10155 		if ((this == NULL || rdev == this) && rdev_removeable(rdev) &&
10156 		    !mddev->pers->hot_remove_disk(mddev, rdev)) {
10157 			sysfs_unlink_rdev(mddev, rdev);
10158 			rdev->saved_raid_disk = rdev->raid_disk;
10159 			rdev->raid_disk = -1;
10160 			removed++;
10161 		}
10162 	}
10163 
10164 	if (removed && mddev->kobj.sd)
10165 		sysfs_notify_dirent_safe(mddev->sysfs_degraded);
10166 
10167 	return removed;
10168 }
10169 
remove_and_add_spares(struct mddev * mddev,struct md_rdev * this)10170 static int remove_and_add_spares(struct mddev *mddev,
10171 				 struct md_rdev *this)
10172 {
10173 	struct md_rdev *rdev;
10174 	int spares = 0;
10175 	int removed = 0;
10176 
10177 	if (this && test_bit(MD_RECOVERY_RUNNING, &mddev->recovery))
10178 		/* Mustn't remove devices when resync thread is running */
10179 		return 0;
10180 
10181 	removed = remove_spares(mddev, this);
10182 	if (this && removed)
10183 		goto no_add;
10184 
10185 	rdev_for_each(rdev, mddev) {
10186 		if (this && this != rdev)
10187 			continue;
10188 		if (rdev_is_spare(rdev))
10189 			spares++;
10190 		if (!rdev_addable(rdev))
10191 			continue;
10192 		if (!test_bit(Journal, &rdev->flags))
10193 			rdev->recovery_offset = 0;
10194 		if (mddev->pers->hot_add_disk(mddev, rdev) == 0) {
10195 			/* failure here is OK */
10196 			sysfs_link_rdev(mddev, rdev);
10197 			if (!test_bit(Journal, &rdev->flags))
10198 				spares++;
10199 			md_new_event();
10200 			set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags);
10201 		}
10202 	}
10203 no_add:
10204 	if (removed)
10205 		set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags);
10206 	return spares;
10207 }
10208 
md_choose_sync_action(struct mddev * mddev,int * spares)10209 static bool md_choose_sync_action(struct mddev *mddev, int *spares)
10210 {
10211 	/* Check if reshape is in progress first. */
10212 	if (mddev->reshape_position != MaxSector) {
10213 		if (mddev->pers->check_reshape == NULL ||
10214 		    mddev->pers->check_reshape(mddev) != 0)
10215 			return false;
10216 
10217 		set_bit(MD_RECOVERY_RESHAPE, &mddev->recovery);
10218 		clear_bit(MD_RECOVERY_RECOVER, &mddev->recovery);
10219 		clear_bit(MD_RECOVERY_LAZY_RECOVER, &mddev->recovery);
10220 		return true;
10221 	}
10222 
10223 	/* Check if resync is in progress. */
10224 	if (mddev->resync_offset < MaxSector) {
10225 		remove_spares(mddev, NULL);
10226 		set_bit(MD_RECOVERY_SYNC, &mddev->recovery);
10227 		clear_bit(MD_RECOVERY_RECOVER, &mddev->recovery);
10228 		clear_bit(MD_RECOVERY_LAZY_RECOVER, &mddev->recovery);
10229 		return true;
10230 	}
10231 
10232 	/*
10233 	 * Remove any failed drives, then add spares if possible. Spares are
10234 	 * also removed and re-added, to allow the personality to fail the
10235 	 * re-add.
10236 	 */
10237 	*spares = remove_and_add_spares(mddev, NULL);
10238 	if (*spares || test_bit(MD_RECOVERY_LAZY_RECOVER, &mddev->recovery)) {
10239 		clear_bit(MD_RECOVERY_SYNC, &mddev->recovery);
10240 		clear_bit(MD_RECOVERY_CHECK, &mddev->recovery);
10241 		clear_bit(MD_RECOVERY_REQUESTED, &mddev->recovery);
10242 
10243 		/* Start new recovery. */
10244 		set_bit(MD_RECOVERY_RECOVER, &mddev->recovery);
10245 		return true;
10246 	}
10247 
10248 	/* Delay to choose resync/check/repair in md_do_sync(). */
10249 	if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery))
10250 		return true;
10251 
10252 	/* Nothing to be done */
10253 	return false;
10254 }
10255 
md_start_sync(struct work_struct * ws)10256 static void md_start_sync(struct work_struct *ws)
10257 {
10258 	struct mddev *mddev = container_of(ws, struct mddev, sync_work);
10259 	int spares = 0;
10260 	bool suspend = false;
10261 	unsigned int noio_flags = 0;
10262 	char *name;
10263 
10264 	/*
10265 	 * If reshape is still in progress, spares won't be added or removed
10266 	 * from conf until reshape is done.
10267 	 */
10268 	if ((mddev->reshape_position == MaxSector || !md_is_rdwr(mddev)) &&
10269 	    md_spares_need_change(mddev)) {
10270 		suspend = true;
10271 		mddev_suspend(mddev, false);
10272 		noio_flags = memalloc_noio_save();
10273 	}
10274 
10275 	mddev_lock_nointr(mddev);
10276 
10277 	/*
10278 	 * The spare configuration can change before reconfig_mutex is acquired.
10279 	 * Recheck while holding the lock and suspend if needed.
10280 	 */
10281 	if (!suspend && (mddev->reshape_position == MaxSector || !md_is_rdwr(mddev)) &&
10282 	    md_spares_need_change(mddev)) {
10283 		mddev_unlock(mddev);
10284 		mddev_suspend_and_lock_nointr(mddev);
10285 		suspend = true;
10286 		noio_flags = memalloc_noio_save();
10287 	}
10288 
10289 	if (!md_is_rdwr(mddev)) {
10290 		/*
10291 		 * On a read-only array we can:
10292 		 * - remove failed devices
10293 		 * - add already-in_sync devices if the array itself is in-sync.
10294 		 * As we only add devices that are already in-sync, we can
10295 		 * activate the spares immediately.
10296 		 */
10297 		remove_and_add_spares(mddev, NULL);
10298 		goto not_running;
10299 	}
10300 
10301 	if (!md_choose_sync_action(mddev, &spares))
10302 		goto not_running;
10303 
10304 	if (!mddev->pers->sync_request)
10305 		goto not_running;
10306 
10307 	/*
10308 	 * We are adding a device or devices to an array which has the bitmap
10309 	 * stored on all devices. So make sure all bitmap pages get written.
10310 	 */
10311 	if (spares && md_bitmap_enabled(mddev, true))
10312 		mddev->bitmap_ops->write_all(mddev);
10313 
10314 	name = test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery) ?
10315 			"reshape" : "resync";
10316 	rcu_assign_pointer(mddev->sync_thread,
10317 			   md_register_thread(md_do_sync, mddev, name));
10318 	if (!mddev->sync_thread) {
10319 		pr_warn("%s: could not start resync thread...\n",
10320 			mdname(mddev));
10321 		/* leave the spares where they are, it shouldn't hurt */
10322 		goto not_running;
10323 	}
10324 
10325 	mddev_unlock(mddev);
10326 	/*
10327 	 * md_start_sync was triggered by MD_RECOVERY_NEEDED, so we should
10328 	 * not set it again. Otherwise, we may cause issue like this one:
10329 	 *     https://bugzilla.kernel.org/show_bug.cgi?id=218200
10330 	 * Therefore, use __mddev_resume(mddev, false).
10331 	 */
10332 	if (suspend) {
10333 		memalloc_noio_restore(noio_flags);
10334 		__mddev_resume(mddev, false);
10335 	}
10336 	md_wakeup_thread(mddev->sync_thread);
10337 	sysfs_notify_dirent_safe(mddev->sysfs_action);
10338 	md_new_event();
10339 	return;
10340 
10341 not_running:
10342 	clear_bit(MD_RECOVERY_SYNC, &mddev->recovery);
10343 	clear_bit(MD_RECOVERY_RESHAPE, &mddev->recovery);
10344 	clear_bit(MD_RECOVERY_REQUESTED, &mddev->recovery);
10345 	clear_bit(MD_RECOVERY_CHECK, &mddev->recovery);
10346 	clear_bit(MD_RECOVERY_RUNNING, &mddev->recovery);
10347 	mddev_unlock(mddev);
10348 	/*
10349 	 * md_start_sync was triggered by MD_RECOVERY_NEEDED, so we should
10350 	 * not set it again. Otherwise, we may cause issue like this one:
10351 	 *     https://bugzilla.kernel.org/show_bug.cgi?id=218200
10352 	 * Therefore, use __mddev_resume(mddev, false).
10353 	 */
10354 	if (suspend) {
10355 		memalloc_noio_restore(noio_flags);
10356 		__mddev_resume(mddev, false);
10357 	}
10358 
10359 	wake_up(&resync_wait);
10360 	if (test_and_clear_bit(MD_RECOVERY_RECOVER, &mddev->recovery) &&
10361 	    mddev->sysfs_action)
10362 		sysfs_notify_dirent_safe(mddev->sysfs_action);
10363 }
10364 
unregister_sync_thread(struct mddev * mddev)10365 static void unregister_sync_thread(struct mddev *mddev)
10366 {
10367 	if (!test_bit(MD_RECOVERY_DONE, &mddev->recovery)) {
10368 		/* resync/recovery still happening */
10369 		clear_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
10370 		return;
10371 	}
10372 
10373 	if (WARN_ON_ONCE(!mddev->sync_thread))
10374 		return;
10375 
10376 	md_reap_sync_thread(mddev);
10377 }
10378 
md_should_do_recovery(struct mddev * mddev)10379 static bool md_should_do_recovery(struct mddev *mddev)
10380 {
10381 	/*
10382 	 * As long as one of the following flags is set,
10383 	 * recovery needs to do or cleanup.
10384 	 */
10385 	if (test_bit(MD_RECOVERY_NEEDED, &mddev->recovery) ||
10386 	    test_bit(MD_RECOVERY_DONE, &mddev->recovery))
10387 		return true;
10388 
10389 	/*
10390 	 * If no flags are set and it is in read-only status,
10391 	 * there is nothing to do.
10392 	 */
10393 	if (!md_is_rdwr(mddev))
10394 		return false;
10395 
10396 	/*
10397 	 * MD_SB_CHANGE_PENDING indicates that the array is switching from clean to
10398 	 * active, and no action is needed for now.
10399 	 * All other MD_SB_* flags require to update the superblock.
10400 	 */
10401 	if (mddev->sb_flags & ~ (1<<MD_SB_CHANGE_PENDING))
10402 		return true;
10403 
10404 	/*
10405 	 * If the array is not using external metadata and there has been no data
10406 	 * written for some time, then the array's status needs to be set to
10407 	 * in_sync.
10408 	 */
10409 	if (mddev->external == 0 && mddev->safemode == 1)
10410 		return true;
10411 
10412 	/*
10413 	 * When the system is about to restart or the process receives an signal,
10414 	 * the array needs to be synchronized as soon as possible.
10415 	 * Once the data synchronization is completed, need to change the array
10416 	 * status to in_sync.
10417 	 */
10418 	if (mddev->safemode == 2 && !mddev->in_sync &&
10419 	    mddev->resync_offset == MaxSector)
10420 		return true;
10421 
10422 	return false;
10423 }
10424 
10425 /*
10426  * This routine is regularly called by all per-raid-array threads to
10427  * deal with generic issues like resync and super-block update.
10428  * Raid personalities that don't have a thread (linear/raid0) do not
10429  * need this as they never do any recovery or update the superblock.
10430  *
10431  * It does not do any resync itself, but rather "forks" off other threads
10432  * to do that as needed.
10433  * When it is determined that resync is needed, we set MD_RECOVERY_RUNNING in
10434  * "->recovery" and create a thread at ->sync_thread.
10435  * When the thread finishes it sets MD_RECOVERY_DONE
10436  * and wakeups up this thread which will reap the thread and finish up.
10437  * This thread also removes any faulty devices (with nr_pending == 0).
10438  *
10439  * The overall approach is:
10440  *  1/ if the superblock needs updating, update it.
10441  *  2/ If a recovery thread is running, don't do anything else.
10442  *  3/ If recovery has finished, clean up, possibly marking spares active.
10443  *  4/ If there are any faulty devices, remove them.
10444  *  5/ If array is degraded, try to add spares devices
10445  *  6/ If array has spares or is not in-sync, start a resync thread.
10446  */
md_check_recovery(struct mddev * mddev)10447 void md_check_recovery(struct mddev *mddev)
10448 {
10449 	if (md_bitmap_enabled(mddev, false) && mddev->bitmap_ops->daemon_work)
10450 		mddev->bitmap_ops->daemon_work(mddev);
10451 
10452 	if (signal_pending(current)) {
10453 		if (mddev->pers->sync_request && !mddev->external) {
10454 			pr_debug("md: %s in immediate safe mode\n",
10455 				 mdname(mddev));
10456 			mddev->safemode = 2;
10457 		}
10458 		flush_signals(current);
10459 	}
10460 
10461 	if (!md_should_do_recovery(mddev))
10462 		return;
10463 
10464 	if (mddev_trylock(mddev)) {
10465 		bool try_set_sync = mddev->safemode != 0;
10466 
10467 		if (!mddev->external && mddev->safemode == 1)
10468 			mddev->safemode = 0;
10469 
10470 		if (!md_is_rdwr(mddev)) {
10471 			struct md_rdev *rdev;
10472 
10473 			if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery)) {
10474 				unregister_sync_thread(mddev);
10475 				goto unlock;
10476 			}
10477 
10478 			if (!mddev->external && mddev->in_sync)
10479 				/*
10480 				 * 'Blocked' flag not needed as failed devices
10481 				 * will be recorded if array switched to read/write.
10482 				 * Leaving it set will prevent the device
10483 				 * from being removed.
10484 				 */
10485 				rdev_for_each(rdev, mddev)
10486 					clear_bit(Blocked, &rdev->flags);
10487 
10488 			/*
10489 			 * There is no thread, but we need to call
10490 			 * ->spare_active and clear saved_raid_disk
10491 			 */
10492 			set_bit(MD_RECOVERY_INTR, &mddev->recovery);
10493 			md_reap_sync_thread(mddev);
10494 
10495 			/*
10496 			 * Let md_start_sync() to remove and add rdevs to the
10497 			 * array.
10498 			 */
10499 			if (md_spares_need_change(mddev)) {
10500 				set_bit(MD_RECOVERY_RUNNING, &mddev->recovery);
10501 				queue_work(md_misc_wq, &mddev->sync_work);
10502 			}
10503 
10504 			clear_bit(MD_RECOVERY_RECOVER, &mddev->recovery);
10505 			clear_bit(MD_RECOVERY_LAZY_RECOVER, &mddev->recovery);
10506 			clear_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
10507 			clear_bit(MD_SB_CHANGE_PENDING, &mddev->sb_flags);
10508 
10509 			goto unlock;
10510 		}
10511 
10512 		if (mddev_is_clustered(mddev)) {
10513 			struct md_rdev *rdev, *tmp;
10514 			/* kick the device if another node issued a
10515 			 * remove disk.
10516 			 */
10517 			rdev_for_each_safe(rdev, tmp, mddev) {
10518 				if (rdev->raid_disk < 0 &&
10519 				    test_and_clear_bit(ClusterRemove, &rdev->flags))
10520 					md_kick_rdev_from_array(rdev);
10521 			}
10522 		}
10523 
10524 		if (try_set_sync && !mddev->external && !mddev->in_sync) {
10525 			spin_lock(&mddev->lock);
10526 			set_in_sync(mddev);
10527 			spin_unlock(&mddev->lock);
10528 		}
10529 
10530 		if (mddev->sb_flags)
10531 			md_update_sb(mddev, 0);
10532 
10533 		/*
10534 		 * Never start a new sync thread if MD_RECOVERY_RUNNING is
10535 		 * still set.
10536 		 */
10537 		if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery)) {
10538 			unregister_sync_thread(mddev);
10539 			goto unlock;
10540 		}
10541 
10542 		/* Set RUNNING before clearing NEEDED to avoid
10543 		 * any transients in the value of "sync_action".
10544 		 */
10545 		mddev->curr_resync_completed = 0;
10546 		spin_lock(&mddev->lock);
10547 		set_bit(MD_RECOVERY_RUNNING, &mddev->recovery);
10548 		spin_unlock(&mddev->lock);
10549 		/* Clear some bits that don't mean anything, but
10550 		 * might be left set
10551 		 */
10552 		clear_bit(MD_RECOVERY_INTR, &mddev->recovery);
10553 		clear_bit(MD_RECOVERY_DONE, &mddev->recovery);
10554 
10555 		if (test_and_clear_bit(MD_RECOVERY_NEEDED, &mddev->recovery) &&
10556 		    !test_bit(MD_RECOVERY_FROZEN, &mddev->recovery)) {
10557 			queue_work(md_misc_wq, &mddev->sync_work);
10558 		} else {
10559 			clear_bit(MD_RECOVERY_RUNNING, &mddev->recovery);
10560 			wake_up(&resync_wait);
10561 		}
10562 
10563 	unlock:
10564 		wake_up(&mddev->sb_wait);
10565 		mddev_unlock(mddev);
10566 	}
10567 }
10568 EXPORT_SYMBOL(md_check_recovery);
10569 
md_reap_sync_thread(struct mddev * mddev)10570 void md_reap_sync_thread(struct mddev *mddev)
10571 {
10572 	struct md_rdev *rdev;
10573 	sector_t old_dev_sectors = mddev->dev_sectors;
10574 	bool is_reshaped = test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery);
10575 
10576 	/* resync has finished, collect result */
10577 	md_unregister_thread(mddev, &mddev->sync_thread);
10578 	atomic_inc(&mddev->sync_seq);
10579 
10580 	if (!test_bit(MD_RECOVERY_INTR, &mddev->recovery) &&
10581 	    !test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery) &&
10582 	    mddev->degraded != mddev->raid_disks) {
10583 		/* success...*/
10584 		/* activate any spares */
10585 		if (mddev->pers->spare_active(mddev)) {
10586 			sysfs_notify_dirent_safe(mddev->sysfs_degraded);
10587 			set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags);
10588 		}
10589 	}
10590 
10591 	/* If array is no-longer degraded, then any saved_raid_disk
10592 	 * information must be scrapped.
10593 	 */
10594 	if (!mddev->degraded)
10595 		rdev_for_each(rdev, mddev)
10596 			rdev->saved_raid_disk = -1;
10597 
10598 	md_update_sb(mddev, 1);
10599 	/* MD_SB_CHANGE_PENDING should be cleared by md_update_sb, so we can
10600 	 * call resync_finish here if MD_CLUSTER_RESYNC_LOCKED is set by
10601 	 * clustered raid */
10602 	if (test_and_clear_bit(MD_CLUSTER_RESYNC_LOCKED, &mddev->flags))
10603 		mddev->cluster_ops->resync_finish(mddev);
10604 	clear_bit(MD_RECOVERY_RUNNING, &mddev->recovery);
10605 	clear_bit(MD_RECOVERY_DONE, &mddev->recovery);
10606 	clear_bit(MD_RECOVERY_SYNC, &mddev->recovery);
10607 	clear_bit(MD_RECOVERY_RESHAPE, &mddev->recovery);
10608 	clear_bit(MD_RECOVERY_REQUESTED, &mddev->recovery);
10609 	clear_bit(MD_RECOVERY_CHECK, &mddev->recovery);
10610 	clear_bit(MD_RECOVERY_LAZY_RECOVER, &mddev->recovery);
10611 	/*
10612 	 * We call mddev->cluster_ops->update_size here because sync_size could
10613 	 * be changed by md_update_sb, and MD_RECOVERY_RESHAPE is cleared,
10614 	 * so it is time to update size across cluster.
10615 	 */
10616 	if (mddev_is_clustered(mddev) && is_reshaped &&
10617 	    mddev->pers->finish_reshape &&
10618 	    !test_bit(MD_CLOSING, &mddev->flags))
10619 		mddev->cluster_ops->update_size(mddev, old_dev_sectors);
10620 	/* flag recovery needed just to double check */
10621 	set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
10622 	sysfs_notify_dirent_safe(mddev->sysfs_completed);
10623 	sysfs_notify_dirent_safe(mddev->sysfs_action);
10624 	md_new_event();
10625 	if (mddev->event_work.func)
10626 		queue_work(md_misc_wq, &mddev->event_work);
10627 	wake_up(&resync_wait);
10628 }
10629 EXPORT_SYMBOL(md_reap_sync_thread);
10630 
md_wait_for_blocked_rdev(struct md_rdev * rdev,struct mddev * mddev)10631 void md_wait_for_blocked_rdev(struct md_rdev *rdev, struct mddev *mddev)
10632 {
10633 	sysfs_notify_dirent_safe(rdev->sysfs_state);
10634 	wait_event_timeout(rdev->blocked_wait, !rdev_blocked(rdev),
10635 			   msecs_to_jiffies(5000));
10636 	rdev_dec_pending(rdev, mddev);
10637 }
10638 EXPORT_SYMBOL(md_wait_for_blocked_rdev);
10639 
md_finish_reshape(struct mddev * mddev)10640 void md_finish_reshape(struct mddev *mddev)
10641 {
10642 	/* called be personality module when reshape completes. */
10643 	struct md_rdev *rdev;
10644 
10645 	rdev_for_each(rdev, mddev) {
10646 		if (rdev->data_offset > rdev->new_data_offset)
10647 			rdev->sectors += rdev->data_offset - rdev->new_data_offset;
10648 		else
10649 			rdev->sectors -= rdev->new_data_offset - rdev->data_offset;
10650 		rdev->data_offset = rdev->new_data_offset;
10651 	}
10652 }
10653 EXPORT_SYMBOL(md_finish_reshape);
10654 
10655 /* Bad block management */
10656 
10657 /* Returns true on success, false on failure */
rdev_set_badblocks(struct md_rdev * rdev,sector_t s,sector_t sectors,int is_new)10658 bool rdev_set_badblocks(struct md_rdev *rdev, sector_t s, sector_t sectors,
10659 			int is_new)
10660 {
10661 	struct mddev *mddev = rdev->mddev;
10662 
10663 	/*
10664 	 * Recording new badblocks for faulty rdev will force unnecessary
10665 	 * super block updating. This is fragile for external management because
10666 	 * userspace daemon may trying to remove this device and deadlock may
10667 	 * occur. This will be probably solved in the mdadm, but it is safer to
10668 	 * avoid it.
10669 	 */
10670 	if (test_bit(Faulty, &rdev->flags))
10671 		return true;
10672 
10673 	if (is_new)
10674 		s += rdev->new_data_offset;
10675 	else
10676 		s += rdev->data_offset;
10677 
10678 	if (!badblocks_set(&rdev->badblocks, s, sectors, 0)) {
10679 		/*
10680 		 * Mark the disk as Faulty when setting badblocks fails,
10681 		 * otherwise, bad sectors may be read.
10682 		 */
10683 		md_error(mddev, rdev);
10684 		return false;
10685 	}
10686 
10687 	/* Make sure they get written out promptly */
10688 	if (test_bit(ExternalBbl, &rdev->flags))
10689 		sysfs_notify_dirent_safe(rdev->sysfs_unack_badblocks);
10690 	sysfs_notify_dirent_safe(rdev->sysfs_state);
10691 	set_mask_bits(&mddev->sb_flags, 0,
10692 		      BIT(MD_SB_CHANGE_CLEAN) | BIT(MD_SB_CHANGE_PENDING));
10693 	md_wakeup_thread(rdev->mddev->thread);
10694 	return true;
10695 }
10696 EXPORT_SYMBOL_GPL(rdev_set_badblocks);
10697 
rdev_clear_badblocks(struct md_rdev * rdev,sector_t s,sector_t sectors,int is_new)10698 void rdev_clear_badblocks(struct md_rdev *rdev, sector_t s, sector_t sectors,
10699 			  int is_new)
10700 {
10701 	if (is_new)
10702 		s += rdev->new_data_offset;
10703 	else
10704 		s += rdev->data_offset;
10705 
10706 	if (!badblocks_clear(&rdev->badblocks, s, sectors))
10707 		return;
10708 
10709 	if (test_bit(ExternalBbl, &rdev->flags))
10710 		sysfs_notify_dirent_safe(rdev->sysfs_badblocks);
10711 }
10712 EXPORT_SYMBOL_GPL(rdev_clear_badblocks);
10713 
md_notify_reboot(struct notifier_block * this,unsigned long code,void * x)10714 static int md_notify_reboot(struct notifier_block *this,
10715 			    unsigned long code, void *x)
10716 {
10717 	struct mddev *mddev;
10718 
10719 	spin_lock(&all_mddevs_lock);
10720 	list_for_each_entry(mddev, &all_mddevs, all_mddevs) {
10721 		if (!mddev_get(mddev))
10722 			continue;
10723 		spin_unlock(&all_mddevs_lock);
10724 		if (mddev_trylock(mddev)) {
10725 			if (mddev->pers)
10726 				__md_stop_writes(mddev);
10727 			if (mddev->persistent)
10728 				mddev->safemode = 2;
10729 			mddev_unlock(mddev);
10730 		}
10731 		spin_lock(&all_mddevs_lock);
10732 		mddev_put_locked(mddev);
10733 	}
10734 	spin_unlock(&all_mddevs_lock);
10735 
10736 	return NOTIFY_DONE;
10737 }
10738 
10739 static struct notifier_block md_notifier = {
10740 	.notifier_call	= md_notify_reboot,
10741 	.next		= NULL,
10742 	.priority	= INT_MAX, /* before any real devices */
10743 };
10744 
md_geninit(void)10745 static void md_geninit(void)
10746 {
10747 	pr_debug("md: sizeof(mdp_super_t) = %d\n", (int)sizeof(mdp_super_t));
10748 
10749 	proc_create("mdstat", S_IRUGO, NULL, &mdstat_proc_ops);
10750 }
10751 
md_init(void)10752 static int __init md_init(void)
10753 {
10754 	int ret = md_bitmap_init();
10755 
10756 	if (ret)
10757 		return ret;
10758 
10759 	ret = md_llbitmap_init();
10760 	if (ret)
10761 		goto err_bitmap;
10762 
10763 	ret = -ENOMEM;
10764 	md_misc_wq = alloc_workqueue("md_misc", WQ_PERCPU, 0);
10765 	if (!md_misc_wq)
10766 		goto err_misc_wq;
10767 
10768 	ret = __register_blkdev(MD_MAJOR, "md", md_probe);
10769 	if (ret < 0)
10770 		goto err_md;
10771 
10772 	ret = __register_blkdev(0, "mdp", md_probe);
10773 	if (ret < 0)
10774 		goto err_mdp;
10775 	mdp_major = ret;
10776 
10777 	register_reboot_notifier(&md_notifier);
10778 	raid_table_header = register_sysctl("dev/raid", raid_table);
10779 
10780 	md_geninit();
10781 	return 0;
10782 
10783 err_mdp:
10784 	unregister_blkdev(MD_MAJOR, "md");
10785 err_md:
10786 	destroy_workqueue(md_misc_wq);
10787 err_misc_wq:
10788 	md_llbitmap_exit();
10789 err_bitmap:
10790 	md_bitmap_exit();
10791 	return ret;
10792 }
10793 
check_sb_changes(struct mddev * mddev,struct md_rdev * rdev)10794 static void check_sb_changes(struct mddev *mddev, struct md_rdev *rdev)
10795 {
10796 	struct mdp_superblock_1 *sb = page_address(rdev->sb_page);
10797 	struct md_rdev *rdev2, *tmp;
10798 	int role, ret;
10799 
10800 	/*
10801 	 * If size is changed in another node then we need to
10802 	 * do resize as well.
10803 	 */
10804 	if (mddev->dev_sectors != le64_to_cpu(sb->size)) {
10805 		ret = mddev->pers->resize(mddev, le64_to_cpu(sb->size));
10806 		if (ret)
10807 			pr_info("md-cluster: resize failed\n");
10808 		else if (md_bitmap_enabled(mddev, false))
10809 			mddev->bitmap_ops->update_sb(mddev->bitmap);
10810 	}
10811 
10812 	/* Check for change of roles in the active devices */
10813 	rdev_for_each_safe(rdev2, tmp, mddev) {
10814 		if (test_bit(Faulty, &rdev2->flags)) {
10815 			if (test_bit(ClusterRemove, &rdev2->flags))
10816 				set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
10817 			continue;
10818 		}
10819 
10820 		/* Check if the roles changed */
10821 		role = le16_to_cpu(sb->dev_roles[rdev2->desc_nr]);
10822 
10823 		if (test_bit(Candidate, &rdev2->flags)) {
10824 			if (role == MD_DISK_ROLE_FAULTY) {
10825 				pr_info("md: Removing Candidate device %pg because add failed\n",
10826 					rdev2->bdev);
10827 				md_kick_rdev_from_array(rdev2);
10828 				continue;
10829 			}
10830 			else
10831 				clear_bit(Candidate, &rdev2->flags);
10832 		}
10833 
10834 		if (role != rdev2->raid_disk) {
10835 			/*
10836 			 * got activated except reshape is happening.
10837 			 */
10838 			if (rdev2->raid_disk == -1 && role != MD_DISK_ROLE_SPARE &&
10839 			    !(le32_to_cpu(sb->feature_map) &
10840 			      MD_FEATURE_RESHAPE_ACTIVE) &&
10841 			    !mddev->cluster_ops->resync_status_get(mddev)) {
10842 				/*
10843 				 * -1 to make raid1_add_disk() set conf->fullsync
10844 				 * to 1. This could avoid skipping sync when the
10845 				 * remote node is down during resyncing.
10846 				 */
10847 				if ((le32_to_cpu(sb->feature_map)
10848 				    & MD_FEATURE_RECOVERY_OFFSET))
10849 					rdev2->saved_raid_disk = -1;
10850 				else
10851 					rdev2->saved_raid_disk = role;
10852 				ret = remove_and_add_spares(mddev, rdev2);
10853 				pr_info("Activated spare: %pg\n",
10854 					rdev2->bdev);
10855 				/* wakeup mddev->thread here, so array could
10856 				 * perform resync with the new activated disk */
10857 				set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
10858 				md_wakeup_thread(mddev->thread);
10859 			}
10860 			/* device faulty
10861 			 * We just want to do the minimum to mark the disk
10862 			 * as faulty. The recovery is performed by the
10863 			 * one who initiated the error.
10864 			 */
10865 			if (role == MD_DISK_ROLE_FAULTY ||
10866 			    role == MD_DISK_ROLE_JOURNAL) {
10867 				md_error(mddev, rdev2);
10868 				clear_bit(Blocked, &rdev2->flags);
10869 			}
10870 		}
10871 	}
10872 
10873 	if (mddev->raid_disks != le32_to_cpu(sb->raid_disks)) {
10874 		ret = update_raid_disks(mddev, le32_to_cpu(sb->raid_disks));
10875 		if (ret)
10876 			pr_warn("md: updating array disks failed. %d\n", ret);
10877 	}
10878 
10879 	/*
10880 	 * Since mddev->delta_disks has already updated in update_raid_disks,
10881 	 * so it is time to check reshape.
10882 	 */
10883 	if (test_bit(MD_RESYNCING_REMOTE, &mddev->recovery) &&
10884 	    (le32_to_cpu(sb->feature_map) & MD_FEATURE_RESHAPE_ACTIVE)) {
10885 		/*
10886 		 * reshape is happening in the remote node, we need to
10887 		 * update reshape_position and call start_reshape.
10888 		 */
10889 		mddev->reshape_position = le64_to_cpu(sb->reshape_position);
10890 		if (mddev->pers->update_reshape_pos)
10891 			mddev->pers->update_reshape_pos(mddev);
10892 		if (mddev->pers->start_reshape)
10893 			mddev->pers->start_reshape(mddev);
10894 	} else if (test_bit(MD_RESYNCING_REMOTE, &mddev->recovery) &&
10895 		   mddev->reshape_position != MaxSector &&
10896 		   !(le32_to_cpu(sb->feature_map) & MD_FEATURE_RESHAPE_ACTIVE)) {
10897 		/* reshape is just done in another node. */
10898 		mddev->reshape_position = MaxSector;
10899 		if (mddev->pers->update_reshape_pos)
10900 			mddev->pers->update_reshape_pos(mddev);
10901 	}
10902 
10903 	/* Finally set the event to be up to date */
10904 	mddev->events = le64_to_cpu(sb->events);
10905 }
10906 
read_rdev(struct mddev * mddev,struct md_rdev * rdev)10907 static int read_rdev(struct mddev *mddev, struct md_rdev *rdev)
10908 {
10909 	int err;
10910 	struct page *swapout = rdev->sb_page;
10911 	struct mdp_superblock_1 *sb;
10912 
10913 	/* Store the sb page of the rdev in the swapout temporary
10914 	 * variable in case we err in the future
10915 	 */
10916 	rdev->sb_page = NULL;
10917 	err = alloc_disk_sb(rdev);
10918 	if (err == 0) {
10919 		ClearPageUptodate(rdev->sb_page);
10920 		rdev->sb_loaded = 0;
10921 		err = super_types[mddev->major_version].
10922 			load_super(rdev, NULL, mddev->minor_version);
10923 	}
10924 	if (err < 0) {
10925 		pr_warn("%s: %d Could not reload rdev(%d) err: %d. Restoring old values\n",
10926 				__func__, __LINE__, rdev->desc_nr, err);
10927 		if (rdev->sb_page)
10928 			put_page(rdev->sb_page);
10929 		rdev->sb_page = swapout;
10930 		rdev->sb_loaded = 1;
10931 		return err;
10932 	}
10933 
10934 	sb = page_address(rdev->sb_page);
10935 	/* Read the offset unconditionally, even if MD_FEATURE_RECOVERY_OFFSET
10936 	 * is not set
10937 	 */
10938 
10939 	if ((le32_to_cpu(sb->feature_map) & MD_FEATURE_RECOVERY_OFFSET))
10940 		rdev->recovery_offset = le64_to_cpu(sb->recovery_offset);
10941 
10942 	/* The other node finished recovery, call spare_active to set
10943 	 * device In_sync and mddev->degraded
10944 	 */
10945 	if (rdev->recovery_offset == MaxSector &&
10946 	    !test_bit(In_sync, &rdev->flags) &&
10947 	    mddev->pers->spare_active(mddev))
10948 		sysfs_notify_dirent_safe(mddev->sysfs_degraded);
10949 
10950 	put_page(swapout);
10951 	return 0;
10952 }
10953 
md_reload_sb(struct mddev * mddev,int nr)10954 void md_reload_sb(struct mddev *mddev, int nr)
10955 {
10956 	struct md_rdev *rdev = NULL, *iter;
10957 	int err;
10958 
10959 	/* Find the rdev */
10960 	rdev_for_each_rcu(iter, mddev) {
10961 		if (iter->desc_nr == nr) {
10962 			rdev = iter;
10963 			break;
10964 		}
10965 	}
10966 
10967 	if (!rdev) {
10968 		pr_warn("%s: %d Could not find rdev with nr %d\n", __func__, __LINE__, nr);
10969 		return;
10970 	}
10971 
10972 	err = read_rdev(mddev, rdev);
10973 	if (err < 0)
10974 		return;
10975 
10976 	check_sb_changes(mddev, rdev);
10977 
10978 	/* Read all rdev's to update recovery_offset */
10979 	rdev_for_each_rcu(rdev, mddev) {
10980 		if (!test_bit(Faulty, &rdev->flags))
10981 			read_rdev(mddev, rdev);
10982 	}
10983 }
10984 EXPORT_SYMBOL(md_reload_sb);
10985 
10986 #ifndef MODULE
10987 
10988 /*
10989  * Searches all registered partitions for autorun RAID arrays
10990  * at boot time.
10991  */
10992 
10993 static DEFINE_MUTEX(detected_devices_mutex);
10994 static LIST_HEAD(all_detected_devices);
10995 struct detected_devices_node {
10996 	struct list_head list;
10997 	dev_t dev;
10998 };
10999 
md_autodetect_dev(dev_t dev)11000 void md_autodetect_dev(dev_t dev)
11001 {
11002 	struct detected_devices_node *node_detected_dev;
11003 
11004 	node_detected_dev = kzalloc_obj(*node_detected_dev);
11005 	if (node_detected_dev) {
11006 		node_detected_dev->dev = dev;
11007 		mutex_lock(&detected_devices_mutex);
11008 		list_add_tail(&node_detected_dev->list, &all_detected_devices);
11009 		mutex_unlock(&detected_devices_mutex);
11010 	}
11011 }
11012 
md_autostart_arrays(int part)11013 void md_autostart_arrays(int part)
11014 {
11015 	struct md_rdev *rdev;
11016 	struct detected_devices_node *node_detected_dev;
11017 	dev_t dev;
11018 	int i_scanned, i_passed;
11019 
11020 	i_scanned = 0;
11021 	i_passed = 0;
11022 
11023 	pr_info("md: Autodetecting RAID arrays.\n");
11024 
11025 	mutex_lock(&detected_devices_mutex);
11026 	while (!list_empty(&all_detected_devices) && i_scanned < INT_MAX) {
11027 		i_scanned++;
11028 		node_detected_dev = list_entry(all_detected_devices.next,
11029 					struct detected_devices_node, list);
11030 		list_del(&node_detected_dev->list);
11031 		dev = node_detected_dev->dev;
11032 		kfree(node_detected_dev);
11033 		mutex_unlock(&detected_devices_mutex);
11034 		rdev = md_import_device(dev,0, 90);
11035 		mutex_lock(&detected_devices_mutex);
11036 		if (IS_ERR(rdev))
11037 			continue;
11038 
11039 		if (test_bit(Faulty, &rdev->flags))
11040 			continue;
11041 
11042 		set_bit(AutoDetected, &rdev->flags);
11043 		list_add(&rdev->same_set, &pending_raid_disks);
11044 		i_passed++;
11045 	}
11046 	mutex_unlock(&detected_devices_mutex);
11047 
11048 	pr_debug("md: Scanned %d and added %d devices.\n", i_scanned, i_passed);
11049 
11050 	autorun_devices(part);
11051 }
11052 
11053 #endif /* !MODULE */
11054 
md_exit(void)11055 static __exit void md_exit(void)
11056 {
11057 	struct mddev *mddev;
11058 	int delay = 1;
11059 
11060 	unregister_blkdev(MD_MAJOR,"md");
11061 	unregister_blkdev(mdp_major, "mdp");
11062 	unregister_reboot_notifier(&md_notifier);
11063 	unregister_sysctl_table(raid_table_header);
11064 
11065 	/* We cannot unload the modules while some process is
11066 	 * waiting for us in select() or poll() - wake them up
11067 	 */
11068 	md_unloading = 1;
11069 	while (waitqueue_active(&md_event_waiters)) {
11070 		/* not safe to leave yet */
11071 		wake_up(&md_event_waiters);
11072 		msleep(delay);
11073 		delay += delay;
11074 	}
11075 	remove_proc_entry("mdstat", NULL);
11076 
11077 	spin_lock(&all_mddevs_lock);
11078 	list_for_each_entry(mddev, &all_mddevs, all_mddevs) {
11079 		if (!mddev_get(mddev))
11080 			continue;
11081 		spin_unlock(&all_mddevs_lock);
11082 		export_array(mddev);
11083 		mddev->ctime = 0;
11084 		mddev->hold_active = 0;
11085 		/*
11086 		 * As the mddev is now fully clear, mddev_put will schedule
11087 		 * the mddev for destruction by a workqueue, and the
11088 		 * destroy_workqueue() below will wait for that to complete.
11089 		 */
11090 		spin_lock(&all_mddevs_lock);
11091 		mddev_put_locked(mddev);
11092 	}
11093 	spin_unlock(&all_mddevs_lock);
11094 
11095 	destroy_workqueue(md_misc_wq);
11096 	md_bitmap_exit();
11097 }
11098 
11099 subsys_initcall(md_init);
module_exit(md_exit)11100 module_exit(md_exit)
11101 
11102 static int get_ro(char *buffer, const struct kernel_param *kp)
11103 {
11104 	return sprintf(buffer, "%d\n", start_readonly);
11105 }
set_ro(const char * val,const struct kernel_param * kp)11106 static int set_ro(const char *val, const struct kernel_param *kp)
11107 {
11108 	return kstrtouint(val, 10, (unsigned int *)&start_readonly);
11109 }
11110 
11111 module_param_call(start_ro, set_ro, get_ro, NULL, S_IRUSR|S_IWUSR);
11112 module_param(start_dirty_degraded, int, S_IRUGO|S_IWUSR);
11113 module_param_call(new_array, add_named_array, NULL, NULL, S_IWUSR);
11114 module_param(create_on_open, bool, S_IRUSR|S_IWUSR);
11115 module_param(legacy_async_del_gendisk, bool, 0600);
11116 module_param(check_new_feature, bool, 0600);
11117 
11118 MODULE_LICENSE("GPL");
11119 MODULE_DESCRIPTION("MD RAID framework");
11120 MODULE_ALIAS("md");
11121 MODULE_ALIAS_BLOCKDEV_MAJOR(MD_MAJOR);
11122