]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - super0.c
Introduce pr_err for printing error messages.
[thirdparty/mdadm.git] / super0.c
index d53f025e6439dda4090250be55074d18b1a2946f..c8cbb9d96230a8ae386d7424b0b71b3040d1d9ff 100644 (file)
--- a/super0.c
+++ b/super0.c
@@ -114,7 +114,7 @@ static void examine_super0(struct supertype *st, char *homehost)
        c=map_num(pers, sb->level);
        printf("     Raid Level : %s\n", c?c:"-unknown-");
        if ((int)sb->level > 0) {
-               int ddsks=0;
+               int ddsks = 0, ddsks_denom = 1;
                printf("  Used Dev Size : %d%s\n", sb->size,
                       human_size((long long)sb->size<<10));
                switch(sb->level) {
@@ -122,11 +122,15 @@ static void examine_super0(struct supertype *st, char *homehost)
                case 4:
                case 5: ddsks = sb->raid_disks-1; break;
                case 6: ddsks = sb->raid_disks-2; break;
-               case 10: ddsks = sb->raid_disks / (sb->layout&255) / ((sb->layout>>8)&255);
+               case 10: ddsks = sb->raid_disks;
+                       ddsks_denom =  (sb->layout&255) * ((sb->layout>>8)&255);
+               }
+               if (ddsks) {
+                       long long asize = sb->size;
+                       asize = (asize << 10) * ddsks / ddsks_denom;
+                       printf("     Array Size : %llu%s\n",
+                              asize >> 10,  human_size(asize));
                }
-               if (ddsks)
-                       printf("     Array Size : %llu%s\n", (unsigned long long)ddsks * sb->size,
-                              human_size(ddsks*(long long)sb->size<<10));
        }
        printf("   Raid Devices : %d\n", sb->raid_disks);
        printf("  Total Devices : %d\n", sb->nr_disks);
@@ -441,12 +445,12 @@ static int update_super0(struct supertype *st, struct mdinfo *info,
                       sb32+MD_SB_GENERIC_CONSTANT_WORDS+7+1,
                       (MD_SB_WORDS - (MD_SB_GENERIC_CONSTANT_WORDS+7+1))*4);
                if (verbose >= 0)
