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, §ors) < 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, §or) < 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, §ors);
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, §ors) < 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