]> git.neil.brown.name Git - lafs-utils.git/commitdiff
Add blockbits field to struct lafs
authorNeilBrown <neilb@suse.de>
Sun, 20 Mar 2011 07:34:28 +0000 (18:34 +1100)
committerNeilBrown <neilb@suse.de>
Sun, 20 Mar 2011 07:34:28 +0000 (18:34 +1100)
We will need it for directory manipulations.

Signed-off-by: NeilBrown <neilb@suse.de>
include/lafs/struct.h
lib/lafs_include_dev.c
lib/lafs_load.c
lib/lafs_new.c
lib/lafs_print_device.c

index 4d97ef2bca061ab266a00f4390a0c8f3b3a9a067..1d90850954a84a6802c266532acd767e2fac526a 100644 (file)
@@ -12,6 +12,7 @@ struct lafs {
        uint32_t        seq;
        int     devices;
        int     blocksize;
+       int     blockbits;
        int     statesize;
        int     max_segment;
 
@@ -194,7 +195,7 @@ struct lafs_device {
         */
        char    version[16];
        uint8_t uuid[16];
-       int     blocksize;
+       int     blockbits;
        int     statesize;
        int     devices;
 };
index 0829ef372a0fddf210e6f405f7c975d135afb88f..f994f17017496842f73e57925eb8678a0f5c333f 100644 (file)
@@ -12,13 +12,14 @@ int lafs_include_dev(struct lafs *fs, struct lafs_device *dev, char **err)
         */
 
        if (fs->blocksize == 0) {
-               fs->blocksize = dev->blocksize;
+               fs->blocksize = 1<<dev->blockbits;
+               fs->blockbits = dev->blockbits;
                memcpy(fs->uuid, dev->uuid, 16);
                fs->statesize = dev->statesize;
                fs->seq = dev->state_seq;
                fs->devices = dev->devices;
        } else {
-               if (fs->blocksize != dev->blocksize ||
+               if (fs->blocksize != (1<<dev->blockbits) ||
                    memcmp(fs->uuid, dev->uuid, 16) ||
                    fs->statesize != dev->statesize) {
                        *err = "device is inconsistent with other devices in LaFS";
index 7dca5a27222e9bb890503b12fcf12eed8b6d3732..a4ef56e22053b32caf92143a49b480257634e7b8 100644 (file)
@@ -240,7 +240,7 @@ struct lafs_device *lafs_load(int fd, long long device_bytes, char **err)
 
        memcpy(dev->version, best.version, 16);
        memcpy(dev->uuid, best.uuid, 16);
-       dev->blocksize = 1 << best.blockbits;
+       dev->blockbits = best.blockbits;
        dev->statesize = 1 << best.statebits;
 
        found = 0;
index 0e89fbcc02bc7d1d85af31f1c913c26182a08502..9898e1514f0d886834532ef70d6c9852705711f9 100644 (file)
@@ -7,6 +7,7 @@ int lafs_new(struct lafs *fs, int blockbytes)
 {
        int fd;
        int n;
+       int blockbits;
 
        if (fs->blocksize != 0)
                return -1;
@@ -15,6 +16,9 @@ int lafs_new(struct lafs *fs, int blockbytes)
            blockbytes > 4096 ||
            (blockbytes & (blockbytes-1)) != 0)
                return -1;
+       blockbits = 9;
+       while ((1<<blockbits) != blockbytes)
+               blockbits++;
 
 
        fd = open("/dev/urandom", O_RDONLY);
@@ -27,6 +31,7 @@ int lafs_new(struct lafs *fs, int blockbytes)
                return -1;
 
        fs->blocksize = blockbytes;
+       fs->blockbits = blockbits;
 
        fs->seq = 1;
        fs->statesize = 1024;
index 993b899dca518894acc92094247eb72ca7439fdc..81ed8006f04892fd65fb712c6b341d22c5080ef7 100644 (file)
@@ -28,7 +28,7 @@ void lafs_print_device(struct lafs_device *dev)
        printf(" SegSize    : %lu\n", dev->segment_size);
        printf(" SegOffs    : %lu\n", dev->segment_offset);
        printf(" SegCount   : %lu\n", dev->segment_count);
-       printf(" BlkSize    : %lu\n", (unsigned long)dev->blocksize);
+       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");