-                       fprintf (stderr, Name ": adjusting superblock of %s for 2.2/sparc compatability.\n",
-                                devname);
+                       pr_err("adjusting superblock of %s for 2.2/sparc compatability.\n",
+                              devname);
        } else if (strcmp(update, "super-minor") ==0) {
                sb->md_minor = info->array.md_minor;
                if (verbose > 0)
-                       fprintf(stderr, Name ": updating superblock of %s with minor number %d\n",
+                       pr_err("updating superblock of %s with minor number %d\n",
                                devname, info->array.md_minor);
        } else if (strcmp(update, "summaries") == 0) {
                unsigned int i;
@@ -604,7 +608,7 @@ static int init_super0(struct supertype *st, mdu_array_info_t *info,
 
        if (posix_memalign((void**)&sb, 4096,
                           MD_SB_BYTES + ROUND_UP(sizeof(bitmap_super_t), 4096)) != 0) {
-               fprintf(stderr, Name ": %s could not allocate superblock\n", __func__);
+               pr_err("%s could not allocate superblock\n", __func__);
                return 0;
        }
        memset(sb, 0, MD_SB_BYTES + sizeof(bitmap_super_t));
@@ -617,7 +621,7 @@ static int init_super0(struct supertype *st, mdu_array_info_t *info,
 
        spares = info->working_disks - info->active_disks;
        if (info->raid_disks + spares  > MD_SB_DISKS) {
-               fprintf(stderr, Name ": too many devices requested: %d+%d > %d\n",
+               pr_err("too many devices requested: %d+%d > %d\n",
                        info->raid_disks , spares, MD_SB_DISKS);
                return 0;
        }
@@ -777,9 +781,8 @@ static int write_init_super0(struct supertype *st)
                        rv = st->ss->write_bitmap(st, di->fd);
 
                if (rv)
-                       fprintf(stderr,
-                               Name ": failed to write superblock to %s\n",
-                               di->devname);
+                       pr_err("failed to write superblock to %s\n",
+                              di->devname);
        }
        return rv;
 }
@@ -804,8 +807,7 @@ static int compare_super0(struct supertype *st, struct supertype *tst)
                if (posix_memalign((void**)&first, 4096,
                             MD_SB_BYTES + 
                             ROUND_UP(sizeof(struct bitmap_super_s), 4096)) != 0) {
-                       fprintf(stderr, Name
-                               ": %s could not allocate superblock\n", __func__);
+                       pr_err("%s could not allocate superblock\n", __func__);
                        return 1;
                }
                memcpy(first, second, MD_SB_BYTES + sizeof(struct bitmap_super_s));
@@ -854,9 +856,8 @@ static int load_super0(struct supertype *st, int fd, char *devname)
 
        if (dsize < MD_RESERVED_SECTORS*512) {
                if (devname)
-                       fprintf(stderr, Name
-                           ": %s is too small for md: size is %llu sectors.\n",
-                               devname, dsize);
+                       pr_err("%s is too small for md: size is %llu sectors.\n",
+                              devname, dsize);
                return 1;
        }
 
@@ -868,7 +869,7 @@ static int load_super0(struct supertype *st, int fd, char *devname)
 
        if (lseek64(fd, offset, 0)< 0LL) {
                if (devname)
-                       fprintf(stderr, Name ": Cannot seek to superblock on %s: %s\n",
+                       pr_err("Cannot seek to superblock on %s: %s\n",
                                devname, strerror(errno));
                return 1;
        }
@@ -876,14 +877,13 @@ static int load_super0(struct supertype *st, int fd, char *devname)
        if (posix_memalign((void**)&super, 4096,
                           MD_SB_BYTES +
                           ROUND_UP(sizeof(bitmap_super_t), 4096)) != 0) {
-               fprintf(stderr, Name
-                       ": %s could not allocate superblock\n", __func__);
+               pr_err("%s could not allocate superblock\n", __func__);
                return 1;
        }
 
        if (read(fd, super, sizeof(*super)) != MD_SB_BYTES) {
                if (devname)
-                       fprintf(stderr, Name ": Cannot read superblock on %s\n",
+                       pr_err("Cannot read superblock on %s\n",
                                devname);
                free(super);
                return 1;
@@ -894,7 +894,7 @@ static int load_super0(struct supertype *st, int fd, char *devname)
 
        if (super->md_magic != MD_SB_MAGIC) {
                if (devname)
-                       fprintf(stderr, Name ": No super block found on %s (Expected magic %08x, got %08x)\n",
+                       pr_err("No super block found on %s (Expected magic %08x, got %08x)\n",
                                devname, MD_SB_MAGIC, super->md_magic);
                free(super);
                return 2;
@@ -902,7 +902,7 @@ static int load_super0(struct supertype *st, int fd, char *devname)
 
        if (super->major_version != 0) {
                if (devname)
-                       fprintf(stderr, Name ": Cannot interpret superblock on %s - version is %d\n",
+                       pr_err("Cannot interpret superblock on %s - version is %d\n",
                                devname, super->major_version);
                free(super);
                return 2;
@@ -942,10 +942,10 @@ static int load_super0(struct supertype *st, int fd, char *devname)
 
 static struct supertype *match_metadata_desc0(char *arg)
 {
-       struct supertype *st = malloc(sizeof(*st));
-       if (!st) return st;
+       struct supertype *st = calloc(1, sizeof(*st));
+       if (!st)
+               return st;
 
-       memset(st, 0, sizeof(*st));
        st->container_dev = NoMdDev;
        st->ss = &super0;
        st->info = NULL;
@@ -1138,19 +1138,19 @@ static int validate_geometry0(struct supertype *st, int level,
 
        if (level == LEVEL_CONTAINER) {
                if (verbose)
-                       fprintf(stderr, Name ": 0.90 metadata does not support containers\n");
+                       pr_err("0.90 metadata does not support containers\n");
                return 0;
        }
        if (raiddisks > MD_SB_DISKS) {
                if (verbose)
-                       fprintf(stderr, Name ": 0.90 metadata supports at most %d devices per array\n",
+                       pr_err("0.90 metadata supports at most %d devices per array\n",
                                MD_SB_DISKS);
                return 0;
        }
        if (size >= tbmax * 2ULL*1024*1024*1024) {
                if (verbose)
-                       fprintf(stderr, Name ": 0.90 metadata supports at most "
-                               "%d terabytes per device\n", tbmax);
+                       pr_err("0.90 metadata supports at most "
+                              "%d terabytes per device\n", tbmax);
                return 0;
        }
        if (chunk && *chunk == UnSet)
@@ -1162,7 +1162,7 @@ static int validate_geometry0(struct supertype *st, int level,
        fd = open(subdev, O_RDONLY|O_EXCL, 0);
        if (fd < 0) {
                if (verbose)
-                       fprintf(stderr, Name ": super0.90 cannot open %s: %s\n",
+                       pr_err("super0.90 cannot open %s: %s\n",
                                subdev, strerror(errno));
                return 0;
        }