]> git.ipfire.org Git - thirdparty/mdadm.git/blob - mdadm.h
8dcd8b86f35a2dce98626d8a4f6dc3d5db267c89
[thirdparty/mdadm.git] / mdadm.h
1 /*
2 * mdadm - manage Linux "md" devices aka RAID arrays.
3 *
4 * Copyright (C) 2001-2009 Neil Brown <neilb@suse.de>
5 *
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 *
21 * Author: Neil Brown
22 * Email: <neilb@suse.de>
23 */
24
25 #define _GNU_SOURCE
26 #define _FILE_OFFSET_BITS 64
27 #include <unistd.h>
28 #ifdef __GLIBC__
29 extern __off64_t lseek64 __P ((int __fd, __off64_t __offset, int __whence));
30 #elif !defined(lseek64)
31 # if defined(__NO_STAT64) || __WORDSIZE != 32
32 # define lseek64 lseek
33 # endif
34 #endif
35
36 #include <assert.h>
37 #include <sys/types.h>
38 #include <sys/stat.h>
39 #include <stdarg.h>
40 #include <stdint.h>
41 #include <stdlib.h>
42 #include <time.h>
43 #include <sys/time.h>
44 #include <getopt.h>
45 #include <fcntl.h>
46 #include <stdio.h>
47 #include <errno.h>
48 #include <string.h>
49 #include <syslog.h>
50 #include <stdbool.h>
51 #include <signal.h>
52 /* Newer glibc requires sys/sysmacros.h directly for makedev() */
53 #include <sys/sysmacros.h>
54 #ifdef __dietlibc__
55 #include <strings.h>
56 /* dietlibc has deprecated random and srandom!! */
57 #define random rand
58 #define srandom srand
59 #endif
60
61 #ifdef NO_COROSYNC
62 #define CS_OK 1
63 typedef uint64_t cmap_handle_t;
64 #else
65 #include <corosync/cmap.h>
66 #endif
67
68 #ifndef NO_DLM
69 #include <libdlm.h>
70 #include <errno.h>
71 #else
72 #define LKF_NOQUEUE 0x00000001
73 #define LKM_PWMODE 4
74 #define EUNLOCK 0x10002
75
76 typedef void *dlm_lshandle_t;
77
78 struct dlm_lksb {
79 int sb_status;
80 uint32_t sb_lkid;
81 char sb_flags;
82 char *sb_lvbptr;
83 };
84 #endif
85
86 #include <linux/kdev_t.h>
87 /*#include <linux/fs.h> */
88 #include <sys/mount.h>
89 #include <asm/types.h>
90 #include <sys/ioctl.h>
91 #define MD_MAJOR 9
92 #define MdpMinorShift 6
93
94 #ifndef BLKGETSIZE64
95 #define BLKGETSIZE64 _IOR(0x12,114,size_t) /* return device size in bytes (u64 *arg) */
96 #endif
97
98 #define DEFAULT_CHUNK 512
99 #define DEFAULT_BITMAP_CHUNK 4096
100 #define DEFAULT_BITMAP_DELAY 5
101 #define DEFAULT_MAX_WRITE_BEHIND 256
102
103 /* DEV_NUM_PREF is a subpath to numbered MD devices, e.g. /dev/md1 or directory name.
104 * DEV_NUM_PREF_LEN is a length with Null byte excluded.
105 */
106 #ifndef DEV_NUM_PREF
107 #define DEV_NUM_PREF "/dev/md"
108 #define DEV_NUM_PREF_LEN (sizeof(DEV_NUM_PREF) - 1)
109 #endif /* DEV_NUM_PREF */
110
111 /* DEV_MD_DIR points to named MD devices directory.
112 * DEV_MD_DIR_LEN is a length with Null byte excluded.
113 */
114 #ifndef DEV_MD_DIR
115 #define DEV_MD_DIR "/dev/md/"
116 #define DEV_MD_DIR_LEN (sizeof(DEV_MD_DIR) - 1)
117 #endif /* DEV_MD_DIR */
118
119 /* MAP_DIR should be somewhere that persists across the pivotroot
120 * from early boot to late boot.
121 * /run seems to have emerged as the best standard.
122 */
123 #ifndef MAP_DIR
124 #define MAP_DIR "/run/mdadm"
125 #endif /* MAP_DIR */
126 /* MAP_FILE is what we name the map file we put in MAP_DIR, in case you
127 * want something other than the default of "map"
128 */
129 #ifndef MAP_FILE
130 #define MAP_FILE "map"
131 #endif /* MAP_FILE */
132 /* MDMON_DIR is where pid and socket files used for communicating
133 * with mdmon normally live. Best is /var/run/mdadm as
134 * mdmon is needed at early boot then it needs to write there prior
135 * to /var/run being mounted read/write, and it also then needs to
136 * persist beyond when /var/run is mounter read-only. So, to be
137 * safe, the default is somewhere that is read/write early in the
138 * boot process and stays up as long as possible during shutdown.
139 */
140 #ifndef MDMON_DIR
141 #define MDMON_DIR "/run/mdadm"
142 #endif /* MDMON_DIR */
143
144 /* FAILED_SLOTS is where to save files storing recent removal of array
145 * member in order to allow future reuse of disk inserted in the same
146 * slot for array recovery
147 */
148 #ifndef FAILED_SLOTS_DIR
149 #define FAILED_SLOTS_DIR "/run/mdadm/failed-slots"
150 #endif /* FAILED_SLOTS */
151
152 #ifndef MDMON_SERVICE
153 #define MDMON_SERVICE "mdmon"
154 #endif /* MDMON_SERVICE */
155
156 #ifndef GROW_SERVICE
157 #define GROW_SERVICE "mdadm-grow-continue"
158 #endif /* GROW_SERVICE */
159
160 #include "md_u.h"
161 #include "md_p.h"
162 #include "bitmap.h"
163 #include "msg.h"
164
165 #include <endian.h>
166 /* Redhat don't like to #include <asm/byteorder.h>, and
167 * some time include <linux/byteorder/xxx_endian.h> isn't enough,
168 * and there is no standard conversion function so... */
169 /* And dietlibc doesn't think byteswap is ok, so.. */
170 /* #include <byteswap.h> */
171 #define __mdadm_bswap_16(x) (((x) & 0x00ffU) << 8 | \
172 ((x) & 0xff00U) >> 8)
173 #define __mdadm_bswap_32(x) (((x) & 0x000000ffU) << 24 | \
174 ((x) & 0xff000000U) >> 24 | \
175 ((x) & 0x0000ff00U) << 8 | \
176 ((x) & 0x00ff0000U) >> 8)
177 #define __mdadm_bswap_64(x) (((x) & 0x00000000000000ffULL) << 56 | \
178 ((x) & 0xff00000000000000ULL) >> 56 | \
179 ((x) & 0x000000000000ff00ULL) << 40 | \
180 ((x) & 0x00ff000000000000ULL) >> 40 | \
181 ((x) & 0x0000000000ff0000ULL) << 24 | \
182 ((x) & 0x0000ff0000000000ULL) >> 24 | \
183 ((x) & 0x00000000ff000000ULL) << 8 | \
184 ((x) & 0x000000ff00000000ULL) >> 8)
185
186 #if !defined(__KLIBC__)
187 #if BYTE_ORDER == LITTLE_ENDIAN
188 #define __cpu_to_le16(_x) (unsigned int)(_x)
189 #define __cpu_to_le32(_x) (unsigned int)(_x)
190 #define __cpu_to_le64(_x) (unsigned long long)(_x)
191 #define __le16_to_cpu(_x) (unsigned int)(_x)
192 #define __le32_to_cpu(_x) (unsigned int)(_x)
193 #define __le64_to_cpu(_x) (unsigned long long)(_x)
194
195 #define __cpu_to_be16(_x) __mdadm_bswap_16(_x)
196 #define __cpu_to_be32(_x) __mdadm_bswap_32(_x)
197 #define __cpu_to_be64(_x) __mdadm_bswap_64(_x)
198 #define __be16_to_cpu(_x) __mdadm_bswap_16(_x)
199 #define __be32_to_cpu(_x) __mdadm_bswap_32(_x)
200 #define __be64_to_cpu(_x) __mdadm_bswap_64(_x)
201 #elif BYTE_ORDER == BIG_ENDIAN
202 #define __cpu_to_le16(_x) __mdadm_bswap_16(_x)
203 #define __cpu_to_le32(_x) __mdadm_bswap_32(_x)
204 #define __cpu_to_le64(_x) __mdadm_bswap_64(_x)
205 #define __le16_to_cpu(_x) __mdadm_bswap_16(_x)
206 #define __le32_to_cpu(_x) __mdadm_bswap_32(_x)
207 #define __le64_to_cpu(_x) __mdadm_bswap_64(_x)
208
209 #define __cpu_to_be16(_x) (unsigned int)(_x)
210 #define __cpu_to_be32(_x) (unsigned int)(_x)
211 #define __cpu_to_be64(_x) (unsigned long long)(_x)
212 #define __be16_to_cpu(_x) (unsigned int)(_x)
213 #define __be32_to_cpu(_x) (unsigned int)(_x)
214 #define __be64_to_cpu(_x) (unsigned long long)(_x)
215 #else
216 # error "unknown endianness."
217 #endif
218 #endif /* __KLIBC__ */
219
220 /*
221 * Partially stolen from include/linux/unaligned/packed_struct.h
222 */
223 struct __una_u16 { __u16 x; } __attribute__ ((packed));
224 struct __una_u32 { __u32 x; } __attribute__ ((packed));
225
226 static inline __u16 __get_unaligned16(const void *p)
227 {
228 const struct __una_u16 *ptr = (const struct __una_u16 *)p;
229 return ptr->x;
230 }
231
232 static inline __u32 __get_unaligned32(const void *p)
233 {
234 const struct __una_u32 *ptr = (const struct __una_u32 *)p;
235 return ptr->x;
236 }
237
238 static inline void __put_unaligned16(__u16 val, void *p)
239 {
240 struct __una_u16 *ptr = (struct __una_u16 *)p;
241 ptr->x = val;
242 }
243
244 static inline void __put_unaligned32(__u32 val, void *p)
245 {
246 struct __una_u32 *ptr = (struct __una_u32 *)p;
247 ptr->x = val;
248 }
249
250 /*
251 * Check at compile time that something is of a particular type.
252 * Always evaluates to 1 so you may use it easily in comparisons.
253 */
254
255 #define typecheck(type,x) \
256 ({ type __dummy; \
257 typeof(x) __dummy2; \
258 (void)(&__dummy == &__dummy2); \
259 1; \
260 })
261
262 /*
263 * These inlines deal with timer wrapping correctly.
264 *
265 * time_after(a,b) returns true if the time a is after time b.
266 */
267
268 #define time_after(a,b) \
269 (typecheck(unsigned int, a) && \
270 typecheck(unsigned int, b) && \
271 ((int)((b) - (a)) < 0))
272
273 #define time_before(a,b) time_after(b,a)
274
275 /*
276 * min()/max()/clamp() macros that also do
277 * strict type-checking.. See the
278 * "unnecessary" pointer comparison.
279 */
280 #define min(x, y) ({ \
281 typeof(x) _min1 = (x); \
282 typeof(y) _min2 = (y); \
283 (void) (&_min1 == &_min2); \
284 _min1 < _min2 ? _min1 : _min2; })
285
286 #define max(x, y) ({ \
287 typeof(x) _max1 = (x); \
288 typeof(y) _max2 = (y); \
289 (void) (&_max1 == &_max2); \
290 _max1 > _max2 ? _max1 : _max2; })
291
292 #define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
293
294 #define KIB_TO_BYTES(x) ((x) << 10)
295 #define SEC_TO_BYTES(x) ((x) << 9)
296
297 /**
298 * This is true for native and DDF, IMSM allows 16.
299 */
300 #define MD_NAME_MAX 32
301
302 extern const char Name[];
303
304 struct md_bb_entry {
305 unsigned long long sector;
306 int length;
307 };
308
309 struct md_bb {
310 int supported;
311 int count;
312 struct md_bb_entry *entries;
313 };
314
315 /* general information that might be extracted from a superblock */
316 struct mdinfo {
317 mdu_array_info_t array;
318 mdu_disk_info_t disk;
319 __u64 events;
320 int uuid[4];
321 char name[33];
322 unsigned long long data_offset;
323 unsigned long long new_data_offset;
324 unsigned long long component_size; /* same as array.size, except in
325 * sectors and up to 64bits.
326 */
327 unsigned long long custom_array_size; /* size for non-default sized
328 * arrays (in sectors)
329 */
330 #define NO_RESHAPE 0
331 #define VOLUME_RESHAPE 1
332 #define CONTAINER_RESHAPE 2
333 #define RESHAPE_NO_BACKUP 16 /* Mask 'or'ed in */
334 int reshape_active;
335 unsigned long long reshape_progress;
336 int recovery_blocked; /* for external metadata it
337 * indicates that there is
338 * reshape in progress in
339 * container,
340 * for native metadata it is
341 * reshape_active field mirror
342 */
343 int journal_device_required;
344 int journal_clean;
345
346 enum {
347 CONSISTENCY_POLICY_UNKNOWN,
348 CONSISTENCY_POLICY_NONE,
349 CONSISTENCY_POLICY_RESYNC,
350 CONSISTENCY_POLICY_BITMAP,
351 CONSISTENCY_POLICY_JOURNAL,
352 CONSISTENCY_POLICY_PPL,
353 } consistency_policy;
354
355 /* During reshape we can sometimes change the data_offset to avoid
356 * over-writing still-valid data. We need to know if there is space.
357 * So getinfo_super will fill in space_before and space_after in sectors.
358 * data_offset can be increased or decreased by this amount.
359 */
360 unsigned long long space_before, space_after;
361 union {
362 unsigned long long resync_start; /* per-array resync position */
363 unsigned long long recovery_start; /* per-device rebuild position */
364 #define MaxSector (~0ULL) /* resync/recovery complete position */
365 };
366 long bitmap_offset; /* 0 == none, 1 == a file */
367 unsigned int ppl_size;
368 int ppl_offset;
369 unsigned long long ppl_sector;
370 unsigned long safe_mode_delay; /* ms delay to mark clean */
371 int new_level, delta_disks, new_layout, new_chunk;
372 int errors;
373 unsigned long cache_size; /* size of raid456 stripe cache*/
374 int mismatch_cnt;
375 char text_version[50];
376
377 int container_member; /* for assembling external-metatdata arrays
378 * This is to be used internally by metadata
379 * handler only */
380 char sys_name[32];
381 struct mdinfo *devs;
382 struct mdinfo *next;
383
384 /* Device info for mdmon: */
385 int recovery_fd;
386 int state_fd;
387 int bb_fd;
388 int ubb_fd;
389 #define DS_FAULTY 1
390 #define DS_INSYNC 2
391 #define DS_WRITE_MOSTLY 4
392 #define DS_SPARE 8
393 #define DS_BLOCKED 16
394 #define DS_REMOVE 1024
395 #define DS_UNBLOCK 2048
396 int prev_state, curr_state, next_state;
397
398 /* info read from sysfs */
399 enum {
400 ARRAY_CLEAR,
401 ARRAY_INACTIVE,
402 ARRAY_SUSPENDED,
403 ARRAY_READONLY,
404 ARRAY_READ_AUTO,
405 ARRAY_CLEAN,
406 ARRAY_ACTIVE,
407 ARRAY_WRITE_PENDING,
408 ARRAY_ACTIVE_IDLE,
409 ARRAY_BROKEN,
410 ARRAY_UNKNOWN_STATE,
411 } array_state;
412 struct md_bb bb;
413 };
414
415 struct createinfo {
416 int uid;
417 int gid;
418 int autof;
419 int mode;
420 int names;
421 int bblist;
422 struct supertype *supertype;
423 };
424
425 struct spare_criteria {
426 unsigned long long min_size;
427 unsigned int sector_size;
428 };
429
430 typedef enum mdadm_status {
431 MDADM_STATUS_SUCCESS = 0,
432 MDADM_STATUS_ERROR,
433 MDADM_STATUS_UNDEF,
434 } mdadm_status_t;
435
436 enum mode {
437 ASSEMBLE=1,
438 BUILD,
439 CREATE,
440 MANAGE,
441 MISC,
442 MONITOR,
443 GROW,
444 INCREMENTAL,
445 AUTODETECT,
446 mode_count
447 };
448
449 extern char short_options[];
450 extern char short_monitor_options[];
451 extern char short_bitmap_options[];
452 extern char short_bitmap_auto_options[];
453 extern struct option long_options[];
454 extern char Version[], Usage[], Help[], OptionHelp[],
455 *mode_help[],
456 Help_create[], Help_build[], Help_assemble[], Help_grow[],
457 Help_incr[],
458 Help_manage[], Help_misc[], Help_monitor[], Help_config[];
459
460 /* for option that don't have short equivilents, we assign arbitrary
461 * numbers later than any 'short' character option.
462 */
463 enum special_options {
464 AssumeClean = 300,
465 WriteZeroes,
466 BitmapChunk,
467 WriteBehind,
468 ReAdd,
469 NoDegraded,
470 Sparc22,
471 BackupFile,
472 HomeHost,
473 AutoHomeHost,
474 AutoDetect,
475 Waitclean,
476 DetailPlatform,
477 KillSubarray,
478 UpdateSubarray,
479 IncrementalPath,
480 NoSharing,
481 HelpOptions,
482 Brief,
483 NoDevices,
484 ManageOpt,
485 Add,
486 AddSpare,
487 AddJournal,
488 Remove,
489 Fail,
490 Replace,
491 With,
492 MiscOpt,
493 WaitOpt,
494 ConfigFile,
495 ChunkSize,
496 WriteMostly,
497 FailFast,
498 NoFailFast,
499 Layout,
500 Auto,
501 Force,
502 SuperMinor,
503 EMail,
504 ProgramOpt,
505 Increment,
506 Fork,
507 Bitmap,
508 RebuildMapOpt,
509 InvalidBackup,
510 UdevRules,
511 FreezeReshape,
512 Continue,
513 OffRootOpt,
514 Prefer,
515 KillOpt,
516 DataOffset,
517 ExamineBB,
518 Dump,
519 Restore,
520 Action,
521 Nodes,
522 ClusterName,
523 ClusterConfirm,
524 WriteJournal,
525 ConsistencyPolicy,
526 };
527
528 enum update_opt {
529 UOPT_NAME = 1,
530 UOPT_PPL,
531 UOPT_NO_PPL,
532 UOPT_BITMAP,
533 UOPT_NO_BITMAP,
534 UOPT_SUBARRAY_ONLY,
535 UOPT_SPARC22,
536 UOPT_SUPER_MINOR,
537 UOPT_SUMMARIES,
538 UOPT_RESYNC,
539 UOPT_UUID,
540 UOPT_HOMEHOST,
541 UOPT_HOME_CLUSTER,
542 UOPT_NODES,
543 UOPT_DEVICESIZE,
544 UOPT_BBL,
545 UOPT_NO_BBL,
546 UOPT_FORCE_NO_BBL,
547 UOPT_METADATA,
548 UOPT_REVERT_RESHAPE,
549 UOPT_LAYOUT_ORIGINAL,
550 UOPT_LAYOUT_ALTERNATE,
551 UOPT_LAYOUT_UNSPECIFIED,
552 UOPT_BYTEORDER,
553 UOPT_HELP,
554 UOPT_USER_ONLY,
555 /*
556 * Code specific options, cannot be set by the user
557 */
558 UOPT_SPEC_FORCE_ONE,
559 UOPT_SPEC_FORCE_ARRAY,
560 UOPT_SPEC_ASSEMBLE,
561 UOPT_SPEC_LINEAR_GROW_NEW,
562 UOPT_SPEC_LINEAR_GROW_UPDATE,
563 UOPT_SPEC__RESHAPE_PROGRESS,
564 UOPT_SPEC_WRITEMOSTLY,
565 UOPT_SPEC_READWRITE,
566 UOPT_SPEC_FAILFAST,
567 UOPT_SPEC_NOFAILFAST,
568 UOPT_SPEC_REVERT_RESHAPE_NOBACKUP,
569 UOPT_UNDEFINED
570 };
571 extern void fprint_update_options(FILE *outf, enum update_opt update_mode);
572
573 enum prefix_standard {
574 JEDEC,
575 IEC
576 };
577
578 enum bitmap_update {
579 NoUpdate,
580 NameUpdate,
581 NodeNumUpdate,
582 };
583
584 enum flag_mode {
585 FlagDefault, FlagSet, FlagClear,
586 };
587
588 /* structures read from config file */
589 /* List of mddevice names and identifiers
590 * Identifiers can be:
591 * uuid=128-hex-uuid
592 * super-minor=decimal-minor-number-from-superblock
593 * devices=comma,separated,list,of,device,names,with,wildcards
594 *
595 * If multiple fields are present, the intersection of all matching
596 * devices is considered
597 */
598 #define UnSet (0xfffe)
599 struct mddev_ident {
600 char *devname;
601
602 int uuid_set;
603 int uuid[4];
604 char name[MD_NAME_MAX + 1];
605
606 int super_minor;
607
608 char *devices; /* comma separated list of device
609 * names with wild cards
610 */
611 int level;
612 int raid_disks;
613 int spare_disks;
614 struct supertype *st;
615 int autof; /* 1 for normal, 2 for partitioned */
616 char *spare_group;
617 char *bitmap_file;
618 int bitmap_fd;
619
620 char *container; /* /dev/whatever name of container, or
621 * uuid of container. You would expect
622 * this to be the 'devname' or UUID
623 * of some other entry.
624 */
625 char *member; /* subarray within a container */
626
627 struct mddev_ident *next;
628 union {
629 /* fields needed by different users of this structure */
630 int assembled; /* set when assembly succeeds */
631 };
632 };
633
634 struct context {
635 int readonly;
636 int runstop;
637 int verbose;
638 int brief;
639 int no_devices;
640 int force;
641 char *homehost;
642 int require_homehost;
643 char *prefer;
644 int export;
645 int test;
646 char *subarray;
647 enum update_opt update;
648 int scan;
649 int SparcAdjust;
650 int autof;
651 int delay;
652 int freeze_reshape;
653 char *backup_file;
654 int invalid_backup;
655 char *action;
656 int nodes;
657 char *homecluster;
658 };
659
660 struct shape {
661 int raiddisks;
662 int sparedisks;
663 int journaldisks;
664 int level;
665 int layout;
666 char *layout_str;
667 int chunk;
668 int bitmap_chunk;
669 char *bitmap_file;
670 int assume_clean;
671 bool write_zeroes;
672 int write_behind;
673 unsigned long long size;
674 unsigned long long data_offset;
675 int consistency_policy;
676 };
677
678 /* List of device names - wildcards expanded */
679 struct mddev_dev {
680 char *devname;
681 int disposition; /* 'a' for add, 'r' for remove, 'f' for fail,
682 * 'A' for re_add.
683 * Not set for names read from .config
684 */
685 enum flag_mode writemostly;
686 enum flag_mode failfast;
687 int used; /* set when used */
688 long long data_offset;
689 struct mddev_dev *next;
690 };
691
692 typedef struct mapping {
693 char *name;
694 int num;
695 } mapping_t;
696
697 struct mdstat_ent {
698 char devnm[32];
699 int active;
700 char *level;
701 char *pattern; /* U for up, _ for down */
702 int percent; /* -1 if no resync */
703 int resync; /* 3 if check, 2 if reshape, 1 if resync, 0 if recovery */
704 int devcnt;
705 int raid_disks;
706 char * metadata_version;
707 struct dev_member {
708 char *name;
709 struct dev_member *next;
710 } *members;
711 struct mdstat_ent *next;
712 };
713
714 extern struct mdstat_ent *mdstat_read(int hold, int start);
715 extern void mdstat_close(void);
716 extern void free_mdstat(struct mdstat_ent *ms);
717 extern int mdstat_wait(int seconds);
718 extern void mdstat_wait_fd(int fd, const sigset_t *sigmask);
719 extern int mddev_busy(char *devnm);
720 extern struct mdstat_ent *mdstat_by_component(char *name);
721 extern struct mdstat_ent *mdstat_by_subdev(char *subdev, char *container);
722
723 struct map_ent {
724 struct map_ent *next;
725 char devnm[32];
726 char metadata[20];
727 int uuid[4];
728 int bad;
729 char *path;
730 };
731 extern int map_update(struct map_ent **mpp, char *devnm, char *metadata,
732 int uuid[4], char *path);
733 extern void map_remove(struct map_ent **map, char *devnm);
734 extern struct map_ent *map_by_uuid(struct map_ent **map, int uuid[4]);
735 extern struct map_ent *map_by_devnm(struct map_ent **map, char *devnm);
736 extern void map_free(struct map_ent *map);
737 extern struct map_ent *map_by_name(struct map_ent **map, char *name);
738 extern void map_read(struct map_ent **melp);
739 extern int map_write(struct map_ent *mel);
740 extern void map_delete(struct map_ent **mapp, char *devnm);
741 extern void map_add(struct map_ent **melp,
742 char *devnm, char *metadata, int uuid[4], char *path);
743 extern int map_lock(struct map_ent **melp);
744 extern void map_unlock(struct map_ent **melp);
745 extern void map_fork(void);
746
747 /* various details can be requested */
748 enum sysfs_read_flags {
749 GET_LEVEL = (1 << 0),
750 GET_LAYOUT = (1 << 1),
751 GET_COMPONENT = (1 << 2),
752 GET_CHUNK = (1 << 3),
753 GET_CACHE = (1 << 4),
754 GET_MISMATCH = (1 << 5),
755 GET_VERSION = (1 << 6),
756 GET_DISKS = (1 << 7),
757 GET_SAFEMODE = (1 << 9),
758 GET_BITMAP_LOCATION = (1 << 10),
759
760 GET_DEVS = (1 << 20), /* gets role, major, minor */
761 GET_OFFSET = (1 << 21),
762 GET_SIZE = (1 << 22),
763 GET_STATE = (1 << 23),
764 GET_ERROR = (1 << 24),
765 GET_ARRAY_STATE = (1 << 25),
766 GET_CONSISTENCY_POLICY = (1 << 26),
767 GET_DEVS_ALL = (1 << 27),
768 };
769
770 /* If fd >= 0, get the array it is open on,
771 * else use devnm.
772 */
773 extern int sysfs_open(char *devnm, char *devname, char *attr);
774 extern int sysfs_init(struct mdinfo *mdi, int fd, char *devnm);
775 extern void sysfs_init_dev(struct mdinfo *mdi, dev_t devid);
776 extern void sysfs_free(struct mdinfo *sra);
777 extern struct mdinfo *sysfs_read(int fd, char *devnm, unsigned long options);
778 extern int sysfs_attr_match(const char *attr, const char *str);
779 extern int sysfs_match_word(const char *word, char **list);
780 extern int sysfs_set_str(struct mdinfo *sra, struct mdinfo *dev,
781 char *name, char *val);
782 extern int sysfs_set_num(struct mdinfo *sra, struct mdinfo *dev,
783 char *name, unsigned long long val);
784 extern int sysfs_set_num_signed(struct mdinfo *sra, struct mdinfo *dev,
785 char *name, long long val);
786 extern int sysfs_uevent(struct mdinfo *sra, char *event);
787 extern int sysfs_get_fd(struct mdinfo *sra, struct mdinfo *dev,
788 char *name);
789 extern int sysfs_fd_get_ll(int fd, unsigned long long *val);
790 extern int sysfs_get_ll(struct mdinfo *sra, struct mdinfo *dev,
791 char *name, unsigned long long *val);
792 extern int sysfs_fd_get_two(int fd, unsigned long long *v1, unsigned long long *v2);
793 extern int sysfs_get_two(struct mdinfo *sra, struct mdinfo *dev,
794 char *name, unsigned long long *v1, unsigned long long *v2);
795 extern int sysfs_fd_get_str(int fd, char *val, int size);
796 extern int sysfs_attribute_available(struct mdinfo *sra, struct mdinfo *dev,
797 char *name);
798 extern int sysfs_get_str(struct mdinfo *sra, struct mdinfo *dev,
799 char *name, char *val, int size);
800 extern int sysfs_set_safemode(struct mdinfo *sra, unsigned long ms);
801 extern int sysfs_set_array(struct mdinfo *info, int vers);
802 extern int sysfs_add_disk(struct mdinfo *sra, struct mdinfo *sd, int resume);
803 extern int sysfs_disk_to_scsi_id(int fd, __u32 *id);
804 extern int sysfs_unique_holder(char *devnm, long rdev);
805 extern int sysfs_freeze_array(struct mdinfo *sra);
806 extern int sysfs_wait(int fd, int *msec);
807 extern int load_sys(char *path, char *buf, int len);
808 extern int zero_disk_range(int fd, unsigned long long sector, size_t count);
809 extern int reshape_prepare_fdlist(char *devname,
810 struct mdinfo *sra,
811 int raid_disks,
812 int nrdisks,
813 unsigned long blocks,
814 char *backup_file,
815 int *fdlist,
816 unsigned long long *offsets);
817 extern void reshape_free_fdlist(int *fdlist,
818 unsigned long long *offsets,
819 int size);
820 extern int reshape_open_backup_file(char *backup,
821 int fd,
822 char *devname,
823 long blocks,
824 int *fdlist,
825 unsigned long long *offsets,
826 char *sysfs_name,
827 int restart);
828 extern unsigned long compute_backup_blocks(int nchunk, int ochunk,
829 unsigned int ndata, unsigned int odata);
830 extern char *locate_backup(char *name);
831 extern char *make_backup(char *name);
832
833 extern int save_stripes(int *source, unsigned long long *offsets,
834 int raid_disks, int chunk_size, int level, int layout,
835 int nwrites, int *dest,
836 unsigned long long start, unsigned long long length,
837 char *buf);
838 extern int restore_stripes(int *dest, unsigned long long *offsets,
839 int raid_disks, int chunk_size, int level, int layout,
840 int source, unsigned long long read_offset,
841 unsigned long long start, unsigned long long length,
842 char *src_buf);
843
844 #ifndef Sendmail
845 #define Sendmail "/usr/lib/sendmail -t"
846 #endif
847
848 #define SYSLOG_FACILITY LOG_DAEMON
849 extern char *map_num_s(mapping_t *map, int num);
850 extern char *map_num(mapping_t *map, int num);
851 extern int map_name(mapping_t *map, char *name);
852 extern mapping_t r0layout[], r5layout[], r6layout[],
853 pers[], modes[], faultylayout[];
854 extern mapping_t consistency_policies[], sysfs_array_states[], update_options[];
855
856 extern char *map_dev_preferred(int major, int minor, int create,
857 char *prefer);
858 static inline char *map_dev(int major, int minor, int create)
859 {
860 return map_dev_preferred(major, minor, create, NULL);
861 }
862
863 /**
864 * is_fd_valid() - check file descriptor.
865 * @fd: file descriptor.
866 *
867 * The function checks if @fd is nonnegative integer and shall be used only
868 * to verify open() result.
869 */
870 static inline int is_fd_valid(int fd)
871 {
872 return (fd > -1);
873 }
874
875 /**
876 * is_level456() - check whether given level is between inclusive 4 and 6.
877 * @level: level to check.
878 *
879 * Return: true if condition is met, false otherwise
880 */
881 static inline bool is_level456(int level)
882 {
883 return (level >= 4 && level <= 6);
884 }
885
886 /**
887 * close_fd() - verify, close and unset file descriptor.
888 * @fd: pointer to file descriptor.
889 *
890 * The function closes and invalidates file descriptor if appropriative. It
891 * ignores incorrect file descriptor quitely to simplify error handling.
892 */
893 static inline void close_fd(int *fd)
894 {
895 if (is_fd_valid(*fd) && close(*fd) == 0)
896 *fd = -1;
897 }
898
899 struct active_array;
900 struct metadata_update;
901
902 /* 'struct reshape' records the intermediate states of
903 * a general reshape.
904 * The starting geometry is converted to the 'before' geometry
905 * by at most an atomic level change. They could be the same.
906 * Similarly the 'after' geometry is converted to the final
907 * geometry by at most a level change.
908 * Note that 'before' and 'after' must have the same level.
909 * 'blocks' is the minimum number of sectors for a reshape unit.
910 * This will be a multiple of the stripe size in each of the
911 * 'before' and 'after' geometries.
912 * If 'blocks' is 0, no restriping is necessary.
913 * 'min_offset_change' is the minimum change to data_offset to
914 * allow the reshape to happen. It is at least the larger of
915 * the old and new chunk sizes, and typically the same as 'blocks'
916 * divided by number of data disks.
917 */
918 struct reshape {
919 int level;
920 int parity; /* number of parity blocks/devices */
921 struct {
922 int layout;
923 int data_disks;
924 } before, after;
925 unsigned long long backup_blocks;
926 unsigned long long min_offset_change;
927 unsigned long long stripes; /* number of old stripes that comprise 'blocks'*/
928 unsigned long long new_size; /* New size of array in sectors */
929 };
930
931 /* A superswitch provides entry point to a metadata handler.
932 *
933 * The superswitch primarily operates on some "metadata" that
934 * is accessed via the 'supertype'.
935 * This metadata has one of three possible sources.
936 * 1/ It is read from a single device. In this case it may not completely
937 * describe the array or arrays as some information might be on other
938 * devices.
939 * 2/ It is read from all devices in a container. In this case all
940 * information is present.
941 * 3/ It is created by ->init_super / ->add_to_super. In this case it will
942 * be complete once enough ->add_to_super calls have completed.
943 *
944 * When creating an array inside a container, the metadata will be
945 * formed by a combination of 2 and 3. The metadata or the array is read,
946 * then new information is added.
947 *
948 * The metadata must sometimes have a concept of a 'current' array
949 * and a 'current' device.
950 * The 'current' array is set by init_super to be the newly created array,
951 * or is set by super_by_fd when it finds it is looking at an array inside
952 * a container.
953 *
954 * The 'current' device is either the device that the metadata was read from
955 * in case 1, or the last device added by add_to_super in case 3.
956 * Case 2 does not identify a 'current' device.
957 */
958 extern struct superswitch {
959
960 /* Used to report details of metadata read from a component
961 * device. ->load_super has been called.
962 */
963 void (*examine_super)(struct supertype *st, char *homehost);
964 void (*brief_examine_super)(struct supertype *st, int verbose);
965 void (*brief_examine_subarrays)(struct supertype *st, int verbose);
966 void (*export_examine_super)(struct supertype *st);
967 int (*examine_badblocks)(struct supertype *st, int fd, char *devname);
968 int (*copy_metadata)(struct supertype *st, int from, int to);
969
970 /* Used to report details of an active array.
971 * ->load_super was possibly given a 'component' string.
972 */
973 void (*detail_super)(struct supertype *st, char *homehost,
974 char *subarray);
975 void (*brief_detail_super)(struct supertype *st, char *subarray);
976 void (*export_detail_super)(struct supertype *st);
977
978 /* Optional: platform hardware / firmware details */
979 int (*detail_platform)(int verbose, int enumerate_only, char *controller_path);
980 int (*export_detail_platform)(int verbose, char *controller_path);
981
982 /* Used:
983 * to get uuid to storing in bitmap metadata
984 * and 'reshape' backup-data metadata
985 * To see if a device is being re-added to an array it was part of.
986 */
987 void (*uuid_from_super)(struct supertype *st, int uuid[4]);
988
989 /* Extract generic details from metadata. This could be details about
990 * the container, or about an individual array within the container.
991 * The determination is made either by:
992 * load_super being given a 'component' string.
993 * validate_geometry determining what to create.
994 * The info includes both array information and device information.
995 * The particular device should be:
996 * The last device added by add_to_super
997 * The device the metadata was loaded from by load_super
998 * If 'map' is present, then it is an array raid_disks long
999 * (raid_disk must already be set and correct) and it is filled
1000 * with 1 for slots that are thought to be active and 0 for slots which
1001 * appear to be failed/missing.
1002 * *info is zeroed out before data is added.
1003 */
1004 void (*getinfo_super)(struct supertype *st, struct mdinfo *info, char *map);
1005 struct mdinfo *(*getinfo_super_disks)(struct supertype *st);
1006 /* Check if the given metadata is flagged as belonging to "this"
1007 * host. 0 for 'no', 1 for 'yes', -1 for "Don't record homehost"
1008 */
1009 int (*match_home)(struct supertype *st, char *homehost);
1010
1011 /* Make one of several generic modifications to metadata
1012 * prior to assembly (or other times).
1013 * sparc2.2 - first bug in early 0.90 metadata
1014 * super-minor - change name of 0.90 metadata
1015 * summaries - 'correct' any redundant data
1016 * resync - mark array as dirty to trigger a resync.
1017 * uuid - set new uuid - only 0.90 or 1.x
1018 * name - change the name of the array (where supported)
1019 * homehost - change which host this array is tied to.
1020 * devicesize - If metadata is at start of device, change recorded
1021 * device size to match actual device size
1022 * byteorder - swap bytes for 0.90 metadata
1023 *
1024 * force-one - mark that device as uptodate, not old or failed.
1025 * force-array - mark array as clean if it would not otherwise
1026 * assemble
1027 * assemble - not sure how this is different from force-one...
1028 * linear-grow-new - add a new device to a linear array, but don't
1029 * change the size: so superblock still matches
1030 * linear-grow-update - now change the size of the array.
1031 * writemostly - set the WriteMostly1 bit in the superblock devflags
1032 * readwrite - clear the WriteMostly1 bit in the superblock devflags
1033 * failfast - set the FailFast1 bit in the superblock
1034 * nofailfast - clear the FailFast1 bit
1035 * no-bitmap - clear any record that a bitmap is present.
1036 * bbl - add a bad-block-log if possible
1037 * no-bbl - remove any bad-block-log is it is empty.
1038 * force-no-bbl - remove any bad-block-log even if empty.
1039 * revert-reshape - If a reshape is in progress, modify metadata so
1040 * it will resume going in the opposite direction.
1041 */
1042 int (*update_super)(struct supertype *st, struct mdinfo *info,
1043 enum update_opt update,
1044 char *devname, int verbose,
1045 int uuid_set, char *homehost);
1046
1047 /* Create new metadata for new array as described. This could
1048 * be a new container, or an array in a pre-existing container.
1049 * Also used to zero metadata prior to writing it to invalidate old
1050 * metadata.
1051 */
1052 int (*init_super)(struct supertype *st, mdu_array_info_t *info,
1053 struct shape *s, char *name,
1054 char *homehost, int *uuid,
1055 unsigned long long data_offset);
1056
1057 /* update the metadata to include new device, either at create or
1058 * when hot-adding a spare.
1059 */
1060 int (*add_to_super)(struct supertype *st, mdu_disk_info_t *dinfo,
1061 int fd, char *devname,
1062 unsigned long long data_offset);
1063 /* update the metadata to delete a device,
1064 * when hot-removing.
1065 */
1066 int (*remove_from_super)(struct supertype *st, mdu_disk_info_t *dinfo);
1067
1068 /* Write metadata to one device when fixing problems or adding
1069 * a new device.
1070 */
1071 int (*store_super)(struct supertype *st, int fd);
1072
1073 /* Write all metadata for this array.
1074 */
1075 int (*write_init_super)(struct supertype *st);
1076 /* Check if metadata read from one device is compatible with an array,
1077 * used when assembling an array, or pseudo-assembling was with
1078 * "--examine --brief"
1079 * If "st" has not yet been loaded the superblock from, "tst" is
1080 * moved in, otherwise the superblock in 'st' is compared with
1081 * 'tst'.
1082 */
1083 int (*compare_super)(struct supertype *st, struct supertype *tst,
1084 int verbose);
1085 /* Load metadata from a single device. If 'devname' is not NULL
1086 * print error messages as appropriate */
1087 int (*load_super)(struct supertype *st, int fd, char *devname);
1088 /* 'fd' is a 'container' md array - load array metadata from the
1089 * whole container.
1090 */
1091 int (*load_container)(struct supertype *st, int fd, char *devname);
1092 /* If 'arg' is a valid name of this metadata type, allocate and
1093 * return a 'supertype' for the particular minor version */
1094 struct supertype * (*match_metadata_desc)(char *arg);
1095 /* If a device has the given size, and the data_offset has been
1096 * requested - work out how much space is available for data.
1097 * This involves adjusting for reserved space (e.g. bitmaps)
1098 * and for any rounding.
1099 * 'mdadm' only calls this for existing arrays where a possible
1100 * spare is being added. However some super-handlers call it
1101 * internally from validate_geometry when creating an array.
1102 */
1103 __u64 (*avail_size)(struct supertype *st, __u64 size,
1104 unsigned long long data_offset);
1105 /*
1106 * Return spare criteria for array:
1107 * - minimum disk size can be used in array;
1108 * - sector size can be used in array.
1109 * Return values: 0 - for success and -EINVAL on error.
1110 */
1111 int (*get_spare_criteria)(struct supertype *st,
1112 struct spare_criteria *sc);
1113 /* Find somewhere to put a bitmap - possibly auto-size it - and
1114 * update the metadata to record this. The array may be newly
1115 * created, in which case data_size may be updated, or it might
1116 * already exist. Metadata handler can know if init_super
1117 * has been called, but not write_init_super.
1118 * 0: Success
1119 * -Exxxx: On error
1120 */
1121 int (*add_internal_bitmap)(struct supertype *st, int *chunkp,
1122 int delay, int write_behind,
1123 unsigned long long size, int may_change, int major);
1124 /* Perform additional setup required to activate a bitmap.
1125 */
1126 int (*set_bitmap)(struct supertype *st, struct mdinfo *info);
1127 /* Seek 'fd' to start of write-intent-bitmap. Must be an
1128 * md-native format bitmap
1129 */
1130 int (*locate_bitmap)(struct supertype *st, int fd, int node_num);
1131 /* if add_internal_bitmap succeeded for existing array, this
1132 * writes it out.
1133 */
1134 int (*write_bitmap)(struct supertype *st, int fd, enum bitmap_update update);
1135 /* Free the superblock and any other allocated data */
1136 void (*free_super)(struct supertype *st);
1137
1138 /* validate_geometry is called with an st returned by
1139 * match_metadata_desc.
1140 * It should check that the geometry described is compatible with
1141 * the metadata type. It will be called repeatedly as devices
1142 * added to validate changing size and new devices. If there are
1143 * inter-device dependencies, it should record sufficient details
1144 * so these can be validated.
1145 * Both 'size' and '*freesize' are in sectors. chunk is KiB.
1146 * Return value is:
1147 * 1: everything is OK
1148 * 0: not OK for some reason - if 'verbose', then error was reported.
1149 * -1: st->sb was NULL, 'subdev' is a member of a container of this
1150 * type, but array is not acceptable for some reason
1151 * message was reported even if verbose is 0.
1152 */
1153 int (*validate_geometry)(struct supertype *st, int level, int layout,
1154 int raiddisks,
1155 int *chunk, unsigned long long size,
1156 unsigned long long data_offset,
1157 char *subdev, unsigned long long *freesize,
1158 int consistency_policy, int verbose);
1159
1160 /* Return a linked list of 'mdinfo' structures for all arrays
1161 * in the container. For non-containers, it is like
1162 * getinfo_super with an allocated mdinfo.*/
1163 struct mdinfo *(*container_content)(struct supertype *st, char *subarray);
1164 /* query the supertype for default geometry */
1165 void (*default_geometry)(struct supertype *st, int *level, int *layout, int *chunk); /* optional */
1166 /* Permit subarray's to be deleted from inactive containers */
1167 int (*kill_subarray)(struct supertype *st,
1168 char *subarray_id); /* optional */
1169 /**
1170 * update_subarray() - Permit subarray to be modified.
1171 * @st: Supertype.
1172 * @subarray: Subarray name.
1173 * @update: Update option.
1174 * @ident: Optional identifiers.
1175 */
1176 int (*update_subarray)(struct supertype *st, char *subarray,
1177 enum update_opt update, struct mddev_ident *ident);
1178 /* Check if reshape is supported for this external format.
1179 * st is obtained from super_by_fd() where st->subarray[0] is
1180 * initialized to indicate if reshape is being performed at the
1181 * container or subarray level
1182 */
1183 #define APPLY_METADATA_CHANGES 1
1184 #define ROLLBACK_METADATA_CHANGES 0
1185
1186 int (*reshape_super)(struct supertype *st,
1187 unsigned long long size, int level,
1188 int layout, int chunksize, int raid_disks,
1189 int delta_disks, char *backup, char *dev,
1190 int direction,
1191 int verbose); /* optional */
1192 int (*manage_reshape)( /* optional */
1193 int afd, struct mdinfo *sra, struct reshape *reshape,
1194 struct supertype *st, unsigned long blocks,
1195 int *fds, unsigned long long *offsets,
1196 int dests, int *destfd, unsigned long long *destoffsets);
1197
1198 /* for mdmon */
1199 int (*open_new)(struct supertype *c, struct active_array *a,
1200 int inst);
1201
1202 /* Tell the metadata handler the current state of the array.
1203 * This covers whether it is known to be consistent (no pending writes)
1204 * and how far along a resync is known to have progressed
1205 * (in a->resync_start).
1206 * resync status is really irrelevant if the array is not consistent,
1207 * but some metadata (DDF!) have a place to record the distinction.
1208 * If 'consistent' is '2', then the array can mark it dirty if a
1209 * resync/recovery/whatever is required, or leave it clean if not.
1210 * Return value is 0 dirty (not consistent) and 1 if clean.
1211 * it is only really important if consistent is passed in as '2'.
1212 */
1213 int (*set_array_state)(struct active_array *a, int consistent);
1214
1215 /* When the state of a device might have changed, we call set_disk to
1216 * tell the metadata what the current state is.
1217 * Typically this happens on spare->in_sync and (spare|in_sync)->faulty
1218 * transitions.
1219 * set_disk might be called when the state of the particular disk has
1220 * not in fact changed.
1221 */
1222 void (*set_disk)(struct active_array *a, int n, int state);
1223 void (*sync_metadata)(struct supertype *st);
1224 void (*process_update)(struct supertype *st,
1225 struct metadata_update *update);
1226 /* Prepare updates allocates extra memory that might be
1227 * needed. If the update cannot be understood, return 0.
1228 */
1229 int (*prepare_update)(struct supertype *st,
1230 struct metadata_update *update);
1231
1232 /* activate_spare will check if the array is degraded and, if it
1233 * is, try to find some spare space in the container.
1234 * On success, it add appropriate updates (For process_update) to
1235 * to the 'updates' list and returns a list of 'mdinfo' identifying
1236 * the device, or devices as there might be multiple missing
1237 * devices and multiple spares available.
1238 */
1239 struct mdinfo *(*activate_spare)(struct active_array *a,
1240 struct metadata_update **updates);
1241 /*
1242 * Return statically allocated string that represents metadata specific
1243 * controller domain of the disk. The domain is used in disk domain
1244 * matching functions. Disks belong to the same domain if the they have
1245 * the same domain from mdadm.conf and belong the same metadata domain.
1246 * Returning NULL or not providing this handler means that metadata
1247 * does not distinguish the differences between disks that belong to
1248 * different controllers. They are in the domain specified by
1249 * configuration file (mdadm.conf).
1250 * In case when the metadata has the notion of domains based on disk
1251 * it shall return NULL for disks that do not belong to the controller
1252 * the supported domains. Such disks will form another domain and won't
1253 * be mixed with supported ones.
1254 */
1255 const char *(*get_disk_controller_domain)(const char *path);
1256
1257 /* for external backup area */
1258 int (*recover_backup)(struct supertype *st, struct mdinfo *info);
1259
1260 /* validate container after assemble */
1261 int (*validate_container)(struct mdinfo *info);
1262
1263 /* write initial empty PPL on device */
1264 int (*write_init_ppl)(struct supertype *st, struct mdinfo *info, int fd);
1265
1266 /* validate ppl before assemble */
1267 int (*validate_ppl)(struct supertype *st, struct mdinfo *info,
1268 struct mdinfo *disk);
1269
1270 /* records new bad block in metadata */
1271 int (*record_bad_block)(struct active_array *a, int n,
1272 unsigned long long sector, int length);
1273
1274 /* clears bad block from metadata */
1275 int (*clear_bad_block)(struct active_array *a, int n,
1276 unsigned long long sector, int length);
1277
1278 /* get list of bad blocks from metadata */
1279 struct md_bb *(*get_bad_blocks)(struct active_array *a, int n);
1280
1281 int swapuuid; /* true if uuid is bigending rather than hostendian */
1282 int external;
1283 const char *name; /* canonical metadata name */
1284 } *superlist[];
1285
1286 extern struct superswitch super0, super1;
1287 extern struct superswitch super_imsm, super_ddf;
1288 extern struct superswitch mbr, gpt;
1289
1290 void imsm_set_no_platform(int v);
1291
1292 struct metadata_update {
1293 int len;
1294 char *buf;
1295 void *space; /* allocated space that monitor will use */
1296 void **space_list; /* list of allocated spaces that monitor can
1297 * use or that it returned.
1298 */
1299 struct metadata_update *next;
1300 };
1301
1302 /* A supertype holds a particular collection of metadata.
1303 * It identifies the metadata type by the superswitch, and the particular
1304 * sub-version of that metadata type.
1305 * metadata read in or created is stored in 'sb' and 'info'.
1306 * There are also fields used by mdmon to track containers.
1307 *
1308 * A supertype may refer to:
1309 * Just an array, possibly in a container
1310 * A container, not identifying any particular array
1311 * Info read from just one device, not yet fully describing the array/container.
1312 *
1313 *
1314 * A supertype is created by:
1315 * super_by_fd
1316 * guess_super
1317 * dup_super
1318 */
1319 struct supertype {
1320 struct superswitch *ss;
1321 int minor_version;
1322 int max_devs;
1323 char container_devnm[32]; /* devnm of container */
1324 void *sb;
1325 void *info;
1326 void *other; /* Hack used to convert v0.90 to v1.0 */
1327 unsigned long long devsize;
1328 unsigned long long data_offset; /* used by v1.x only */
1329 int ignore_hw_compat; /* used to inform metadata handlers that it should ignore
1330 HW/firmware related incompatability to load metadata.
1331 Used when examining metadata to display content of disk
1332 when user has no hw/firmare compatible system.
1333 */
1334 struct metadata_update *updates;
1335 struct metadata_update **update_tail;
1336
1337 /* extra stuff used by mdmon */
1338 struct active_array *arrays;
1339 int sock; /* listen to external programs */
1340 char devnm[32]; /* e.g. md0. This appears in metadata_version:
1341 * external:/md0/12
1342 */
1343 int devcnt;
1344 int retry_soon;
1345 int nodes;
1346 char *cluster_name;
1347
1348 struct mdinfo *devs;
1349
1350 };
1351
1352 extern struct supertype *super_by_fd(int fd, char **subarray);
1353 enum guess_types { guess_any, guess_array, guess_partitions };
1354 extern struct supertype *guess_super_type(int fd, enum guess_types guess_type);
1355 static inline struct supertype *guess_super(int fd) {
1356 return guess_super_type(fd, guess_any);
1357 }
1358 extern struct supertype *dup_super(struct supertype *st);
1359 extern int get_dev_size(int fd, char *dname, unsigned long long *sizep);
1360 extern int get_dev_sector_size(int fd, char *dname, unsigned int *sectsizep);
1361 extern int must_be_container(int fd);
1362 extern int dev_size_from_id(dev_t id, unsigned long long *size);
1363 extern int dev_sector_size_from_id(dev_t id, unsigned int *size);
1364 void wait_for(char *dev, int fd);
1365
1366 /*
1367 * Data structures for policy management.
1368 * Each device can have a policy structure that lists
1369 * various name/value pairs each possibly with a metadata associated.
1370 * The policy list is sorted by name/value/metadata
1371 */
1372 struct dev_policy {
1373 struct dev_policy *next;
1374 char *name; /* None of these strings are allocated. They are
1375 * all just references to strings which are known
1376 * to exist elsewhere.
1377 * name and metadata can be compared by address equality.
1378 */
1379 const char *metadata;
1380 const char *value;
1381 };
1382
1383 extern char pol_act[], pol_domain[], pol_metadata[], pol_auto[];
1384
1385 /* iterate over the sublist starting at list, having the same
1386 * 'name' as 'list', and matching the given metadata (Where
1387 * NULL matches anything
1388 */
1389 #define pol_for_each(item, list, _metadata) \
1390 for (item = list; \
1391 item && item->name == list->name; \
1392 item = item->next) \
1393 if (!(!_metadata || !item->metadata || _metadata == item->metadata)) \
1394 ; else
1395
1396 /*
1397 * policy records read from mdadm are largely just name-value pairs.
1398 * The names are constants, not strdupped
1399 */
1400 struct pol_rule {
1401 struct pol_rule *next;
1402 char *type; /* rule_policy or rule_part */
1403 struct rule {
1404 struct rule *next;
1405 char *name;
1406 char *value;
1407 char *dups; /* duplicates of 'value' with a partNN appended */
1408 } *rule;
1409 };
1410
1411 extern char rule_policy[], rule_part[];
1412 extern char rule_path[], rule_type[];
1413 extern char type_part[], type_disk[];
1414
1415 extern void policyline(char *line, char *type);
1416 extern void policy_add(char *type, ...);
1417 extern void policy_free(void);
1418
1419 extern struct dev_policy *path_policy(char **paths, char *type);
1420 extern struct dev_policy *disk_policy(struct mdinfo *disk);
1421 extern struct dev_policy *devid_policy(int devid);
1422 extern void dev_policy_free(struct dev_policy *p);
1423
1424 //extern void pol_new(struct dev_policy **pol, char *name, char *val, char *metadata);
1425 extern void pol_add(struct dev_policy **pol, char *name, char *val, char *metadata);
1426 extern struct dev_policy *pol_find(struct dev_policy *pol, char *name);
1427
1428 enum policy_action {
1429 act_default,
1430 act_include,
1431 act_re_add,
1432 act_spare, /* This only applies to bare devices */
1433 act_spare_same_slot, /* this allows non-bare devices,
1434 * but only if recent removal */
1435 act_force_spare, /* this allow non-bare devices in any case */
1436 act_err
1437 };
1438
1439 extern int policy_action_allows(struct dev_policy *plist, const char *metadata,
1440 enum policy_action want);
1441 extern int disk_action_allows(struct mdinfo *disk, const char *metadata,
1442 enum policy_action want);
1443
1444 struct domainlist {
1445 struct domainlist *next;
1446 const char *dom;
1447 };
1448
1449 extern int domain_test(struct domainlist *dom, struct dev_policy *pol,
1450 const char *metadata);
1451 extern struct domainlist *domain_from_array(struct mdinfo *mdi,
1452 const char *metadata);
1453 extern void domainlist_add_dev(struct domainlist **dom, int devid,
1454 const char *metadata);
1455 extern void domain_free(struct domainlist *dl);
1456 extern void domain_merge(struct domainlist **domp, struct dev_policy *pol,
1457 const char *metadata);
1458 void domain_add(struct domainlist **domp, char *domain);
1459
1460 extern void policy_save_path(char *id_path, struct map_ent *array);
1461 extern int policy_check_path(struct mdinfo *disk, struct map_ent *array);
1462
1463 extern void sysfs_rules_apply(char *devnm, struct mdinfo *dev);
1464 extern void sysfsline(char *line);
1465
1466 #if __GNUC__ < 3
1467 struct stat64;
1468 #endif
1469
1470 #define HAVE_NFTW we assume
1471 #define HAVE_FTW
1472
1473 #ifdef __UCLIBC__
1474 # include <features.h>
1475 # ifndef __UCLIBC_HAS_LFS__
1476 # define lseek64 lseek
1477 # endif
1478 # ifndef __UCLIBC_HAS_FTW__
1479 # undef HAVE_FTW
1480 # undef HAVE_NFTW
1481 # endif
1482 #endif
1483
1484 #ifdef __dietlibc__
1485 # undef HAVE_NFTW
1486 #endif
1487
1488 #if defined(__KLIBC__)
1489 # undef HAVE_NFTW
1490 # undef HAVE_FTW
1491 #endif
1492
1493 #ifndef HAVE_NFTW
1494 # define FTW_PHYS 1
1495 # ifndef HAVE_FTW
1496 struct FTW {};
1497 # endif
1498 #endif
1499
1500 #ifdef HAVE_FTW
1501 # include <ftw.h>
1502 #endif
1503
1504 extern int add_dev(const char *name, const struct stat *stb, int flag, struct FTW *s);
1505
1506 extern int Manage_ro(char *devname, int fd, int readonly);
1507 extern int Manage_run(char *devname, int fd, struct context *c);
1508 extern int Manage_stop(char *devname, int fd, int quiet,
1509 int will_retry);
1510 extern int Manage_subdevs(char *devname, int fd,
1511 struct mddev_dev *devlist, int verbose, int test,
1512 enum update_opt update, int force);
1513 extern int autodetect(void);
1514 extern int Grow_Add_device(char *devname, int fd, char *newdev);
1515 extern int Grow_addbitmap(char *devname, int fd,
1516 struct context *c, struct shape *s);
1517 extern int Grow_reshape(char *devname, int fd,
1518 struct mddev_dev *devlist,
1519 struct context *c, struct shape *s);
1520 extern int Grow_restart(struct supertype *st, struct mdinfo *info,
1521 int *fdlist, int cnt, char *backup_file, int verbose);
1522 extern int Grow_continue(int mdfd, struct supertype *st,
1523 struct mdinfo *info, char *backup_file,
1524 int forked, int freeze_reshape);
1525 extern int Grow_consistency_policy(char *devname, int fd,
1526 struct context *c, struct shape *s);
1527
1528 extern int restore_backup(struct supertype *st,
1529 struct mdinfo *content,
1530 int working_disks,
1531 int spares,
1532 char **backup_filep,
1533 int verbose);
1534 extern int Grow_continue_command(char *devname, int fd,
1535 char *backup_file, int verbose);
1536
1537 extern int Assemble(struct supertype *st, char *mddev,
1538 struct mddev_ident *ident,
1539 struct mddev_dev *devlist,
1540 struct context *c);
1541
1542 extern int Build(struct mddev_ident *ident, struct mddev_dev *devlist, struct shape *s,
1543 struct context *c);
1544
1545 extern int Create(struct supertype *st, struct mddev_ident *ident, int subdevs,
1546 struct mddev_dev *devlist, struct shape *s, struct context *c);
1547
1548 extern int Detail(char *dev, struct context *c);
1549 extern int Detail_Platform(struct superswitch *ss, int scan, int verbose, int export, char *controller_path);
1550 extern int Query(char *dev);
1551 extern int ExamineBadblocks(char *devname, int brief, struct supertype *forcest);
1552 extern int Examine(struct mddev_dev *devlist, struct context *c,
1553 struct supertype *forcest);
1554 extern int Monitor(struct mddev_dev *devlist,
1555 char *mailaddr, char *alert_cmd,
1556 struct context *c,
1557 int daemonise, int oneshot,
1558 int dosyslog, char *pidfile, int increments,
1559 int share);
1560
1561 extern int Kill(char *dev, struct supertype *st, int force, int verbose, int noexcl);
1562 extern int Kill_subarray(char *dev, char *subarray, int verbose);
1563 extern int Update_subarray(char *dev, char *subarray, enum update_opt update, struct mddev_ident *ident, int quiet);
1564 extern int Wait(char *dev);
1565 extern int WaitClean(char *dev, int verbose);
1566 extern int SetAction(char *dev, char *action);
1567
1568 extern int Incremental(struct mddev_dev *devlist, struct context *c,
1569 struct supertype *st);
1570 extern void RebuildMap(void);
1571 extern int IncrementalScan(struct context *c, char *devnm);
1572 extern int IncrementalRemove(char *devname, char *path, int verbose);
1573 extern int CreateBitmap(char *filename, int force, char uuid[16],
1574 unsigned long chunksize, unsigned long daemon_sleep,
1575 unsigned long write_behind,
1576 unsigned long long array_size,
1577 int major);
1578 extern int ExamineBitmap(char *filename, int brief, struct supertype *st);
1579 extern int IsBitmapDirty(char *filename);
1580 extern int Write_rules(char *rule_name);
1581 extern int bitmap_update_uuid(int fd, int *uuid, int swap);
1582
1583 /* calculate the size of the bitmap given the array size and bitmap chunksize */
1584 static inline unsigned long long
1585 bitmap_bits(unsigned long long array_size, unsigned long chunksize)
1586 {
1587 return (array_size * 512 + chunksize - 1) / chunksize;
1588 }
1589
1590 extern int Dump_metadata(char *dev, char *dir, struct context *c,
1591 struct supertype *st);
1592 extern int Restore_metadata(char *dev, char *dir, struct context *c,
1593 struct supertype *st, int only);
1594
1595 int md_array_valid(int fd);
1596 int md_array_active(int fd);
1597 int md_array_is_active(struct mdinfo *info);
1598 int md_get_array_info(int fd, struct mdu_array_info_s *array);
1599 int md_set_array_info(int fd, struct mdu_array_info_s *array);
1600 int md_get_disk_info(int fd, struct mdu_disk_info_s *disk);
1601 extern int get_linux_version(void);
1602 extern int mdadm_version(char *version);
1603 extern unsigned long long parse_size(char *size);
1604 extern int parse_uuid(char *str, int uuid[4]);
1605 int default_layout(struct supertype *st, int level, int verbose);
1606 extern int is_near_layout_10(int layout);
1607 extern int parse_layout_10(char *layout);
1608 extern int parse_layout_faulty(char *layout);
1609 extern int parse_num(int *dest, const char *num);
1610 extern int parse_cluster_confirm_arg(char *inp, char **devname, int *slot);
1611 extern int check_ext2(int fd, char *name);
1612 extern int check_reiser(int fd, char *name);
1613 extern int check_raid(int fd, char *name);
1614 extern int check_partitions(int fd, char *dname,
1615 unsigned long long freesize,
1616 unsigned long long size);
1617 extern bool is_name_posix_compatible(const char *path);
1618 extern int fstat_is_blkdev(int fd, char *devname, dev_t *rdev);
1619 extern int stat_is_blkdev(char *devname, dev_t *rdev);
1620
1621 extern bool is_string_lq(const char * const str, size_t max_len);
1622 extern bool is_dev_alive(char *path);
1623 extern int get_mdp_major(void);
1624 extern int get_maj_min(char *dev, int *major, int *minor);
1625 extern bool is_bit_set(int *val, unsigned char index);
1626 extern int dev_open(char *dev, int flags);
1627 extern int open_dev(char *devnm);
1628 extern void reopen_mddev(int mdfd);
1629 extern int open_dev_flags(char *devnm, int flags);
1630 extern int open_dev_excl(char *devnm);
1631 extern int is_standard(char *dev, int *nump);
1632 extern int same_dev(char *one, char *two);
1633 extern int compare_paths (char* path1,char* path2);
1634 extern void enable_fds(int devices);
1635 extern void manage_fork_fds(int close_all);
1636 extern int continue_via_systemd(char *devnm, char *service_name, char *prefix);
1637
1638 extern void ident_init(struct mddev_ident *ident);
1639 extern mdadm_status_t ident_set_devname(struct mddev_ident *ident, const char *devname);
1640 extern mdadm_status_t ident_set_name(struct mddev_ident *ident, const char *name);
1641
1642 extern int parse_auto(char *str, char *msg, int config);
1643 extern struct mddev_ident *conf_get_ident(char *dev);
1644 extern struct mddev_dev *conf_get_devs(void);
1645 extern int conf_test_dev(char *devname);
1646 extern int conf_test_metadata(const char *version, struct dev_policy *pol, int is_homehost);
1647 extern struct createinfo *conf_get_create_info(void);
1648 extern void set_conffile(char *file);
1649 extern char *conf_get_mailaddr(void);
1650 extern char *conf_get_mailfrom(void);
1651 extern char *conf_get_program(void);
1652 extern char *conf_get_homehost(int *require_homehostp);
1653 extern char *conf_get_homecluster(void);
1654 extern int conf_get_monitor_delay(void);
1655 extern char *conf_line(FILE *file);
1656 extern char *conf_word(FILE *file, int allow_key);
1657 extern void print_quoted(char *str);
1658 extern int use_udev(void);
1659 extern void print_escape(char *str);
1660 extern unsigned long GCD(unsigned long a, unsigned long b);
1661 extern int conf_name_is_free(char *name);
1662 extern bool is_devname_ignore(const char *devname);
1663 extern bool is_devname_md_numbered(const char *devname);
1664 extern bool is_devname_md_d_numbered(const char *devname);
1665 extern int conf_verify_devnames(struct mddev_ident *array_list);
1666 extern int devname_matches(char *name, char *match);
1667 extern struct mddev_ident *conf_match(struct supertype *st,
1668 struct mdinfo *info,
1669 char *devname,
1670 int verbose, int *rvp);
1671
1672 extern void free_line(char *line);
1673 extern int match_oneof(char *devices, char *devname);
1674 extern void uuid_from_super(int uuid[4], mdp_super_t *super);
1675 extern const int uuid_zero[4];
1676 extern int same_uuid(int a[4], int b[4], int swapuuid);
1677 extern void copy_uuid(void *a, int b[4], int swapuuid);
1678 extern char *__fname_from_uuid(int id[4], int swap, char *buf, char sep);
1679 extern char *fname_from_uuid(struct supertype *st,
1680 struct mdinfo *info, char *buf, char sep);
1681 extern unsigned long calc_csum(void *super, int bytes);
1682 extern int enough(int level, int raid_disks, int layout, int clean,
1683 char *avail);
1684 extern int ask(char *mesg);
1685 extern unsigned long long get_component_size(int fd);
1686 extern void remove_partitions(int fd);
1687 extern int test_partition(int fd);
1688 extern int test_partition_from_id(dev_t id);
1689 extern int get_data_disks(int level, int layout, int raid_disks);
1690 extern unsigned long long calc_array_size(int level, int raid_disks, int layout,
1691 int chunksize, unsigned long long devsize);
1692 extern int flush_metadata_updates(struct supertype *st);
1693 extern void append_metadata_update(struct supertype *st, void *buf, int len);
1694 extern int assemble_container_content(struct supertype *st, int mdfd,
1695 struct mdinfo *content,
1696 struct context *c,
1697 char *chosen_name, int *result);
1698 #define INCR_NO 1
1699 #define INCR_UNSAFE 2
1700 #define INCR_ALREADY 4
1701 #define INCR_YES 8
1702 extern struct mdinfo *container_choose_spares(struct supertype *st,
1703 struct spare_criteria *criteria,
1704 struct domainlist *domlist,
1705 char *spare_group,
1706 const char *metadata, int get_one);
1707 extern int move_spare(char *from_devname, char *to_devname, dev_t devid);
1708 extern int add_disk(int mdfd, struct supertype *st,
1709 struct mdinfo *sra, struct mdinfo *info);
1710 extern int remove_disk(int mdfd, struct supertype *st,
1711 struct mdinfo *sra, struct mdinfo *info);
1712 extern int hot_remove_disk(int mdfd, unsigned long dev, int force);
1713 extern int sys_hot_remove_disk(int statefd, int force);
1714 extern int set_array_info(int mdfd, struct supertype *st, struct mdinfo *info);
1715 unsigned long long min_recovery_start(struct mdinfo *array);
1716
1717 extern char *human_size(long long bytes);
1718 extern char *human_size_brief(long long bytes, int prefix);
1719 extern void print_r10_layout(int layout);
1720
1721 extern char *find_free_devnm(int use_partitions);
1722
1723 extern void put_md_name(char *name);
1724 extern char *devid2kname(dev_t devid);
1725 extern char *devid2devnm(dev_t devid);
1726 extern dev_t devnm2devid(char *devnm);
1727 extern char *get_md_name(char *devnm);
1728
1729 extern char DefaultConfFile[];
1730
1731 extern int create_mddev(char *dev, char *name, int autof, int trustworthy,
1732 char *chosen, int block_udev);
1733 /* values for 'trustworthy' */
1734 #define LOCAL 1
1735 #define LOCAL_ANY 10
1736 #define FOREIGN 2
1737 #define METADATA 3
1738 extern int open_mddev(char *dev, int report_errors);
1739 extern int is_mddev(char *dev);
1740 extern int open_container(int fd);
1741 extern int metadata_container_matches(char *metadata, char *devnm);
1742 extern int metadata_subdev_matches(char *metadata, char *devnm);
1743 extern int is_container_member(struct mdstat_ent *ent, char *devname);
1744 extern int is_subarray_active(char *subarray, char *devname);
1745 extern int open_subarray(char *dev, char *subarray, struct supertype *st, int quiet);
1746 extern struct superswitch *version_to_superswitch(char *vers);
1747
1748 extern int mdmon_running(char *devnm);
1749 extern int mdmon_pid(char *devnm);
1750 extern int check_env(char *name);
1751 extern __u32 random32(void);
1752 extern void random_uuid(__u8 *buf);
1753 extern int start_mdmon(char *devnm);
1754
1755 extern int child_monitor(int afd, struct mdinfo *sra, struct reshape *reshape,
1756 struct supertype *st, unsigned long stripes,
1757 int *fds, unsigned long long *offsets,
1758 int dests, int *destfd, unsigned long long *destoffsets);
1759 void abort_reshape(struct mdinfo *sra);
1760
1761 void *super1_make_v0(struct supertype *st, struct mdinfo *info, mdp_super_t *sb0);
1762
1763 extern char *stat2kname(struct stat *st);
1764 extern char *fd2kname(int fd);
1765 extern char *stat2devnm(struct stat *st);
1766 bool stat_is_md_dev(struct stat *st);
1767 extern char *fd2devnm(int fd);
1768
1769 extern int in_initrd(void);
1770
1771 struct cmap_hooks {
1772 void *cmap_handle; /* corosync lib related */
1773
1774 int (*initialize)(cmap_handle_t *handle);
1775 int (*get_string)(cmap_handle_t handle,
1776 const char *string,
1777 char **name);
1778 int (*finalize)(cmap_handle_t handle);
1779 };
1780
1781 extern void set_cmap_hooks(void);
1782 extern void set_hooks(void);
1783
1784 struct dlm_hooks {
1785 void *dlm_handle; /* dlm lib related */
1786
1787 dlm_lshandle_t (*create_lockspace)(const char *name,
1788 unsigned int mode);
1789 dlm_lshandle_t (*open_lockspace)(const char *name);
1790 int (*release_lockspace)(const char *name, dlm_lshandle_t ls,
1791 int force);
1792 int (*ls_lock)(dlm_lshandle_t lockspace, uint32_t mode,
1793 struct dlm_lksb *lksb, uint32_t flags,
1794 const void *name, unsigned int namelen,
1795 uint32_t parent, void (*astaddr) (void *astarg),
1796 void *astarg, void (*bastaddr) (void *astarg),
1797 void *range);
1798 int (*ls_unlock_wait)(dlm_lshandle_t lockspace, uint32_t lkid,
1799 uint32_t flags, struct dlm_lksb *lksb);
1800 int (*ls_get_fd)(dlm_lshandle_t ls);
1801 int (*dispatch)(int fd);
1802 };
1803
1804 extern int get_cluster_name(char **name);
1805 extern int dlm_funs_ready(void);
1806 extern int cluster_get_dlmlock(void);
1807 extern int cluster_release_dlmlock(void);
1808 extern void set_dlm_hooks(void);
1809
1810 #define MSEC_TO_NSEC(msec) ((msec) * 1000000)
1811 #define USEC_TO_NSEC(usec) ((usec) * 1000)
1812 extern void sleep_for(unsigned int sec, long nsec, bool wake_after_interrupt);
1813 extern bool is_directory(const char *path);
1814 extern bool is_file(const char *path);
1815 extern int s_gethostname(char *buf, int buf_len);
1816
1817 #define _ROUND_UP(val, base) (((val) + (base) - 1) & ~(base - 1))
1818 #define ROUND_UP(val, base) _ROUND_UP(val, (typeof(val))(base))
1819 #define ROUND_UP_PTR(ptr, base) ((typeof(ptr)) \
1820 (ROUND_UP((unsigned long)(ptr), base)))
1821
1822 static inline int is_subarray(char *vers)
1823 {
1824 /* The version string for a 'subarray' (an array in a container)
1825 * is
1826 * /containername/componentname for normal read-write arrays
1827 * -containername/componentname for arrays which mdmon must not
1828 * reconfigure. They might be read-only
1829 * or might be undergoing reshape etc.
1830 * containername is e.g. md0, md_d1
1831 * componentname is dependant on the metadata. e.g. '1' 'S1' ...
1832 */
1833 return (*vers == '/' || *vers == '-');
1834 }
1835
1836 static inline char *to_subarray(struct mdstat_ent *ent, char *container)
1837 {
1838 return &ent->metadata_version[10+strlen(container)+1];
1839 }
1840
1841 /**
1842 * signal_s() - Wrapper for sigaction() with signal()-like interface.
1843 * @sig: The signal to set the signal handler to.
1844 * @handler: The signal handler.
1845 *
1846 * Return: previous handler or SIG_ERR on failure.
1847 */
1848 static inline sighandler_t signal_s(int sig, sighandler_t handler)
1849 {
1850 struct sigaction new_act;
1851 struct sigaction old_act;
1852
1853 new_act.sa_handler = handler;
1854 new_act.sa_flags = 0;
1855
1856 if (sigaction(sig, &new_act, &old_act) == 0)
1857 return old_act.sa_handler;
1858
1859 return SIG_ERR;
1860 }
1861
1862 #ifdef DEBUG
1863 #define dprintf(fmt, arg...) \
1864 fprintf(stderr, "%s: %s: "fmt, Name, __func__, ##arg)
1865 #define dprintf_cont(fmt, arg...) \
1866 fprintf(stderr, fmt, ##arg)
1867 #else
1868 #define dprintf(fmt, arg...) \
1869 ({ if (0) fprintf(stderr, "%s: %s: " fmt, Name, __func__, ##arg); 0; })
1870 #define dprintf_cont(fmt, arg...) \
1871 ({ if (0) fprintf(stderr, fmt, ##arg); 0; })
1872 #endif
1873
1874 static inline int xasprintf(char **strp, const char *fmt, ...) {
1875 va_list ap;
1876 int ret;
1877 va_start(ap, fmt);
1878 ret = vasprintf(strp, fmt, ap);
1879 va_end(ap);
1880 assert(ret >= 0);
1881 return ret;
1882 }
1883
1884 #ifdef DEBUG
1885 #define pr_err(fmt, args...) fprintf(stderr, "%s: %s: "fmt, Name, __func__, ##args)
1886 #else
1887 #define pr_err(fmt, args...) fprintf(stderr, "%s: "fmt, Name, ##args)
1888 #endif
1889 #define cont_err(fmt ...) fprintf(stderr, " " fmt)
1890
1891 #define pr_info(fmt, args...) printf("%s: "fmt, Name, ##args)
1892
1893 void *xmalloc(size_t len);
1894 void *xrealloc(void *ptr, size_t len);
1895 void *xcalloc(size_t num, size_t size);
1896 char *xstrdup(const char *str);
1897
1898 #define LEVEL_MULTIPATH (-4)
1899 #define LEVEL_LINEAR (-1)
1900 #define LEVEL_FAULTY (-5)
1901
1902 /* kernel module doesn't know about these */
1903 #define LEVEL_CONTAINER (-100)
1904 #define LEVEL_UNSUPPORTED (-200)
1905
1906 /* the kernel does know about this one ... */
1907 #define LEVEL_NONE (-1000000)
1908
1909 /* faulty stuff */
1910
1911 #define WriteTransient 0
1912 #define ReadTransient 1
1913 #define WritePersistent 2
1914 #define ReadPersistent 3
1915 #define WriteAll 4 /* doesn't go to device */
1916 #define ReadFixable 5
1917 #define Modes 6
1918
1919 #define ClearErrors 31
1920 #define ClearFaults 30
1921
1922 #define AllPersist 100 /* internal use only */
1923 #define NoPersist 101
1924
1925 #define ModeMask 0x1f
1926 #define ModeShift 5
1927
1928 #ifdef __TINYC__
1929 #undef minor
1930 #undef major
1931 #undef makedev
1932 #define minor(x) ((x)&0xff)
1933 #define major(x) (((x)>>8)&0xff)
1934 #define makedev(M,m) (((M)<<8) | (m))
1935 #endif
1936
1937 enum r0layout {
1938 RAID0_ORIG_LAYOUT = 1,
1939 RAID0_ALT_MULTIZONE_LAYOUT = 2,
1940 };
1941
1942 /* for raid4/5/6 */
1943 #define ALGORITHM_LEFT_ASYMMETRIC 0
1944 #define ALGORITHM_RIGHT_ASYMMETRIC 1
1945 #define ALGORITHM_LEFT_SYMMETRIC 2
1946 #define ALGORITHM_RIGHT_SYMMETRIC 3
1947
1948 /* Define non-rotating (raid4) algorithms. These allow
1949 * conversion of raid4 to raid5.
1950 */
1951 #define ALGORITHM_PARITY_0 4 /* P or P,Q are initial devices */
1952 #define ALGORITHM_PARITY_N 5 /* P or P,Q are final devices. */
1953
1954 /* DDF RAID6 layouts differ from md/raid6 layouts in two ways.
1955 * Firstly, the exact positioning of the parity block is slightly
1956 * different between the 'LEFT_*' modes of md and the "_N_*" modes
1957 * of DDF.
1958 * Secondly, or order of datablocks over which the Q syndrome is computed
1959 * is different.
1960 * Consequently we have different layouts for DDF/raid6 than md/raid6.
1961 * These layouts are from the DDFv1.2 spec.
1962 * Interestingly DDFv1.2-Errata-A does not specify N_CONTINUE but
1963 * leaves RLQ=3 as 'Vendor Specific'
1964 */
1965
1966 #define ALGORITHM_ROTATING_ZERO_RESTART 8 /* DDF PRL=6 RLQ=1 */
1967 #define ALGORITHM_ROTATING_N_RESTART 9 /* DDF PRL=6 RLQ=2 */
1968 #define ALGORITHM_ROTATING_N_CONTINUE 10 /*DDF PRL=6 RLQ=3 */
1969
1970 /* For every RAID5 algorithm we define a RAID6 algorithm
1971 * with exactly the same layout for data and parity, and
1972 * with the Q block always on the last device (N-1).
1973 * This allows trivial conversion from RAID5 to RAID6
1974 */
1975 #define ALGORITHM_LEFT_ASYMMETRIC_6 16
1976 #define ALGORITHM_RIGHT_ASYMMETRIC_6 17
1977 #define ALGORITHM_LEFT_SYMMETRIC_6 18
1978 #define ALGORITHM_RIGHT_SYMMETRIC_6 19
1979 #define ALGORITHM_PARITY_0_6 20
1980 #define ALGORITHM_PARITY_N_6 ALGORITHM_PARITY_N
1981
1982 /* Define PATH_MAX in case we don't use glibc or standard library does
1983 * not have PATH_MAX defined. Assume max path length is 4K characters.
1984 */
1985 #ifndef PATH_MAX
1986 #define PATH_MAX 4096
1987 #endif
1988
1989 #define RESYNC_NONE -1
1990 #define RESYNC_DELAYED -2
1991 #define RESYNC_PENDING -3
1992 #define RESYNC_REMOTE -4
1993 #define RESYNC_UNKNOWN -5
1994
1995 /* When using "GET_DISK_INFO" it isn't certain how high
1996 * we need to check. So we impose an absolute limit of
1997 * MAX_DISKS. This needs to be much more than the largest
1998 * number of devices any metadata can support. Currently
1999 * v1.x can support 1920
2000 */
2001 #define MAX_DISKS 4096
2002
2003 /* Sometimes the 'size' value passed needs to mean "Maximum".
2004 * In those cases with use MAX_SIZE
2005 */
2006 #define MAX_SIZE 1
2007
2008 /* We want to use unsigned numbers for sector counts, but need
2009 * a value for 'invalid'. Use '1'.
2010 */
2011 #define INVALID_SECTORS 1
2012 /* And another special number needed for --data_offset=variable */
2013 #define VARIABLE_OFFSET 3
2014
2015 /**
2016 * is_container() - check if @level is &LEVEL_CONTAINER
2017 * @level: level value
2018 *
2019 * return:
2020 * 1 if level is equal to &LEVEL_CONTAINER, 0 otherwise.
2021 */
2022 static inline int is_container(const int level)
2023 {
2024 if (level == LEVEL_CONTAINER)
2025 return 1;
2026 return 0;
2027 }