]> git.neil.brown.name Git - lafs-utils.git/commitdiff
FORMAT CHANGE various changes to superblock
authorNeilBrown <neilb@suse.de>
Wed, 4 May 2011 07:05:29 +0000 (17:05 +1000)
committerNeilBrown <neilb@suse.de>
Wed, 4 May 2011 07:05:29 +0000 (17:05 +1000)
Simplify version
Add options
Allow reference to readonly base.

Signed-off-by: NeilBrown <neilb@suse.de>
include/lafs/layout.h
include/lafs/struct.h
lib/lafs_load.c
lib/lafs_print_devblock.c
lib/lafs_print_device.c
lib/lafs_print_lafs.c
lib/lafs_print_state.c
lib/lafs_write_dev.c
lib/lafs_write_state.c

index 77f69fc6f69d8ffc86cc661d07544a039e74f1b7..227a2639c8d3b319b235cd7f68707f498d6322e7 100644 (file)
  */
 struct lafs_dev {
        char    idtag[16];      /* LaFS-DeviceBlock */
-       char    version[16];    /* number space options */
        u8      uuid[16];
        u32     checksum;
        u32     seq;
+       u32     version;        /* LAFS_DEV_VERS == 1 */
+       u32     pad0;
 
        u64     ctime;
        u64     start, size;    /* in array address space (array block)*/
@@ -34,18 +35,26 @@ struct lafs_dev {
        u32     segment_offset; /* offset of first segment (device byte) */
        u32     segment_count;
        u32     usage_inum;     /* inum of segment usage file */
-       u32     level;
+       char    options[512];   /* Space separated, nul terminated, Cap for
+                                * read-only-if-you-don't-understand
+                                */
 }  __attribute__((packed));
-#define         LAFS_DEVBLK_SIZE       1024
+#define        LAFS_DEVBLK_SIZE        1024
+#define        LAFS_DEV_VERS           1
 
 struct lafs_state {
        char    idtag[16];      /* LaFS-State-Block */
-       char    version[16];    /* number space options */
+       u8      uuid[16];
+       u8      alt_uuid[16];   /* allows sharing of read-only devices
+                                * between arrays
+                                */
        u32     checksum;
+       u32     version;        /* LAFS_STATE_VERS */
        u32     seq;
-       u8      uuid[16];
-       u32     levels;
+       u32     alt_seq;        /* seq number of the alt_uuid devices */
        u32     devices;
+       u32     pad0;
+
        u32     nonlog_offset;  /* offset into above segment of next non-logged
                                 * block to allocate
                                 */
@@ -54,9 +63,18 @@ struct lafs_state {
        u16     nextyouth;
        u32     maxsnapshot;
 
+       u64     inconsistencies;/* bit set of discovered inconsistency types.
+                                * If any unknown bits are set, an fsck is needed
+                                * for writing.
+                                * If known bits are set, behaviour is dependant
+                                * on those bits.
+                                */
+
        u64     checkpointcluster;      /* (array block) */
+       char    options[512];   /* Spare separated, nul terminated. */
        u64     root_inodes[0]; /* (array block) */
 } __attribute__((packed));
+#define        LAFS_STATE_VERS 1
 
 struct descriptor {
        u32     block_num;      /* (file block) */
index 71c7dde33917bc596dfd49a4b49813a8d486f87f..7e7c728cd94a4f090f3409611817513ace478422 100644 (file)
@@ -7,7 +7,6 @@
 #define HASH_BITS 8
 
 struct lafs {
-       char    version[16];
        uint8_t uuid[16];
        uint32_t        seq;
        int     devices;
@@ -199,7 +198,6 @@ struct lafs_device {
        /* This are only used between loading from storage      
         * and including in the array
         */
-       char    version[16];
        uint8_t uuid[16];
        int     blockbits;
        int     statesize;
index cd832ceccb0a91987cf08d6980df96bbb72d3728..844e3bb60ac756e5fca22c332476c3ed7d3ea352 100644 (file)
@@ -30,7 +30,7 @@ static int valid_devblock(struct lafs_dev *db, unsigned long long addr,
 
        if (strncmp(db->idtag, "LaFS-DeviceBlock", 16) != 0)
                return 0;
-       if (strncmp(db->version, "AlphaDevel      ", 16) != 0)
+       if (__le32_to_cpu(db->version) != LAFS_DEV_VERS)
                return 0;
        /* uuid can be anything */
        crc = db->checksum;
@@ -107,9 +107,6 @@ static int valid_devblock(struct lafs_dev *db, unsigned long long addr,
        if (__le32_to_cpu(db->segment_offset) + segsize > device_bytes)
                return 0;
 
-       if (__le32_to_cpu(db->level) > 10)
-               return 0;
-
        /* I guess it look sane enough... */
        return 1;
 }
@@ -119,8 +116,6 @@ static int compare_dev(struct lafs_dev *curr, struct lafs_dev *new)
        if (memcmp(curr->uuid, new->uuid, 16) != 0)
                /* there are different */
                return -1;
-       if (memcmp(curr->version, new->version, 16) != 0)
-               return -1;
 
        if (__le32_to_cpu(curr->seq) >= __le32_to_cpu(new->seq))
                return 0; /*current is best */
@@ -238,7 +233,6 @@ struct lafs_device *lafs_load(int fd, long long device_bytes, char **err)
        dev->segment_count  = __le32_to_cpu(best.segment_count);
        dev->usage_inum = __le32_to_cpu(best.usage_inum);
 
-       memcpy(dev->version, best.version, 16);
        memcpy(dev->uuid, best.uuid, 16);
        dev->blockbits = best.blockbits;
        dev->statesize = 1 << best.statebits;
index 0eb7dd6bc30953bf73ce7fe6adbd97ad56885c90..1639f86c9a556a3a021c0d85fd8ed911f0081c89 100644 (file)
@@ -10,7 +10,7 @@ void lafs_print_devblock(struct lafs_dev *dev)
        u32 crc, crc2;
        printf("Superblock:\n");
        printf(" IdTag      : %.16s\n", dev->idtag);
-       printf(" Version    : %.15s\n", dev->version);
+       printf(" Version    : %d\n", (int)__le32_to_cpu(dev->version));
        uuid_unparse(dev->uuid, uuidstr);
        printf(" UUID       : %s\n", uuidstr);
        printf(" Checksum   : %08x", (unsigned int)__le32_to_cpu(dev->checksum));
@@ -41,7 +41,6 @@ void lafs_print_devblock(struct lafs_dev *dev)
        printf(" SegCount   : %lu\n", (unsigned long)__le32_to_cpu(dev->segment_count));
        printf(" BlkBits    : %lu\n", (unsigned long)__le32_to_cpu(dev->blockbits));
        printf(" UsageInum  : %lu\n", (unsigned long)__le32_to_cpu(dev->usage_inum));
-       printf(" Level      : %lu\n", (unsigned long)__le32_to_cpu(dev->level));
        printf("\n");
 }
 
index 81ed8006f04892fd65fb712c6b341d22c5080ef7..71f142d5ae3bdfe24f14239645935621ff2a8b38 100644 (file)
@@ -8,7 +8,6 @@ void lafs_print_device(struct lafs_device *dev)
 
        printf("Deviceblock:\n");
        printf(" IdTag      : %.16s\n", "LaFS-DeviceBlock");
-       printf(" Version    : %.15s\n", dev->version);
        uuid_unparse(dev->uuid, uuidstr);
        printf(" UUID       : %s\n", uuidstr);
 //     printf(" Checksum   : %08x\n", (unsigned int)le32_to_cpu(super->checksum));
@@ -30,6 +29,5 @@ void lafs_print_device(struct lafs_device *dev)
        printf(" SegCount   : %lu\n", dev->segment_count);
        printf(" BlkBits    : %lu\n", (unsigned long)dev->blockbits);
        printf(" UsageInum  : %lu\n", (unsigned long)dev->usage_inum);
-//     printf(" Level      : %lu\n", (unsigned long)le32_to_cpu(super->level));
        printf("\n");
 }
index 265506c59664968d976d72e0a47053dc41e1e1e6..ce096dbb0a180c6ec49e6fcd7be5e92c32f20351 100644 (file)
@@ -10,7 +10,6 @@ void lafs_print_lafs(struct lafs *fs)
        struct lafs_snapshot *ss;
 
        printf("LaFS State:\n");
-       printf(" Version    : %.15s\n", fs->version);
        uuid_unparse(fs->uuid, uuidstr);
        printf(" UUID       : %s\n", uuidstr);
        printf(" Seq        : %d\n", (int)fs->seq);
index 6b6186fcc8e2d9737fa520724b35aa285a7636e8..d6de5980cecaf6272adb1b7a00b928bc31107d89 100644 (file)
@@ -12,7 +12,7 @@ void lafs_print_state(struct lafs_state *state, int size)
 
        printf("Stateblock:\n");
        printf(" IDtag      : %.16s\n", state->idtag);
-       printf(" Version    : %.15s\n", state->version);
+       printf(" Version    : %d\n", (int)__le32_to_cpu(state->version));
        uuid_unparse(state->uuid, uuidstr);
        printf(" UUID       : %s\n", uuidstr);
        printf(" Checksum   : %08x", (int) __le32_to_cpu(state->checksum));
@@ -25,7 +25,7 @@ void lafs_print_state(struct lafs_state *state, int size)
        else
                printf(" (expected %08x)\n", (unsigned int)__le32_to_cpu(crc2));
        printf(" Seq        : %d\n", (int)__le32_to_cpu(state->seq));
-       printf(" Levels     : %d\n", (int)__le32_to_cpu(state->levels));
+       printf(" AltSeq     : %d\n", (int)__le32_to_cpu(state->alt_seq));
        printf(" Devices    : %d\n", (int)__le32_to_cpu(state->devices));
        printf(" MaxSnap    : %d\n", (int)__le32_to_cpu(state->maxsnapshot));
        printf(" NextYouth  : %d\n", (int)__le16_to_cpu(state->nextyouth));
index 5337fec1eaa9f123e54202df68b4fea0740f21d2..b2a0120dccb5f3969f4a238964d8b1eb4270fd90 100644 (file)
@@ -27,7 +27,7 @@ int lafs_write_dev(struct lafs_device *dev)
        memset(buf, 0, sizeof(buf));
 
        memcpy(pd->idtag, "LaFS-DeviceBlock", 16);
-       memcpy(pd->version, "AlphaDevel      ", 16);
+       pd->version = __cpu_to_le32(LAFS_DEV_VERS);
 
        memcpy(pd->uuid, fs->uuid, 16);
        dev->seq++;
@@ -48,7 +48,6 @@ int lafs_write_dev(struct lafs_device *dev)
        pd->segment_offset = __cpu_to_le32(dev->segment_offset);
        pd->segment_count = __cpu_to_le32(dev->segment_count);
        pd->usage_inum = __cpu_to_le32(dev->usage_inum);
-       pd->level = __cpu_to_le32(1);
 
        csum = crc32(0, (uint32_t*)buf, LAFS_DEVBLK_SIZE);
        pd->checksum = csum;
index 970146829f8ecf12b5a518329c46bf689e430d1f..7c5d023d552d4908024b0ada7b3d8668c2c1764a 100644 (file)
@@ -22,8 +22,7 @@ int lafs_write_state(struct lafs *fs)
 
        memcpy(st->idtag, "LaFS-State-Block", 16);
        memcpy(st->uuid, fs->uuid, 16);
-       memset(st->version, ' ', 16);
-       memcpy(st->version, "AlphaDevel      ", 16);
+       st->version = __cpu_to_le32(LAFS_STATE_VERS);
 
        st->seq = __cpu_to_le32(fs->seq);
        st->nextyouth = __cpu_to_le16(fs->youth_next);