This source file includes following definitions.
- is_badblock
- mddev_lock
- mddev_lock_nointr
- mddev_trylock
- md_sync_acct
- md_sync_acct_bio
- sysfs_get_dirent_safe
- sysfs_notify_dirent_safe
- mdname
- sysfs_link_rdev
- sysfs_unlink_rdev
- safe_put_page
- is_mddev_broken
- rdev_dec_pending
- mddev_is_clustered
- mddev_clear_unsupported_flags
- mddev_check_writesame
- mddev_check_write_zeroes
1
2
3
4
5
6
7
8 #ifndef _MD_MD_H
9 #define _MD_MD_H
10
11 #include <linux/blkdev.h>
12 #include <linux/backing-dev.h>
13 #include <linux/badblocks.h>
14 #include <linux/kobject.h>
15 #include <linux/list.h>
16 #include <linux/mm.h>
17 #include <linux/mutex.h>
18 #include <linux/timer.h>
19 #include <linux/wait.h>
20 #include <linux/workqueue.h>
21 #include "md-cluster.h"
22
23 #define MaxSector (~(sector_t)0)
24
25
26
27
28
29
30
31
32
33
34 #define MD_FAILFAST (REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT)
35
36
37
38 struct md_rdev {
39 struct list_head same_set;
40
41 sector_t sectors;
42 struct mddev *mddev;
43 int last_events;
44
45
46
47
48
49
50 struct block_device *meta_bdev;
51 struct block_device *bdev;
52
53 struct page *sb_page, *bb_page;
54 int sb_loaded;
55 __u64 sb_events;
56 sector_t data_offset;
57 sector_t new_data_offset;
58 sector_t sb_start;
59 int sb_size;
60 int preferred_minor;
61
62 struct kobject kobj;
63
64
65
66
67
68
69
70
71
72
73
74
75 unsigned long flags;
76 wait_queue_head_t blocked_wait;
77
78 int desc_nr;
79 int raid_disk;
80 int new_raid_disk;
81
82
83 int saved_raid_disk;
84
85
86
87 union {
88 sector_t recovery_offset;
89
90
91
92 sector_t journal_tail;
93
94
95
96 };
97
98 atomic_t nr_pending;
99
100
101
102 atomic_t read_errors;
103
104
105 time64_t last_read_error;
106
107
108 atomic_t corrected_errors;
109
110
111
112
113
114
115
116 struct list_head wb_list;
117 spinlock_t wb_list_lock;
118 wait_queue_head_t wb_io_wait;
119
120 struct work_struct del_work;
121
122 struct kernfs_node *sysfs_state;
123
124
125 struct badblocks badblocks;
126
127 struct {
128 short offset;
129
130 unsigned int size;
131 sector_t sector;
132 } ppl;
133 };
134 enum flag_bits {
135 Faulty,
136 In_sync,
137 Bitmap_sync,
138
139
140
141
142 WriteMostly,
143 AutoDetected,
144 Blocked,
145
146
147
148 WriteErrorSeen,
149
150
151 FaultRecorded,
152
153
154
155
156
157 BlockedBadBlocks,
158
159
160
161
162
163
164
165
166
167 WantReplacement,
168
169
170
171
172 Replacement,
173
174
175
176 Candidate,
177
178
179
180 Journal,
181
182
183
184
185 ClusterRemove,
186 RemoveSynchronized,
187
188
189
190
191 ExternalBbl,
192
193
194 FailFast,
195
196
197
198
199
200 LastDev,
201
202
203
204 WBCollisionCheck,
205
206
207
208 };
209
210 static inline int is_badblock(struct md_rdev *rdev, sector_t s, int sectors,
211 sector_t *first_bad, int *bad_sectors)
212 {
213 if (unlikely(rdev->badblocks.count)) {
214 int rv = badblocks_check(&rdev->badblocks, rdev->data_offset + s,
215 sectors,
216 first_bad, bad_sectors);
217 if (rv)
218 *first_bad -= rdev->data_offset;
219 return rv;
220 }
221 return 0;
222 }
223 extern int rdev_set_badblocks(struct md_rdev *rdev, sector_t s, int sectors,
224 int is_new);
225 extern int rdev_clear_badblocks(struct md_rdev *rdev, sector_t s, int sectors,
226 int is_new);
227 struct md_cluster_info;
228
229
230 enum mddev_flags {
231 MD_ARRAY_FIRST_USE,
232 MD_CLOSING,
233
234 MD_JOURNAL_CLEAN,
235 MD_HAS_JOURNAL,
236 MD_CLUSTER_RESYNC_LOCKED,
237
238
239 MD_FAILFAST_SUPPORTED,
240
241
242
243 MD_HAS_PPL,
244 MD_HAS_MULTIPLE_PPLS,
245 MD_ALLOW_SB_UPDATE,
246
247
248 MD_UPDATING_SB,
249
250
251 MD_NOT_READY,
252
253
254 MD_BROKEN,
255
256
257 };
258
259 enum mddev_sb_flags {
260 MD_SB_CHANGE_DEVS,
261 MD_SB_CHANGE_CLEAN,
262 MD_SB_CHANGE_PENDING,
263 MD_SB_NEED_REWRITE,
264 };
265
266 #define NR_WB_INFOS 8
267
268 struct wb_info {
269 sector_t lo;
270 sector_t hi;
271 struct list_head list;
272 };
273
274 struct mddev {
275 void *private;
276 struct md_personality *pers;
277 dev_t unit;
278 int md_minor;
279 struct list_head disks;
280 unsigned long flags;
281 unsigned long sb_flags;
282
283 int suspended;
284 atomic_t active_io;
285 int ro;
286 int sysfs_active;
287
288
289
290 struct gendisk *gendisk;
291
292 struct kobject kobj;
293 int hold_active;
294 #define UNTIL_IOCTL 1
295 #define UNTIL_STOP 2
296
297
298 int major_version,
299 minor_version,
300 patch_version;
301 int persistent;
302 int external;
303
304 char metadata_type[17];
305 int chunk_sectors;
306 time64_t ctime, utime;
307 int level, layout;
308 char clevel[16];
309 int raid_disks;
310 int max_disks;
311 sector_t dev_sectors;
312
313 sector_t array_sectors;
314 int external_size;
315
316 __u64 events;
317
318
319
320
321
322 int can_decrease_events;
323
324 char uuid[16];
325
326
327
328
329
330
331 sector_t reshape_position;
332 int delta_disks, new_level, new_layout;
333 int new_chunk_sectors;
334 int reshape_backwards;
335
336 struct md_thread *thread;
337 struct md_thread *sync_thread;
338
339
340
341
342
343
344
345 char *last_sync_action;
346 sector_t curr_resync;
347
348
349
350
351
352
353 sector_t curr_resync_completed;
354 unsigned long resync_mark;
355 sector_t resync_mark_cnt;
356 sector_t curr_mark_cnt;
357
358 sector_t resync_max_sectors;
359
360 atomic64_t resync_mismatches;
361
362
363
364
365 sector_t suspend_lo;
366 sector_t suspend_hi;
367
368 int sync_speed_min;
369 int sync_speed_max;
370
371
372 int parallel_resync;
373
374 int ok_start_degraded;
375
376 unsigned long recovery;
377
378
379
380
381
382 int recovery_disabled;
383
384 int in_sync;
385
386
387
388
389
390
391
392
393
394 struct mutex open_mutex;
395 struct mutex reconfig_mutex;
396 atomic_t active;
397 atomic_t openers;
398
399 int changed;
400
401 int degraded;
402
403
404
405 atomic_t recovery_active;
406 wait_queue_head_t recovery_wait;
407 sector_t recovery_cp;
408 sector_t resync_min;
409
410 sector_t resync_max;
411
412
413 struct kernfs_node *sysfs_state;
414
415
416 struct kernfs_node *sysfs_action;
417
418 struct work_struct del_work;
419
420
421
422
423
424
425
426
427
428
429
430
431 spinlock_t lock;
432 wait_queue_head_t sb_wait;
433 atomic_t pending_writes;
434
435 unsigned int safemode;
436
437
438 unsigned int safemode_delay;
439 struct timer_list safemode_timer;
440 struct percpu_ref writes_pending;
441 int sync_checkers;
442 struct request_queue *queue;
443
444 struct bitmap *bitmap;
445 struct {
446 struct file *file;
447 loff_t offset;
448
449
450
451
452
453 unsigned long space;
454 loff_t default_offset;
455
456
457
458 unsigned long default_space;
459
460 struct mutex mutex;
461 unsigned long chunksize;
462 unsigned long daemon_sleep;
463 unsigned long max_write_behind;
464 int external;
465 int nodes;
466 char cluster_name[64];
467 } bitmap_info;
468
469 atomic_t max_corr_read_errors;
470 struct list_head all_mddevs;
471
472 struct attribute_group *to_remove;
473
474 struct bio_set bio_set;
475 struct bio_set sync_set;
476
477
478
479
480
481
482
483 struct bio *flush_bio;
484 atomic_t flush_pending;
485 ktime_t start_flush, last_flush;
486
487
488 struct work_struct flush_work;
489 struct work_struct event_work;
490 mempool_t *wb_info_pool;
491 void (*sync_super)(struct mddev *mddev, struct md_rdev *rdev);
492 struct md_cluster_info *cluster_info;
493 unsigned int good_device_nr;
494
495 bool has_superblocks:1;
496 bool fail_last_dev:1;
497 };
498
499 enum recovery_flags {
500
501
502
503 MD_RECOVERY_RUNNING,
504 MD_RECOVERY_SYNC,
505 MD_RECOVERY_RECOVER,
506 MD_RECOVERY_INTR,
507 MD_RECOVERY_DONE,
508 MD_RECOVERY_NEEDED,
509 MD_RECOVERY_REQUESTED,
510 MD_RECOVERY_CHECK,
511 MD_RECOVERY_RESHAPE,
512 MD_RECOVERY_FROZEN,
513 MD_RECOVERY_ERROR,
514 MD_RECOVERY_WAIT,
515 MD_RESYNCING_REMOTE,
516 };
517
518 static inline int __must_check mddev_lock(struct mddev *mddev)
519 {
520 return mutex_lock_interruptible(&mddev->reconfig_mutex);
521 }
522
523
524
525
526 static inline void mddev_lock_nointr(struct mddev *mddev)
527 {
528 mutex_lock(&mddev->reconfig_mutex);
529 }
530
531 static inline int mddev_trylock(struct mddev *mddev)
532 {
533 return mutex_trylock(&mddev->reconfig_mutex);
534 }
535 extern void mddev_unlock(struct mddev *mddev);
536
537 static inline void md_sync_acct(struct block_device *bdev, unsigned long nr_sectors)
538 {
539 atomic_add(nr_sectors, &bdev->bd_contains->bd_disk->sync_io);
540 }
541
542 static inline void md_sync_acct_bio(struct bio *bio, unsigned long nr_sectors)
543 {
544 atomic_add(nr_sectors, &bio->bi_disk->sync_io);
545 }
546
547 struct md_personality
548 {
549 char *name;
550 int level;
551 struct list_head list;
552 struct module *owner;
553 bool __must_check (*make_request)(struct mddev *mddev, struct bio *bio);
554
555
556
557
558 int (*run)(struct mddev *mddev);
559
560 int (*start)(struct mddev *mddev);
561 void (*free)(struct mddev *mddev, void *priv);
562 void (*status)(struct seq_file *seq, struct mddev *mddev);
563
564
565
566 void (*error_handler)(struct mddev *mddev, struct md_rdev *rdev);
567 int (*hot_add_disk) (struct mddev *mddev, struct md_rdev *rdev);
568 int (*hot_remove_disk) (struct mddev *mddev, struct md_rdev *rdev);
569 int (*spare_active) (struct mddev *mddev);
570 sector_t (*sync_request)(struct mddev *mddev, sector_t sector_nr, int *skipped);
571 int (*resize) (struct mddev *mddev, sector_t sectors);
572 sector_t (*size) (struct mddev *mddev, sector_t sectors, int raid_disks);
573 int (*check_reshape) (struct mddev *mddev);
574 int (*start_reshape) (struct mddev *mddev);
575 void (*finish_reshape) (struct mddev *mddev);
576 void (*update_reshape_pos) (struct mddev *mddev);
577
578
579
580
581 void (*quiesce) (struct mddev *mddev, int quiesce);
582
583
584
585
586
587
588
589
590
591 void *(*takeover) (struct mddev *mddev);
592
593
594 int (*congested)(struct mddev *mddev, int bits);
595
596 int (*change_consistency_policy)(struct mddev *mddev, const char *buf);
597 };
598
599 struct md_sysfs_entry {
600 struct attribute attr;
601 ssize_t (*show)(struct mddev *, char *);
602 ssize_t (*store)(struct mddev *, const char *, size_t);
603 };
604 extern struct attribute_group md_bitmap_group;
605
606 static inline struct kernfs_node *sysfs_get_dirent_safe(struct kernfs_node *sd, char *name)
607 {
608 if (sd)
609 return sysfs_get_dirent(sd, name);
610 return sd;
611 }
612 static inline void sysfs_notify_dirent_safe(struct kernfs_node *sd)
613 {
614 if (sd)
615 sysfs_notify_dirent(sd);
616 }
617
618 static inline char * mdname (struct mddev * mddev)
619 {
620 return mddev->gendisk ? mddev->gendisk->disk_name : "mdX";
621 }
622
623 static inline int sysfs_link_rdev(struct mddev *mddev, struct md_rdev *rdev)
624 {
625 char nm[20];
626 if (!test_bit(Replacement, &rdev->flags) &&
627 !test_bit(Journal, &rdev->flags) &&
628 mddev->kobj.sd) {
629 sprintf(nm, "rd%d", rdev->raid_disk);
630 return sysfs_create_link(&mddev->kobj, &rdev->kobj, nm);
631 } else
632 return 0;
633 }
634
635 static inline void sysfs_unlink_rdev(struct mddev *mddev, struct md_rdev *rdev)
636 {
637 char nm[20];
638 if (!test_bit(Replacement, &rdev->flags) &&
639 !test_bit(Journal, &rdev->flags) &&
640 mddev->kobj.sd) {
641 sprintf(nm, "rd%d", rdev->raid_disk);
642 sysfs_remove_link(&mddev->kobj, nm);
643 }
644 }
645
646
647
648
649
650 #define rdev_for_each_list(rdev, tmp, head) \
651 list_for_each_entry_safe(rdev, tmp, head, same_set)
652
653
654
655
656 #define rdev_for_each(rdev, mddev) \
657 list_for_each_entry(rdev, &((mddev)->disks), same_set)
658
659 #define rdev_for_each_safe(rdev, tmp, mddev) \
660 list_for_each_entry_safe(rdev, tmp, &((mddev)->disks), same_set)
661
662 #define rdev_for_each_rcu(rdev, mddev) \
663 list_for_each_entry_rcu(rdev, &((mddev)->disks), same_set)
664
665 struct md_thread {
666 void (*run) (struct md_thread *thread);
667 struct mddev *mddev;
668 wait_queue_head_t wqueue;
669 unsigned long flags;
670 struct task_struct *tsk;
671 unsigned long timeout;
672 void *private;
673 };
674
675 #define THREAD_WAKEUP 0
676
677 static inline void safe_put_page(struct page *p)
678 {
679 if (p) put_page(p);
680 }
681
682 extern int register_md_personality(struct md_personality *p);
683 extern int unregister_md_personality(struct md_personality *p);
684 extern int register_md_cluster_operations(struct md_cluster_operations *ops,
685 struct module *module);
686 extern int unregister_md_cluster_operations(void);
687 extern int md_setup_cluster(struct mddev *mddev, int nodes);
688 extern void md_cluster_stop(struct mddev *mddev);
689 extern struct md_thread *md_register_thread(
690 void (*run)(struct md_thread *thread),
691 struct mddev *mddev,
692 const char *name);
693 extern void md_unregister_thread(struct md_thread **threadp);
694 extern void md_wakeup_thread(struct md_thread *thread);
695 extern void md_check_recovery(struct mddev *mddev);
696 extern void md_reap_sync_thread(struct mddev *mddev);
697 extern int mddev_init_writes_pending(struct mddev *mddev);
698 extern bool md_write_start(struct mddev *mddev, struct bio *bi);
699 extern void md_write_inc(struct mddev *mddev, struct bio *bi);
700 extern void md_write_end(struct mddev *mddev);
701 extern void md_done_sync(struct mddev *mddev, int blocks, int ok);
702 extern void md_error(struct mddev *mddev, struct md_rdev *rdev);
703 extern void md_finish_reshape(struct mddev *mddev);
704
705 extern int mddev_congested(struct mddev *mddev, int bits);
706 extern bool __must_check md_flush_request(struct mddev *mddev, struct bio *bio);
707 extern void md_super_write(struct mddev *mddev, struct md_rdev *rdev,
708 sector_t sector, int size, struct page *page);
709 extern int md_super_wait(struct mddev *mddev);
710 extern int sync_page_io(struct md_rdev *rdev, sector_t sector, int size,
711 struct page *page, int op, int op_flags,
712 bool metadata_op);
713 extern void md_do_sync(struct md_thread *thread);
714 extern void md_new_event(struct mddev *mddev);
715 extern void md_allow_write(struct mddev *mddev);
716 extern void md_wait_for_blocked_rdev(struct md_rdev *rdev, struct mddev *mddev);
717 extern void md_set_array_sectors(struct mddev *mddev, sector_t array_sectors);
718 extern int md_check_no_bitmap(struct mddev *mddev);
719 extern int md_integrity_register(struct mddev *mddev);
720 extern int md_integrity_add_rdev(struct md_rdev *rdev, struct mddev *mddev);
721 extern int strict_strtoul_scaled(const char *cp, unsigned long *res, int scale);
722
723 extern void mddev_init(struct mddev *mddev);
724 extern int md_run(struct mddev *mddev);
725 extern int md_start(struct mddev *mddev);
726 extern void md_stop(struct mddev *mddev);
727 extern void md_stop_writes(struct mddev *mddev);
728 extern int md_rdev_init(struct md_rdev *rdev);
729 extern void md_rdev_clear(struct md_rdev *rdev);
730
731 extern void md_handle_request(struct mddev *mddev, struct bio *bio);
732 extern void mddev_suspend(struct mddev *mddev);
733 extern void mddev_resume(struct mddev *mddev);
734 extern struct bio *bio_alloc_mddev(gfp_t gfp_mask, int nr_iovecs,
735 struct mddev *mddev);
736
737 extern void md_reload_sb(struct mddev *mddev, int raid_disk);
738 extern void md_update_sb(struct mddev *mddev, int force);
739 extern void md_kick_rdev_from_array(struct md_rdev * rdev);
740 extern void mddev_create_wb_pool(struct mddev *mddev, struct md_rdev *rdev,
741 bool is_suspend);
742 struct md_rdev *md_find_rdev_nr_rcu(struct mddev *mddev, int nr);
743 struct md_rdev *md_find_rdev_rcu(struct mddev *mddev, dev_t dev);
744
745 static inline bool is_mddev_broken(struct md_rdev *rdev, const char *md_type)
746 {
747 int flags = rdev->bdev->bd_disk->flags;
748
749 if (!(flags & GENHD_FL_UP)) {
750 if (!test_and_set_bit(MD_BROKEN, &rdev->mddev->flags))
751 pr_warn("md: %s: %s array has a missing/failed member\n",
752 mdname(rdev->mddev), md_type);
753 return true;
754 }
755 return false;
756 }
757
758 static inline void rdev_dec_pending(struct md_rdev *rdev, struct mddev *mddev)
759 {
760 int faulty = test_bit(Faulty, &rdev->flags);
761 if (atomic_dec_and_test(&rdev->nr_pending) && faulty) {
762 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
763 md_wakeup_thread(mddev->thread);
764 }
765 }
766
767 extern struct md_cluster_operations *md_cluster_ops;
768 static inline int mddev_is_clustered(struct mddev *mddev)
769 {
770 return mddev->cluster_info && mddev->bitmap_info.nodes > 1;
771 }
772
773
774 static inline void mddev_clear_unsupported_flags(struct mddev *mddev,
775 unsigned long unsupported_flags)
776 {
777 mddev->flags &= ~unsupported_flags;
778 }
779
780 static inline void mddev_check_writesame(struct mddev *mddev, struct bio *bio)
781 {
782 if (bio_op(bio) == REQ_OP_WRITE_SAME &&
783 !bio->bi_disk->queue->limits.max_write_same_sectors)
784 mddev->queue->limits.max_write_same_sectors = 0;
785 }
786
787 static inline void mddev_check_write_zeroes(struct mddev *mddev, struct bio *bio)
788 {
789 if (bio_op(bio) == REQ_OP_WRITE_ZEROES &&
790 !bio->bi_disk->queue->limits.max_write_zeroes_sectors)
791 mddev->queue->limits.max_write_zeroes_sectors = 0;
792 }
793 #endif