]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - bitmap.c
Move calls to SET_ARRAY_INFO to common helper.
[thirdparty/mdadm.git] / bitmap.c
index c905b4d3f548bd9fc72b4d8c84f8d8beb6711563..86176696f957edef9d88955e869612ba6c47de85 100644 (file)
--- a/bitmap.c
+++ b/bitmap.c
@@ -122,11 +122,10 @@ bitmap_info_t *bitmap_fd_read(int fd, int brief)
         */
        unsigned long long total_bits = 0, read_bits = 0, dirty_bits = 0;
        bitmap_info_t *info;
-       char *buf, *unaligned;
+       void *buf;
        int n, skip;
 
-       unaligned = malloc(8192*2);
-       buf = (char*) ((unsigned long)unaligned | 8191)+1;
+       posix_memalign(&buf, 512, 8192);
        n = read(fd, buf, 8192);
 
        info = malloc(sizeof(*info));
@@ -145,14 +144,13 @@ bitmap_info_t *bitmap_fd_read(int fd, int brief)
                fprintf(stderr, Name ": failed to read superblock of bitmap "
                        "file: %s\n", strerror(errno));
                free(info);
-               free(unaligned);
                return NULL;
        }
        memcpy(&info->sb, buf, sizeof(info->sb));
        skip = sizeof(info->sb);
 
        sb_le_to_cpu(&info->sb); /* convert superblock to CPU byte ordering */
-       
+
        if (brief || info->sb.sync_size == 0)
                goto out;
 
@@ -219,8 +217,8 @@ bitmap_info_t *bitmap_file_read(char *filename, int brief, struct supertype **st
                if (!st) {
                        /* just look at device... */
                        lseek(fd, 0, 0);
-               } else {        
-                       st->ss->locate_bitmap(st, fd, NULL);
+               } else {
+                       st->ss->locate_bitmap(st, fd);
                }
                ioctl(fd, BLKFLSBUF, 0); /* make sure we read current data */
                *stp = st;
@@ -398,7 +396,7 @@ int CreateBitmap(char *filename, int force, char uuid[16],
                }
                bytes -= sizeof(block);
        }
-       
+
        rv = 0;
        fflush(fp);
        /* make the file be the right size (well, to the nearest byte) */
@@ -420,18 +418,7 @@ int bitmap_update_uuid(int fd, int *uuid, int swap)
                return 1;
        if (bm.magic != __cpu_to_le32(BITMAP_MAGIC))
                return 1;
-       if (swap) {
-               unsigned char *ac = (unsigned char *)bm.uuid;
-               unsigned char *bc = (unsigned char *)uuid;
-               int i;
-               for (i=0; i<16; i+= 4) {
-                       ac[i+0] = bc[i+3];
-                       ac[i+1] = bc[i+2];
-                       ac[i+2] = bc[i+1];
-                       ac[i+3] = bc[i+0];
-               }
-       } else
-               memcpy(bm.uuid, uuid, 16);
+       copy_uuid(bm.uuid, uuid, swap);
        if (lseek(fd, 0, 0) != 0)
                return 2;
        if (write(fd, &bm, sizeof(bm)) != sizeof(bm)) {