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