Build: Stop bothering about supporting md driver older than 0.90.00
The kernel has been stuck at md driver version 0.90.03 for at least a decade. No point in continuing to support the older API. Signed-off-by: Jes Sorensen <Jes.Sorensen@gmail.com>
This commit is contained in:
parent
6142741d14
commit
e6e5f8f126
71
Build.c
71
Build.c
|
@ -39,13 +39,8 @@ int Build(char *mddev, struct mddev_dev *devlist,
|
||||||
* geometry is 0xpp00cc
|
* geometry is 0xpp00cc
|
||||||
* where pp is personality: 1==linear, 2=raid0
|
* where pp is personality: 1==linear, 2=raid0
|
||||||
* cc = chunk size factor: 0==4k, 1==8k etc.
|
* cc = chunk size factor: 0==4k, 1==8k etc.
|
||||||
*
|
|
||||||
* For md_version >= 0.90.0 we call
|
|
||||||
* SET_ARRAY_INFO, ADD_NEW_DISK, RUN_ARRAY
|
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
int i;
|
int i;
|
||||||
int vers;
|
|
||||||
struct stat stb;
|
struct stat stb;
|
||||||
int subdevs = 0, missing_disks = 0;
|
int subdevs = 0, missing_disks = 0;
|
||||||
struct mddev_dev *dv;
|
struct mddev_dev *dv;
|
||||||
|
@ -55,6 +50,8 @@ int Build(char *mddev, struct mddev_dev *devlist,
|
||||||
char chosen_name[1024];
|
char chosen_name[1024];
|
||||||
int uuid[4] = {0,0,0,0};
|
int uuid[4] = {0,0,0,0};
|
||||||
struct map_ent *map = NULL;
|
struct map_ent *map = NULL;
|
||||||
|
mdu_array_info_t array;
|
||||||
|
mdu_param_t param; /* not used by syscall */
|
||||||
|
|
||||||
if (s->level == UnSet) {
|
if (s->level == UnSet) {
|
||||||
pr_err("a RAID level is needed to Build an array.\n");
|
pr_err("a RAID level is needed to Build an array.\n");
|
||||||
|
@ -122,11 +119,6 @@ int Build(char *mddev, struct mddev_dev *devlist,
|
||||||
map_update(&map, fd2devnm(mdfd), "none", uuid, chosen_name);
|
map_update(&map, fd2devnm(mdfd), "none", uuid, chosen_name);
|
||||||
map_unlock(&map);
|
map_unlock(&map);
|
||||||
|
|
||||||
vers = md_get_version(mdfd);
|
|
||||||
|
|
||||||
/* looks Ok, go for it */
|
|
||||||
if (vers >= 9000) {
|
|
||||||
mdu_array_info_t array;
|
|
||||||
array.level = s->level;
|
array.level = s->level;
|
||||||
if (s->size == MAX_SIZE)
|
if (s->size == MAX_SIZE)
|
||||||
s->size = 0;
|
s->size = 0;
|
||||||
|
@ -153,10 +145,6 @@ int Build(char *mddev, struct mddev_dev *devlist,
|
||||||
mddev, strerror(errno));
|
mddev, strerror(errno));
|
||||||
goto abort;
|
goto abort;
|
||||||
}
|
}
|
||||||
} else if (s->bitmap_file) {
|
|
||||||
pr_err("bitmaps not supported with this kernel\n");
|
|
||||||
goto abort;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (s->bitmap_file && strcmp(s->bitmap_file, "none") == 0)
|
if (s->bitmap_file && strcmp(s->bitmap_file, "none") == 0)
|
||||||
s->bitmap_file = NULL;
|
s->bitmap_file = NULL;
|
||||||
|
@ -167,8 +155,10 @@ int Build(char *mddev, struct mddev_dev *devlist,
|
||||||
}
|
}
|
||||||
/* now add the devices */
|
/* now add the devices */
|
||||||
for ((i=0), (dv = devlist) ; dv ; i++, dv=dv->next) {
|
for ((i=0), (dv = devlist) ; dv ; i++, dv=dv->next) {
|
||||||
|
mdu_disk_info_t disk;
|
||||||
unsigned long long dsize;
|
unsigned long long dsize;
|
||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
if (strcmp("missing", dv->devname) == 0)
|
if (strcmp("missing", dv->devname) == 0)
|
||||||
continue;
|
continue;
|
||||||
if (stat(dv->devname, &stb)) {
|
if (stat(dv->devname, &stb)) {
|
||||||
|
@ -191,8 +181,6 @@ int Build(char *mddev, struct mddev_dev *devlist,
|
||||||
(s->size == 0 || s->size == MAX_SIZE || dsize < s->size))
|
(s->size == 0 || s->size == MAX_SIZE || dsize < s->size))
|
||||||
s->size = dsize;
|
s->size = dsize;
|
||||||
close(fd);
|
close(fd);
|
||||||
if (vers >= 9000) {
|
|
||||||
mdu_disk_info_t disk;
|
|
||||||
disk.number = i;
|
disk.number = i;
|
||||||
disk.raid_disk = i;
|
disk.raid_disk = i;
|
||||||
disk.state = (1<<MD_DISK_SYNC) | (1<<MD_DISK_ACTIVE);
|
disk.state = (1<<MD_DISK_SYNC) | (1<<MD_DISK_ACTIVE);
|
||||||
|
@ -205,44 +193,27 @@ int Build(char *mddev, struct mddev_dev *devlist,
|
||||||
dv->devname, strerror(errno));
|
dv->devname, strerror(errno));
|
||||||
goto abort;
|
goto abort;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
if (ioctl(mdfd, REGISTER_DEV, &stb.st_rdev)) {
|
|
||||||
pr_err("REGISTER_DEV failed for %s: %s.\n",
|
|
||||||
dv->devname, strerror(errno));
|
|
||||||
goto abort;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/* now to start it */
|
/* now to start it */
|
||||||
if (vers >= 9000) {
|
|
||||||
mdu_param_t param; /* not used by syscall */
|
|
||||||
if (s->bitmap_file) {
|
if (s->bitmap_file) {
|
||||||
bitmap_fd = open(s->bitmap_file, O_RDWR);
|
bitmap_fd = open(s->bitmap_file, O_RDWR);
|
||||||
if (bitmap_fd < 0) {
|
if (bitmap_fd < 0) {
|
||||||
int major = BITMAP_MAJOR_HI;
|
int major = BITMAP_MAJOR_HI;
|
||||||
#if 0
|
#if 0
|
||||||
if (s->bitmap_chunk == UnSet) {
|
if (s->bitmap_chunk == UnSet) {
|
||||||
pr_err("%s cannot be openned.",
|
pr_err("%s cannot be openned.", s->bitmap_file);
|
||||||
s->bitmap_file);
|
|
||||||
goto abort;
|
goto abort;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (vers < 9003) {
|
|
||||||
major = BITMAP_MAJOR_HOSTENDIAN;
|
|
||||||
#ifdef __BIG_ENDIAN
|
|
||||||
pr_err("Warning - bitmaps created on this kernel are not portable\n"
|
|
||||||
" between different architectures. Consider upgrading the Linux kernel.\n");
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
bitmapsize = s->size >> 9; /* FIXME wrong for RAID10 */
|
bitmapsize = s->size >> 9; /* FIXME wrong for RAID10 */
|
||||||
if (CreateBitmap(s->bitmap_file, 1, NULL, s->bitmap_chunk,
|
if (CreateBitmap(s->bitmap_file, 1, NULL,
|
||||||
c->delay, s->write_behind, bitmapsize, major)) {
|
s->bitmap_chunk, c->delay,
|
||||||
|
s->write_behind, bitmapsize, major)) {
|
||||||
goto abort;
|
goto abort;
|
||||||
}
|
}
|
||||||
bitmap_fd = open(s->bitmap_file, O_RDWR);
|
bitmap_fd = open(s->bitmap_file, O_RDWR);
|
||||||
if (bitmap_fd < 0) {
|
if (bitmap_fd < 0) {
|
||||||
pr_err("%s cannot be openned.",
|
pr_err("%s cannot be openned.", s->bitmap_file);
|
||||||
s->bitmap_file);
|
|
||||||
goto abort;
|
goto abort;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -255,30 +226,13 @@ int Build(char *mddev, struct mddev_dev *devlist,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ioctl(mdfd, RUN_ARRAY, ¶m)) {
|
if (ioctl(mdfd, RUN_ARRAY, ¶m)) {
|
||||||
pr_err("RUN_ARRAY failed: %s\n",
|
pr_err("RUN_ARRAY failed: %s\n", strerror(errno));
|
||||||
strerror(errno));
|
|
||||||
if (s->chunk & (s->chunk - 1)) {
|
if (s->chunk & (s->chunk - 1)) {
|
||||||
cont_err("Problem may be that chunk size is not a power of 2\n");
|
cont_err("Problem may be that chunk size is not a power of 2\n");
|
||||||
}
|
}
|
||||||
goto abort;
|
goto abort;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
unsigned long arg;
|
|
||||||
arg=0;
|
|
||||||
while (s->chunk > 4096) {
|
|
||||||
arg++;
|
|
||||||
s->chunk >>= 1;
|
|
||||||
}
|
|
||||||
if (s->level == 0)
|
|
||||||
arg |= 0x20000;
|
|
||||||
else
|
|
||||||
arg |= 0x10000;
|
|
||||||
if (ioctl(mdfd, START_MD, arg)) {
|
|
||||||
pr_err("START_MD failed: %s\n",
|
|
||||||
strerror(errno));
|
|
||||||
goto abort;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (c->verbose >= 0)
|
if (c->verbose >= 0)
|
||||||
pr_err("array %s built and started.\n",
|
pr_err("array %s built and started.\n",
|
||||||
mddev);
|
mddev);
|
||||||
|
@ -287,10 +241,7 @@ int Build(char *mddev, struct mddev_dev *devlist,
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
abort:
|
abort:
|
||||||
if (vers >= 9000)
|
|
||||||
ioctl(mdfd, STOP_ARRAY, 0);
|
ioctl(mdfd, STOP_ARRAY, 0);
|
||||||
else
|
|
||||||
ioctl(mdfd, STOP_MD, 0);
|
|
||||||
close(mdfd);
|
close(mdfd);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue