~ubuntu-branches/ubuntu/hardy/mdadm/hardy-updates

« back to all changes in this revision

Viewing changes to {arch}/++pristine-trees/unlocked/mdadm/mdadm--debian/mdadm--debian--1.12.0/pkg-mdadm-devel@lists.alioth.debian.org--2005/mdadm--debian--1.12.0--patch-2/mdadm.h

  • Committer: Package Import Robot
  • Author(s): Scott James Remnant
  • Date: 2006-07-11 17:23:21 UTC
  • mfrom: (1.1.4)
  • Revision ID: package-import@ubuntu.com-20060711172321-070tz7lox9adujtw
Tags: 2.4.1-6ubuntu1
* Merge from debian unstable, remaining changes:
  - integration with initramfs-tools,
  - autocreate devices when udev is in use,
  - use lstat in mdopen.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * mdadm - manage Linux "md" devices aka RAID arrays.
3
 
 *
4
 
 * Copyright (C) 2001-2002 Neil Brown <neilb@cse.unsw.edu.au>
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@cse.unsw.edu.au>
23
 
 *    Paper: Neil Brown
24
 
 *           School of Computer Science and Engineering
25
 
 *           The University of New South Wales
26
 
 *           Sydney, 2052
27
 
 *           Australia
28
 
 */
29
 
 
30
 
#define __USE_LARGEFILE64
31
 
#include        <unistd.h>
32
 
#ifndef __dietlibc__
33
 
extern __off64_t lseek64 __P ((int __fd, __off64_t __offset, int __whence));
34
 
#endif
35
 
 
36
 
#include        <sys/types.h>
37
 
#include        <sys/stat.h>
38
 
#include        <stdlib.h>
39
 
#include        <time.h>
40
 
#include        <getopt.h>
41
 
#include        <fcntl.h>
42
 
#include        <stdio.h>
43
 
#include        <errno.h>
44
 
#include        <string.h>
45
 
#ifdef __dietlibc__NONO
46
 
int strncmp(const char *s1, const char *s2, size_t n) __THROW __pure__;
47
 
char *strncpy(char *dest, const char *src, size_t n) __THROW;
48
 
#include    <strings.h>
49
 
#endif
50
 
 
51
 
 
52
 
#include        <linux/kdev_t.h>
53
 
/*#include      <linux/fs.h> */
54
 
#include        <sys/mount.h>
55
 
#include        <asm/types.h>
56
 
#include        <sys/ioctl.h>
57
 
#define MD_MAJOR 9
58
 
#define MdpMinorShift 6
59
 
 
60
 
#ifndef BLKGETSIZE64
61
 
#define BLKGETSIZE64 _IOR(0x12,114,size_t) /* return device size in bytes (u64 *arg) */
62
 
#endif
63
 
 
64
 
 
65
 
#include        "md_u.h"
66
 
#include        "md_p.h"
67
 
 
68
 
#define Name "mdadm"
69
 
 
70
 
enum mode {
71
 
        ASSEMBLE=1,
72
 
        BUILD,
73
 
        CREATE,
74
 
        MANAGE,
75
 
        MISC,
76
 
        MONITOR,
77
 
        GROW,
78
 
};
79
 
 
80
 
extern char short_options[];
81
 
extern struct option long_options[];
82
 
extern char Version[], Usage[], Help[], OptionHelp[],
83
 
        Help_create[], Help_build[], Help_assemble[], Help_grow[],
84
 
        Help_manage[], Help_misc[], Help_monitor[], Help_config[];
85
 
 
86
 
/* structures read from config file */
87
 
/* List of mddevice names and identifiers
88
 
 * Identifiers can be:
89
 
 *    uuid=128-hex-uuid
90
 
 *    super-minor=decimal-minor-number-from-superblock
91
 
 *    devices=comma,separated,list,of,device,names,with,wildcards
92
 
 *
93
 
 * If multiple fields are present, the intersection of all matching
94
 
 * devices is considered
95
 
 */
