mdadm-1.0.1

This commit is contained in:
Neil Brown 2002-05-20 11:17:18 +00:00
parent 2d46552003
commit bd526cee92
8 changed files with 69 additions and 14 deletions

View File

@ -1,4 +1,9 @@
Changes Prior to 1.0.0 reease
Changes Prior to this release
- Round off MB/GiB etc values instead of round down.
- Add --sparc2.2 option to examine to shift superblock around
and --sparc2.2update to rewrite the superblock
Changes Prior to 1.0.0 release
- Allow --config with Misc mode (for --examine --scan)
- Add $(CXFLAGS) to end of CFLAGS in makefile
- When making an N disk raid5 array, the Nth drive

View File

@ -35,7 +35,7 @@
#endif
#include "md_u.h"
#include "md_p.h"
int Examine(mddev_dev_t devlist, int brief, int scan)
int Examine(mddev_dev_t devlist, int brief, int scan, int SparcAdjust)
{
/* Read the raid superblock from a device and
@ -162,6 +162,17 @@ int Examine(mddev_dev_t devlist, int brief, int scan)
printf(" Checksum : %x - correct\n", super.sb_csum);
else
printf(" Checksum : %x - expected %x\n", super.sb_csum, calc_sb_csum(&super));
if (SparcAdjust) {
/* 2.2 sparc put the events in the wrong place
* So we copy the tail of the superblock
* up 4 bytes before continuing
*/
__u32 *sb32 = (__u32*)&super;
memcpy(sb32+MD_SB_GENERIC_CONSTANT_WORDS+7,
sb32+MD_SB_GENERIC_CONSTANT_WORDS+7+1,
MD_SB_WORDS - (MD_SB_GENERIC_CONSTANT_WORDS+7+1));
printf (" --- adjusting superblock for 2.2/sparc compatability ---\n");
}
printf(" Events : %d.%d\n", super.events_hi, super.events_lo);
printf("\n");
if (super.level == 5) {
@ -199,6 +210,23 @@ int Examine(mddev_dev_t devlist, int brief, int scan)
printf("\n");
}
}
if (SparcAdjust == 2) {
printf(" ----- updating superblock on device ----\n");
fd = open(devlist->devname, O_RDWR);
if (fd < 0) {
fprintf(stderr, Name ": cannot open %s to update superblock: %s\n",
devlist->devname, strerror(errno));
err = 1;
} else {
super.sb_csum = calc_sb_csum(&super);
if (store_super(fd, &super)) {
fprintf(stderr, Name ": Count not re-write superblock on %s\n",
devlist->devname);
err = 1;
}
close(fd);
}
}
}
if (brief) {
struct array *ap;

View File

@ -29,7 +29,7 @@
#include "mdadm.h"
char Version[] = Name " - v1.0.0 - 10 May 2002\n";
char Version[] = Name " - v1.0.1 - 20 May 2002\n";
/*
* File: ReadMe.c
*
@ -138,6 +138,8 @@ struct option long_options[] = {
/* For Detail/Examine */
{"brief", 0, 0, 'b'},
{"sparc2.2", 0, 0, 22},
{"sparc2.2update", 0, 0, 23},
/* For Follow/monitor */
{"mail", 1, 0, 'm'},

View File

@ -594,9 +594,14 @@ is given, then any other md devices that appear in
will also be monitored.
The result of monitoring the arrays is the generation of events.
These events are passed to a separate program (is specified) and may
These events are passed to a separate program (if specified) and may
be mailed to a given E-mail address.
When passing event to program, the program is run once for each event
and is given 2 or 3 command-line arguements. The first is the
name of the event (see below). The second is the name of the
md device which is affected, and the third is the name of a related
device if relevant, such as a component device that has failed.
If
.B --scan

17
mdadm.c
View File

@ -69,6 +69,7 @@ int main(int argc, char *argv[])
char devmode = 0;
int runstop = 0;
int readonly = 0;
int SparcAdjust = 0;
mddev_dev_t devlist = NULL;
mddev_dev_t *devlistend = & devlist;
mddev_dev_t dv;
@ -481,6 +482,20 @@ int main(int argc, char *argv[])
devmode = opt;
continue;
case O(MISC, 22):
if (devmode != 'E') {
fprintf(stderr, Name ": --sparc2.2 only allowed with --examine\n");
exit(2);
}
SparcAdjust = 1;
continue;
case O(MISC,23):
if (devmode != 'E') {
fprintf(stderr, Name ": --sparc2.2update only allowed with --examine\n");
exit(2);
}
SparcAdjust = 2;
continue;
}
/* We have now processed all the valid options. Anything else is
* an error
@ -596,7 +611,7 @@ int main(int argc, char *argv[])
fprintf(stderr, Name ": No devices listed in %s\n", configfile?configfile:DefaultConfFile);
exit(1);
}
rv = Examine(devlist, scan?!verbose:brief, scan);
rv = Examine(devlist, scan?!verbose:brief, scan, SparcAdjust);
} else {
if (devlist == NULL) {
if ((devmode == 'S' ||devmode=='D') && scan) {

View File

@ -164,7 +164,7 @@ extern int Create(char *mddev, int mdfd,
extern int Detail(char *dev, int brief);
extern int Query(char *dev);
extern int Examine(mddev_dev_t devlist, int brief, int scan);
extern int Examine(mddev_dev_t devlist, int brief, int scan, int SparcAdjust);
extern int Monitor(mddev_dev_t devlist,
char *mailaddr, char *alert_cmd,
int period, int scan,

View File

@ -1,6 +1,6 @@
Summary: mdadm is used for controlling Linux md devices (aka RAID arrays)
Name: mdadm
Version: 1.0.0
Version: 1.0.1
Release: 1
Source: http://www.cse.unsw.edu.au/~neilb/source/mdadm/mdadm-%{version}.tgz
URL: http://www.cse.unsw.edu.au/~neilb/source/mdadm/

14
util.c
View File

@ -437,16 +437,16 @@ char *human_size(long long bytes)
else if (bytes < 2*1024LL*1024LL*1024LL)
sprintf(buf, " (%ld.%02ld MiB %ld.%02ld MB)",
(long)(bytes>>20),
(long)(bytes&0xfffff)/(0x100000/100),
(long)((bytes&0xfffff)+0x100000/200)/(0x100000/100),
(long)(bytes/1000/1000),
(long)((bytes%1000000)/10000)
(long)(((bytes%1000000)+5000)/10000)
);
else
sprintf(buf, " (%ld.%02ld GiB %ld.%02ld GB)",
(long)(bytes>>30),
(long)((bytes>>10)&0xfffff)/(0x100000/100),
(long)(((bytes>>10)&0xfffff)+0x100000/200)/(0x100000/100),
(long)(bytes/1000LL/1000LL/1000LL),
(long)(((bytes/1000)%1000000)/10000)
(long)((((bytes/1000)%1000000)+50000)/10000)
);
return buf;
}
@ -458,17 +458,17 @@ char *human_size_brief(long long bytes)
if (bytes < 5000*1024)
sprintf(buf, "%ld.%02ldKiB",
(long)(bytes>>10), (long)((bytes&1023)*100/1024)
(long)(bytes>>10), (long)(((bytes&1023)*100+512)/1024)
);
else if (bytes < 2*1024LL*1024LL*1024LL)
sprintf(buf, "%ld.%02ldMiB",
(long)(bytes>>20),
(long)(bytes&0xfffff)/(0x100000/100)
(long)((bytes&0xfffff)+0x100000/200)/(0x100000/100)
);
else
sprintf(buf, "%ld.%02ldGiB",
(long)(bytes>>30),
(long)((bytes>>10)&0xfffff)/(0x100000/100)
(long)(((bytes>>10)&0xfffff)+0x100000/200)/(0x100000/100)
);
return buf;
}