~xnox/ubuntu/quantal/mdadm/quantal

« back to all changes in this revision

Viewing changes to mdadm.h

  • Committer: Dmitrijs Ledkovs
  • Author(s): Fabio M. Di Nitto
  • Date: 2004-10-01 06:23:38 UTC
  • Revision ID: dmitrijs.ledkovs@canonical.com-20041001062338-25s1tgnu6egigv1v
Tags: upstream-1.5.0
ImportĀ upstreamĀ versionĀ 1.5.0

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
 
 
59
#ifndef BLKGETSIZE64
 
60
#define BLKGETSIZE64 _IOR(0x12,114,size_t) /* return device size in bytes (u64 *arg) */
 
61
#endif
 
62
 
 
63
 
 
64
#include        "md_u.h"
 
65
#include        "md_p.h"
 
66
 
 
67
#define Name "mdadm"
 
68
 
 
69
enum mode {
 
70
        ASSEMBLE=1,
 
71
        BUILD,
 
72
        CREATE,
 
73
        MANAGE,
 
74
        MISC,
 
75
        MONITOR,
 
76
};
 
77
 
 
78
extern char short_options[];
 
79
extern struct option long_options[];
 
80
extern char Version[], Usage[], Help[], OptionHelp[],
 
81
        Help_create[], Help_build[], Help_assemble[],
 
82
        Help_manage[], Help_misc[], Help_monitor[], Help_config[];
 
83
 
 
84
/* structures read from config file */
 
85
/* List of mddevice names and identifiers
 
86
 * Identifiers can be:
 
87
 *    uuid=128-hex-uuid
 
88
 *    super-minor=decimal-minor-number-from-superblock
 
89
 *    devices=comma,separated,list,of,device,names,with,wildcards
 
90
 *
 
91
 * If multiple fields are present, the intersection of all matching
 
92
 * devices is considered
 
93
 */
 
94
#define UnSet (0xfffe)
 
95
typedef struct mddev_ident_s {
 
96
        char *devname;
 
97
        
 
98
        int uuid_set;
 
99
        __u32 uuid[4];
 
100
 
 
101
        unsigned int super_minor;
 
102
 
 
103
        char *devices;          /* comma separated list of device
 
104
                                 * names with wild cards
 
105
                                 */
 
106
        int level;
 
107
        unsigned int raid_disks;
 
108
        unsigned int spare_disks;
 
109
        char *spare_group;
 
110
        struct mddev_ident_s *next;
 
111
} *mddev_ident_t;
 
112
 
 
113
/* List of device names - wildcards expanded */
 
114
typedef struct mddev_dev_s {
 
115
        char *devname;
 
116
        char disposition;       /* 'a' for add, 'r' for remove, 'f' for fail.
 
117
                                 * Not set for names read from .config
 
118
                                 */
 
119
        struct mddev_dev_s *next;
 
120
} *mddev_dev_t;
 
121
 
 
122
typedef struct mapping {
 
123
        char *name;
 
124
        int num;
 
125
} mapping_t;
 
126
 
 
127
 
 
128
struct mdstat_ent {
 
129
        char            *dev;
 
130
        int             devnum;
 
131
        int             active;
 
132
        char            *level;
 
133
        char            *pattern; /* U or up, _ for down */
 
134
        int             percent; /* -1 if no resync */
 
135
        struct mdstat_ent *next;
 
136
};
 
137
 
 
138
extern struct mdstat_ent *mdstat_read(void);
 
139
extern void free_mdstat(struct mdstat_ent *ms);
 
140
 
 
141
#ifndef Sendmail
 
142
#define Sendmail "/usr/lib/sendmail -t"
 
143
#endif
 
144
 
 
145
extern char *map_num(mapping_t *map, int num);
 
146
extern int map_name(mapping_t *map, char *name);
 
147
extern mapping_t r5layout[], pers[], modes[];
 
148
 
 
149
extern char *map_dev(int major, int minor);
 
150
 
 
151
 
 
152
extern int Manage_ro(char *devname, int fd, int readonly);
 
153
extern int Manage_runstop(char *devname, int fd, int runstop);
 
154
extern int Manage_subdevs(char *devname, int fd,
 
155
                          mddev_dev_t devlist);
 
156
 
 
157
 
 
158
extern int Assemble(char *mddev, int mdfd,
 
159
                    mddev_ident_t ident,
 
160
                    char *conffile,
 
161
                    mddev_dev_t devlist,
 
162
                    int readonly, int runstop,
 
163
                    char *update,
 
164
                    int verbose, int force);
 
165
 
 
166
extern int Build(char *mddev, int mdfd, int chunk, int level,
 
167
                 int raiddisks,
 
168
                 mddev_dev_t devlist);
 
169
 
 
170
 
 
171
extern int Create(char *mddev, int mdfd,
 
172
                  int chunk, int level, int layout, unsigned long size, int raiddisks, int sparedisks,
 
173
                  int subdevs, mddev_dev_t devlist,
 
174
                  int runstop, int verbose, int force);
 
175
 
 
176
extern int Detail(char *dev, int brief, int test);
 
177
extern int Query(char *dev);
 
178
extern int Examine(mddev_dev_t devlist, int brief, int scan, int SparcAdjust);
 
179
extern int Monitor(mddev_dev_t devlist,
 
180
                   char *mailaddr, char *alert_cmd,
 
181
                   int period, int daemonise, int scan, int oneshot,
 
182
                   char *config, int test);
 
183
 
 
184
extern int Kill(char *dev, int force);
 
185
 
 
186
extern int md_get_version(int fd);
 
187
extern int get_linux_version(void);
 
188
extern int parse_uuid(char *str, int uuid[4]);
 
189
extern int check_ext2(int fd, char *name);
 
190
extern int check_reiser(int fd, char *name);
 
191
extern int check_raid(int fd, char *name);
 
192
 
 
193
extern mddev_ident_t conf_get_ident(char *conffile, char *dev);
 
194
extern mddev_dev_t conf_get_devs(char *conffile);
 
195
extern char *conf_get_mailaddr(char *conffile);
 
196
extern char *conf_get_program(char *conffile);
 
197
extern char *conf_line(FILE *file);
 
198
extern char *conf_word(FILE *file, int allow_key);
 
199
extern void free_line(char *line);
 
200
extern int match_oneof(char *devices, char *devname);
 
201
extern int load_super(int fd, mdp_super_t *super);
 
202
extern void uuid_from_super(int uuid[4], mdp_super_t *super);
 
203
extern int same_uuid(int a[4], int b[4]);
 
204
extern int compare_super(mdp_super_t *first, mdp_super_t *second);
 
205
extern unsigned long calc_sb_csum(mdp_super_t *super);
 
206
extern int store_super(int fd, mdp_super_t *super);
 
207
extern int enough(int level, int raid_disks, int avail_disks);
 
208
extern int ask(char *mesg);
 
209
 
 
210
 
 
211
extern char *human_size(long long bytes);
 
212
char *human_size_brief(long long bytes);
 
213
 
 
214
extern void put_md_name(char *name);
 
215
extern char *get_md_name(int dev);
 
216
 
 
217
extern char DefaultConfFile[];