96
 
#define UnSet (0xfffe)
97
 
typedef struct mddev_ident_s {
98
 
        char    *devname;
99
 
        
100
 
        int     uuid_set;
101
 
        int     uuid[4];
102
 
 
103
 
        unsigned int super_minor;
104
 
 
105
 
        char    *devices;       /* comma separated list of device
106
 
                                 * names with wild cards
107
 
                                 */
108
 
        int     level;
109
 
        unsigned int raid_disks;
110
 
        unsigned int spare_disks;
111
 
        int     autof;          /* 1 for normal, 2 for partitioned */
112
 
        char    *spare_group;
113
 
 
114
 
        struct mddev_ident_s *next;
115
 
} *mddev_ident_t;
116
 
 
117
 
/* List of device names - wildcards expanded */
118
 
typedef struct mddev_dev_s {
119
 
        char *devname;
120
 
        char disposition;       /* 'a' for add, 'r' for remove, 'f' for fail.
121
 
                                 * Not set for names read from .config
122
 
                                 */
123
 
        struct mddev_dev_s *next;
124
 
} *mddev_dev_t;
125
 
 
126
 
typedef struct mapping {
127
 
        char *name;
128
 
        int num;
129
 
} mapping_t;
130
 
 
131
 
 
132
 
struct mdstat_ent {
133
 
        char            *dev;
134
 
        int             devnum;
135
 
        int             active;
136
 
        char            *level;
137
 
        char            *pattern; /* U or up, _ for down */
138
 
        int             percent; /* -1 if no resync */
139
 
        int             resync; /* 1 if resync, 0 if recovery */
140
 
        struct mdstat_ent *next;
141
 
};
142
 
 
143
 
extern struct mdstat_ent *mdstat_read(int);
144
 
extern void free_mdstat(struct mdstat_ent *ms);
145
 
extern void mdstat_wait(int seconds);
146
 
 
147
 
#ifndef Sendmail
148
 
#define Sendmail "/usr/lib/sendmail -t"
149
 
#endif
150
 
 
151
 
extern char *map_num(mapping_t *map, int num);
152
 
extern int map_name(mapping_t *map, char *name);
153
 
extern mapping_t r5layout[], pers[], modes[], faultylayout[];
154
 
 
155
 
extern char *map_dev(int major, int minor);
156
 
 
157
 
#ifdef UCLIBC
158
 
  struct FTW {};
159
 
# define FTW_PHYS 1
160
 
#else
161
 
# define  __USE_XOPEN_EXTENDED
162
 
# include <ftw.h>
163
 
# ifdef __dietlibc__
164
 
#  define FTW_PHYS 1
165
 
# endif
166
 
#endif
167
 
 
168
 
extern int add_dev(const char *name, const struct stat *stb, int flag, struct FTW *s);
169
 
 
170
 
 
171
 
extern int Manage_ro(char *devname, int fd, int readonly);
172
 
extern int Manage_runstop(char *devname, int fd, int runstop, int quiet);
173
 
extern int Manage_resize(char *devname, int fd, long long size, int raid_disks);
174
 
extern int Manage_reconfig(char *devname, int fd, int layout);
175
 
extern int Manage_subdevs(char *devname, int fd,
176
 
                          mddev_dev_t devlist);
177
 
extern int Grow_Add_device(char *devname, int fd, char *newdev);
178
 
 
179
 
 
180
 
extern int Assemble(char *mddev, int mdfd,
181
 
                    mddev_ident_t ident,
182
 
                    char *conffile,
183
 
                    mddev_dev_t devlist,
184
 
                    int readonly, int runstop,
185
 
                    char *update,
186
 
                    int verbose, int force);
187
 
 
188
 
extern int Build(char *mddev, int mdfd, int chunk, int level, int layout,
189
 
                 int raiddisks,
190
 
                 mddev_dev_t devlist, int assume_clean);
