diff options
author | Neil Brown <neilb@suse.de> | 2002-05-20 11:17:18 +0000 |
---|---|---|
committer | Neil Brown <neilb@suse.de> | 2002-05-20 11:17:18 +0000 |
commit | bd526cee922b8e2b279f04ca067f729e9b0ee723 (patch) | |
tree | 24ebb244ddc6b5ecf9820d53517db288ff4b77a9 /Examine.c | |
parent | 2d46552003d8e84dee1bfd9cac4a1426392b64e3 (diff) | |
download | mdadm-bd526cee922b8e2b279f04ca067f729e9b0ee723.tar.gz mdadm-bd526cee922b8e2b279f04ca067f729e9b0ee723.tar.xz mdadm-bd526cee922b8e2b279f04ca067f729e9b0ee723.zip |
mdadm-1.0.1mdadm-1.0.1
Diffstat (limited to 'Examine.c')
-rw-r--r-- | Examine.c | 30 |
1 files changed, 29 insertions, 1 deletions
@@ -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; |