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