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_STILL_CLOSED 4
205
206
207#define MD_JOURNAL_CLEAN 5
208#define MD_HAS_JOURNAL 6
209#define MD_RELOAD_SB 7
210
211
212#define MD_CLUSTER_RESYNC_LOCKED 8
213
214
215
216 int suspended;
217 atomic_t active_io;
218 int ro;
219 int sysfs_active;
220
221
222
223 struct gendisk *gendisk;
224
225 struct kobject kobj;
226 int hold_active;
227#define UNTIL_IOCTL 1
228#define UNTIL_STOP 2
229
230
231 int major_version,
232 minor_version,
233 patch_version;
234 int persistent;
235 int external;
236
237 char metadata_type[17];
238 int chunk_sectors;
239 time64_t ctime, utime;
240 int level, layout;
241 char clevel[16];
242 int raid_disks;
243 int max_disks;
244 sector_t dev_sectors;
245
246 sector_t array_sectors;
247 int external_size;
248
249 __u64 events;
250
251
252
253
254
255 int can_decrease_events;
256
257 char uuid[16];
258
259
260
261
262
263
264 sector_t reshape_position;
265 int delta_disks, new_level, new_layout;
266 int new_chunk_sectors;
267 int reshape_backwards;
268
269 struct md_thread *thread;
270 struct md_thread *sync_thread;
271
272
273
274
275
276
277
278 char *last_sync_action;
279 sector_t curr_resync;
280
281
282
283
284
285
286 sector_t curr_resync_completed;
287 unsigned long resync_mark;
288 sector_t resync_mark_cnt;
289 sector_t curr_mark_cnt;
290
291 sector_t resync_max_sectors;
292
293 atomic64_t resync_mismatches;
294
295
296
297
298 sector_t suspend_lo;
299 sector_t suspend_hi;
300
301 int sync_speed_min;
302 int sync_speed_max;
303
304
305 int parallel_resync;
306
307 int ok_start_degraded;
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322#define MD_RECOVERY_RUNNING 0
323#define MD_RECOVERY_SYNC 1
324#define MD_RECOVERY_RECOVER 2
325#define MD_RECOVERY_INTR 3
326#define MD_RECOVERY_DONE 4
327#define MD_RECOVERY_NEEDED 5
328#define MD_RECOVERY_REQUESTED 6
329#define MD_RECOVERY_CHECK 7
330#define MD_RECOVERY_RESHAPE 8
331#define MD_RECOVERY_FROZEN 9
332#define MD_RECOVERY_ERROR 10
333
334 unsigned long recovery;
335
336
337
338
339
340 int recovery_disabled;
341
342 int in_sync;
343
344
345
346
347
348
349
350
351
352 struct mutex open_mutex;
353 struct mutex reconfig_mutex;
354 atomic_t active;
355 atomic_t openers;
356
357 int changed;
358
359 int degraded;
360
361
362
363 atomic_t recovery_active;
364 wait_queue_head_t recovery_wait;
365 sector_t recovery_cp;
366 sector_t resync_min;
367
368 sector_t resync_max;
369
370
371 struct kernfs_node *sysfs_state;
372
373
374 struct kernfs_node *sysfs_action;
375
376 struct work_struct del_work;
377
378
379
380
381
382
383
384
385
386
387
388
389 spinlock_t lock;
390 wait_queue_head_t sb_wait;
391 atomic_t pending_writes;
392
393 unsigned int safemode;
394
395
396 unsigned int safemode_delay;
397 struct timer_list safemode_timer;
398 atomic_t writes_pending;
399 struct request_queue *queue;
400
401 struct bitmap *bitmap;
402 struct {
403 struct file *file;
404 loff_t offset;
405
406
407
408
409
410 unsigned long space;
411 loff_t default_offset;
412
413
414
415 unsigned long default_space;
416
417 struct mutex mutex;
418 unsigned long chunksize;
419 unsigned long daemon_sleep;
420 unsigned long max_write_behind;
421 int external;
422 int nodes;
423 char cluster_name[64];
424 } bitmap_info;
425
426 atomic_t max_corr_read_errors;
427 struct list_head all_mddevs;
428
429 struct attribute_group *to_remove;
430
431 struct bio_set *bio_set;
432
433
434
435
436
437 struct bio *flush_bio;
438 atomic_t flush_pending;
439 struct work_struct flush_work;
440 struct work_struct event_work;
441 void (*sync_super)(struct mddev *mddev, struct md_rdev *rdev);
442 struct md_cluster_info *cluster_info;
443 unsigned int good_device_nr;
444};
445
446static inline int __must_check mddev_lock(struct mddev *mddev)
447{
448 return mutex_lock_interruptible(&mddev->reconfig_mutex);
449}
450
451
452
453
454static inline void mddev_lock_nointr(struct mddev *mddev)
455{
456 mutex_lock(&mddev->reconfig_mutex);
457}
458
459static inline int mddev_is_locked(struct mddev *mddev)
460{
461 return mutex_is_locked(&mddev->reconfig_mutex);
462}
463
464static inline int mddev_trylock(struct mddev *mddev)
465{
466 return mutex_trylock(&mddev->reconfig_mutex);
467}
468extern void mddev_unlock(struct mddev *mddev);
469
470static inline void md_sync_acct(struct block_device *bdev, unsigned long nr_sectors)
471{
472 atomic_add(nr_sectors, &bdev->bd_contains->bd_disk->sync_io);
473}
474
475struct md_personality
476{
477 char *name;
478 int level;
479 struct list_head list;
480 struct module *owner;
481 void (*make_request)(struct mddev *mddev, struct bio *bio);
482 int (*run)(struct mddev *mddev);
483 void (*free)(struct mddev *mddev, void *priv);
484 void (*status)(struct seq_file *seq, struct mddev *mddev);
485
486
487
488 void (*error_handler)(struct mddev *mddev, struct md_rdev *rdev);
489 int (*hot_add_disk) (struct mddev *mddev, struct md_rdev *rdev);
490 int (*hot_remove_disk) (struct mddev *mddev, struct md_rdev *rdev);
491 int (*spare_active) (struct mddev *mddev);
492 sector_t (*sync_request)(struct mddev *mddev, sector_t sector_nr, int *skipped);
493 int (*resize) (struct mddev *mddev, sector_t sectors);
494 sector_t (*size) (struct mddev *mddev, sector_t sectors, int raid_disks);
495 int (*check_reshape) (struct mddev *mddev);
496 int (*start_reshape) (struct mddev *mddev);
497 void (*finish_reshape) (struct mddev *mddev);
498
499
500
501
502
503 void (*quiesce) (struct mddev *mddev, int state);
504
505
506
507
508
509
510
511
512
513 void *(*takeover) (struct mddev *mddev);
514
515
516 int (*congested)(struct mddev *mddev, int bits);
517};
518
519struct md_sysfs_entry {
520 struct attribute attr;
521 ssize_t (*show)(struct mddev *, char *);
522 ssize_t (*store)(struct mddev *, const char *, size_t);
523};
524extern struct attribute_group md_bitmap_group;
525
526static inline struct kernfs_node *sysfs_get_dirent_safe(struct kernfs_node *sd, char *name)
527{
528 if (sd)
529 return sysfs_get_dirent(sd, name);
530 return sd;
531}
532static inline void sysfs_notify_dirent_safe(struct kernfs_node *sd)
533{
534 if (sd)
535 sysfs_notify_dirent(sd);
536}
537
538static inline char * mdname (struct mddev * mddev)
539{
540 return mddev->gendisk ? mddev->gendisk->disk_name : "mdX";
541}
542
543static inline int sysfs_link_rdev(struct mddev *mddev, struct md_rdev *rdev)
544{
545 char nm[20];
546 if (!test_bit(Replacement, &rdev->flags) &&
547 !test_bit(Journal, &rdev->flags) &&
548 mddev->kobj.sd) {
549 sprintf(nm, "rd%d", rdev->raid_disk);
550 return sysfs_create_link(&mddev->kobj, &rdev->kobj, nm);
551 } else
552 return 0;
553}
554
555static inline void sysfs_unlink_rdev(struct mddev *mddev, struct md_rdev *rdev)
556{
557 char nm[20];
558 if (!test_bit(Replacement, &rdev->flags) &&
559 !test_bit(Journal, &rdev->flags) &&
560 mddev->kobj.sd) {
561 sprintf(nm, "rd%d", rdev->raid_disk);
562 sysfs_remove_link(&mddev->kobj, nm);
563 }
564}
565
566
567
568
569
570#define rdev_for_each_list(rdev, tmp, head) \
571 list_for_each_entry_safe(rdev, tmp, head, same_set)
572
573
574
575
576#define rdev_for_each(rdev, mddev) \
577 list_for_each_entry(rdev, &((mddev)->disks), same_set)
578
579#define rdev_for_each_safe(rdev, tmp, mddev) \
580 list_for_each_entry_safe(rdev, tmp, &((mddev)->disks), same_set)
581
582#define rdev_for_each_rcu(rdev, mddev) \
583 list_for_each_entry_rcu(rdev, &((mddev)->disks), same_set)
584
585struct md_thread {
586 void (*run) (struct md_thread *thread);
587 struct mddev *mddev;
588 wait_queue_head_t wqueue;
589 unsigned long flags;
590 struct task_struct *tsk;
591 unsigned long timeout;
592 void *private;
593};
594
595#define THREAD_WAKEUP 0
596
597static inline void safe_put_page(struct page *p)
598{
599 if (p) put_page(p);
600}
601
602extern int register_md_personality(struct md_personality *p);
603extern int unregister_md_personality(struct md_personality *p);
604extern int register_md_cluster_operations(struct md_cluster_operations *ops,
605 struct module *module);
606extern int unregister_md_cluster_operations(void);
607extern int md_setup_cluster(struct mddev *mddev, int nodes);
608extern void md_cluster_stop(struct mddev *mddev);
609extern struct md_thread *md_register_thread(
610 void (*run)(struct md_thread *thread),
611 struct mddev *mddev,
612 const char *name);
613extern void md_unregister_thread(struct md_thread **threadp);
614extern void md_wakeup_thread(struct md_thread *thread);
615extern void md_check_recovery(struct mddev *mddev);
616extern void md_reap_sync_thread(struct mddev *mddev);
617extern void md_write_start(struct mddev *mddev, struct bio *bi);
618extern void md_write_end(struct mddev *mddev);
619extern void md_done_sync(struct mddev *mddev, int blocks, int ok);
620extern void md_error(struct mddev *mddev, struct md_rdev *rdev);
621extern void md_finish_reshape(struct mddev *mddev);
622
623extern int mddev_congested(struct mddev *mddev, int bits);
624extern void md_flush_request(struct mddev *mddev, struct bio *bio);
625extern void md_super_write(struct mddev *mddev, struct md_rdev *rdev,
626 sector_t sector, int size, struct page *page);
627extern void md_super_wait(struct mddev *mddev);
628extern int sync_page_io(struct md_rdev *rdev, sector_t sector, int size,
629 struct page *page, int op, int op_flags,
630 bool metadata_op);
631extern void md_do_sync(struct md_thread *thread);
632extern void md_new_event(struct mddev *mddev);
633extern int md_allow_write(struct mddev *mddev);
634extern void md_wait_for_blocked_rdev(struct md_rdev *rdev, struct mddev *mddev);
635extern void md_set_array_sectors(struct mddev *mddev, sector_t array_sectors);
636extern int md_check_no_bitmap(struct mddev *mddev);
637extern int md_integrity_register(struct mddev *mddev);
638extern int md_integrity_add_rdev(struct md_rdev *rdev, struct mddev *mddev);
639extern int strict_strtoul_scaled(const char *cp, unsigned long *res, int scale);
640
641extern void mddev_init(struct mddev *mddev);
642extern int md_run(struct mddev *mddev);
643extern void md_stop(struct mddev *mddev);
644extern void md_stop_writes(struct mddev *mddev);
645extern int md_rdev_init(struct md_rdev *rdev);
646extern void md_rdev_clear(struct md_rdev *rdev);
647
648extern void mddev_suspend(struct mddev *mddev);
649extern void mddev_resume(struct mddev *mddev);
650extern struct bio *bio_clone_mddev(struct bio *bio, gfp_t gfp_mask,
651 struct mddev *mddev);
652extern struct bio *bio_alloc_mddev(gfp_t gfp_mask, int nr_iovecs,
653 struct mddev *mddev);
654
655extern void md_unplug(struct blk_plug_cb *cb, bool from_schedule);
656extern void md_reload_sb(struct mddev *mddev, int raid_disk);
657extern void md_update_sb(struct mddev *mddev, int force);
658extern void md_kick_rdev_from_array(struct md_rdev * rdev);
659struct md_rdev *md_find_rdev_nr_rcu(struct mddev *mddev, int nr);
660static inline int mddev_check_plugged(struct mddev *mddev)
661{
662 return !!blk_check_plugged(md_unplug, mddev,
663 sizeof(struct blk_plug_cb));
664}
665
666static inline void rdev_dec_pending(struct md_rdev *rdev, struct mddev *mddev)
667{
668 int faulty = test_bit(Faulty, &rdev->flags);
669 if (atomic_dec_and_test(&rdev->nr_pending) && faulty) {
670 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
671 md_wakeup_thread(mddev->thread);
672 }
673}
674
675extern struct md_cluster_operations *md_cluster_ops;
676static inline int mddev_is_clustered(struct mddev *mddev)
677{
678 return mddev->cluster_info && mddev->bitmap_info.nodes > 1;
679}
680#endif
681