191
 
 
192
 
 
193
 
extern int Create(char *mddev, int mdfd,
194
 
                  int chunk, int level, int layout, unsigned long size, int raiddisks, int sparedisks,
195
 
                  int subdevs, mddev_dev_t devlist,
196
 
                  int runstop, int verbose, int force);
197
 
 
198
 
extern int Detail(char *dev, int brief, int test);
199
 
extern int Query(char *dev);
200
 
extern int Examine(mddev_dev_t devlist, int brief, int scan, int SparcAdjust);
201
 
extern int Monitor(mddev_dev_t devlist,
202
 
                   char *mailaddr, char *alert_cmd,
203
 
                   int period, int daemonise, int scan, int oneshot,
204
 
                   char *config, int test, char *pidfile);
205
 
 
206
 
extern int Kill(char *dev, int force);
207
 
 
208
 
extern int md_get_version(int fd);
209
 
extern int get_linux_version(void);
210
 
extern int parse_uuid(char *str, int uuid[4]);
211
 
extern int check_ext2(int fd, char *name);
212
 
extern int check_reiser(int fd, char *name);
213
 
extern int check_raid(int fd, char *name);
214
 
 
215
 
extern int get_mdp_major(void);
216
 
extern int is_standard(char *dev, int *nump);
217
 
 
218
 
 
219
 
extern mddev_ident_t conf_get_ident(char *conffile, char *dev);
220
 
extern mddev_dev_t conf_get_devs(char *conffile);
221
 
extern char *conf_get_mailaddr(char *conffile);
222
 
extern char *conf_get_program(char *conffile);
223
 
extern char *conf_line(FILE *file);
224
 
extern char *conf_word(FILE *file, int allow_key);
225
 
extern void free_line(char *line);
226
 
extern int match_oneof(char *devices, char *devname);
227
 
extern int load_super(int fd, mdp_super_t *super);
228
 
extern void uuid_from_super(int uuid[4], mdp_super_t *super);
229
 
extern int same_uuid(int a[4], int b[4]);
230
 
extern int compare_super(mdp_super_t *first, mdp_super_t *second);
231
 
extern unsigned long calc_sb_csum(mdp_super_t *super);
232
 
extern int store_super(int fd, mdp_super_t *super);
233
 
extern int enough(int level, int raid_disks, int avail_disks);
234
 
extern int ask(char *mesg);
235
 
 
236
 
 
237
 
extern char *human_size(long long bytes);
238
 
char *human_size_brief(long long bytes);
239
 
 
240
 
extern void put_md_name(char *name);
241
 
extern char *get_md_name(int dev);
242
 
 
243
 
extern char DefaultConfFile[];
244
 
 
245
 
extern int open_mddev(char *dev, int autof);
246
 
 
247
 
 
248
 
#define LEVEL_MULTIPATH         (-4)
249
 
#define LEVEL_LINEAR            (-1)
250
 
#define LEVEL_FAULTY            (-5)
251
 
 
252
 
 
253
 
/* faulty stuff */
254
 
 
255
 
#define WriteTransient  0
256
 
#define ReadTransient   1
257
 
#define WritePersistent 2
258
 
#define ReadPersistent  3
259
 
#define WriteAll        4 /* doesn't go to device */
260
 
#define ReadFixable     5
261
 
#define Modes   6
262
 
 
263
 
#define ClearErrors     31
264
 
#define ClearFaults     30
265
 
 
266
 
#define AllPersist      100 /* internal use only */
267
 
#define NoPersist       101
268
 
 
269
 
#define ModeMask        0x1f
270
 
#define ModeShift       5
271
 
 
272
 
 
273
 
#ifdef __TINYC__
274
 
#undef minor
275
 
#undef major
276
 
#undef makedev
277
 
#define minor(x) ((x)&0xff)
278
 
#define major(x) (((x)>>8)&0xff)
279
 
#define makedev(M,m) (((M)<<8) | (m))
280
 
#endif
281