[DRBD-cvs] svn commit by phil - r2087 - in trunk: . drbd user -
Hopefully last changes to meta-data layout before we be
drbd-cvs at lists.linbit.com
drbd-cvs at lists.linbit.com
Wed Mar 1 17:36:25 CET 2006
Author: phil
Date: 2006-03-01 17:36:23 +0100 (Wed, 01 Mar 2006)
New Revision: 2087
Modified:
trunk/ROADMAP
trunk/drbd/drbd_int.h
trunk/drbd/drbd_main.c
trunk/user/drbdadm_usage_cnt.c
trunk/user/drbdmeta.c
trunk/user/drbdmeta_parser.h
trunk/user/drbdmeta_scanner.fl
Log:
Hopefully last changes to meta-data layout before we begin with
stabilising for drbd-v08
implemented item 25 of the ROADMAP (reserved fields, bytes per bit)
Modified: trunk/ROADMAP
===================================================================
--- trunk/ROADMAP 2006-02-28 18:14:50 UTC (rev 2086)
+++ trunk/ROADMAP 2006-03-01 16:36:23 UTC (rev 2087)
@@ -652,6 +652,8 @@
25 Add reserved fields to DRBD-meta-data, add a bytes per bit field to
metadata.
+ 99% DONE
+
26 Implement a kind of "dstate" command to make integration with
Heartbeat-2.0's master/slave-support possible.
Modified: trunk/drbd/drbd_int.h
===================================================================
--- trunk/drbd/drbd_int.h 2006-02-28 18:14:50 UTC (rev 2086)
+++ trunk/drbd/drbd_int.h 2006-03-01 16:36:23 UTC (rev 2087)
@@ -681,6 +681,7 @@
u64 la_size_sect; /* last agreed size, unit sectors */
u64 uuid[UUID_SIZE];
+ u64 device_uuid;
u32 flags;
u32 md_size_sect;
Modified: trunk/drbd/drbd_main.c
===================================================================
--- trunk/drbd/drbd_main.c 2006-02-28 18:14:50 UTC (rev 2086)
+++ trunk/drbd/drbd_main.c 2006-03-01 16:36:23 UTC (rev 2087)
@@ -2402,6 +2402,7 @@
u64 la_size; // last agreed size.
u64 uuid[UUID_SIZE]; // UUIDs.
u64 device_uuid;
+ u64 reserved_u64_1;
u32 flags; // MDF
u32 magic;
u32 md_size_sect;
@@ -2409,6 +2410,9 @@
u32 al_nr_extents; // important for restoring the AL
// `-- act_log->nr_elements <-- sync_conf.al_extents
u32 bm_offset; // offset to the bitmap, from here
+ u32 bm_bytes_per_bit; // BM_BLOCK_SIZE
+ u32 reserved_u32[4];
+
} __attribute((packed));
/**
@@ -2439,6 +2443,8 @@
buffer->md_size_sect = cpu_to_be32(mdev->bc->md.md_size_sect);
buffer->al_offset = cpu_to_be32(mdev->bc->md.al_offset);
buffer->al_nr_extents = cpu_to_be32(mdev->act_log->nr_elements);
+ buffer->bm_bytes_per_bit = cpu_to_be32(BM_BLOCK_SIZE);
+ buffer->device_uuid = cpu_to_be64(mdev->bc->md.device_uuid);
buffer->bm_offset = cpu_to_be32(mdev->bc->md.bm_offset);
@@ -2523,11 +2529,19 @@
goto err;
}
+ if (be32_to_cpu(buffer->bm_bytes_per_bit) != BM_BLOCK_SIZE) {
+ ERR("unexpected bm_bytes_per_bit: %u (expected %u)\n",
+ be32_to_cpu(buffer->bm_bytes_per_bit), BM_BLOCK_SIZE);
+ rv = MDInvalid;
+ goto err;
+ }
+
bdev->md.la_size_sect = be64_to_cpu(buffer->la_size);
for (i = Current; i < UUID_SIZE; i++)
bdev->md.uuid[i]=be64_to_cpu(buffer->uuid[i]);
bdev->md.flags = be32_to_cpu(buffer->flags);
mdev->sync_conf.al_extents = be32_to_cpu(buffer->al_nr_extents);
+ bdev->md.device_uuid = be64_to_cpu(buffer->device_uuid);
if (mdev->sync_conf.al_extents < 7)
mdev->sync_conf.al_extents = 127;
Modified: trunk/user/drbdadm_usage_cnt.c
===================================================================
--- trunk/user/drbdadm_usage_cnt.c 2006-02-28 18:14:50 UTC (rev 2086)
+++ trunk/user/drbdadm_usage_cnt.c 2006-03-01 16:36:23 UTC (rev 2087)
@@ -356,7 +356,7 @@
update ? "an update" : "a new installation",
REL_VERSION,ni.node_uuid, ni.version_code);
fgets(answer,ANSWER_SIZE,stdin);
- if(!strcmp(answer,"no")) send = 0;
+ if(!strcmp(answer,"no\n")) send = 0;
}
@@ -448,17 +448,15 @@
rv = _admm_generic(res, cmd, SLEEPS_VERY_LONG); // cmd is "create-md".
- if(!device_uuid) {
- get_random_bytes(&device_uuid, sizeof(u64));
- }
-
fd = open(res->me->disk,O_RDONLY);
if( fd != -1) {
device_size = bdev_size(fd);
close(fd);
}
- if( read_node_id(&ni) && device_size ) {
+ if( read_node_id(&ni) && device_size && !device_uuid) {
+ get_random_bytes(&device_uuid, sizeof(u64));
+
if( global_options.usage_count == UC_YES ) send = 1;
if( global_options.usage_count == UC_ASK ) {
printf(
@@ -473,10 +471,14 @@
ni.node_uuid,device_uuid,device_size
);
fgets(answer,ANSWER_SIZE,stdin);
- if(strcmp(answer,"no")) send = 1;
+ if(strcmp(answer,"no\n")) send = 1;
}
}
+ if(!device_uuid) {
+ get_random_bytes(&device_uuid, sizeof(u64));
+ }
+
if (send) {
ssprintf(req_buf,"GET http://"HTTP_HOST"/cgi-bin/insert_usage.pl?"
"nu="U64"&ru="U64"&rs="U64" HTTP/1.0\n\n",
Modified: trunk/user/drbdmeta.c
===================================================================
--- trunk/user/drbdmeta.c 2006-02-28 18:14:50 UTC (rev 2086)
+++ trunk/user/drbdmeta.c 2006-03-01 16:36:23 UTC (rev 2087)
@@ -124,6 +124,8 @@
#define MD_BM_MAX_BYTE_07 ( (u64)(MD_RESERVED_SECT_07 - MD_BM_OFFSET_07)*512 )
#define MD_BM_MAX_BYTE_FLEX ( (u64)(1ULL << (32-3)) )
+#define DEFAULT_BM_BLOCK_SIZE (1<<12)
+
#define DRBD_MD_MAGIC_06 (DRBD_MAGIC+2)
#define DRBD_MD_MAGIC_07 (DRBD_MAGIC+3)
#define DRBD_MD_MAGIC_08 (DRBD_MAGIC+4)
@@ -234,6 +236,7 @@
u64 uuid[UUID_SIZE];
u32 flags;
u64 device_uuid;
+ u32 bm_bytes_per_bit;
};
/*
@@ -524,14 +527,17 @@
be_u64 la_sect; /* last agreed size. */
be_u64 uuid[UUID_SIZE]; // UUIDs.
be_u64 device_uuid;
+ be_u64 reserved_u64_1;
be_u32 flags;
be_u32 magic;
be_u32 md_size_sect;
be_s32 al_offset; /* signed sector offset to this block */
be_u32 al_nr_extents; /* important for restoring the AL */
be_s32 bm_offset; /* signed sector offset to the bitmap, from here */
+ be_u32 bm_bytes_per_bit;
+ be_u32 reserved_u32[4];
- char reserved[8 * 512 - (8*(UUID_SIZE+2)+4*6)];
+ char reserved[8 * 512 - (8*(UUID_SIZE+3)+4*11)];
};
void md_disk_08_to_cpu(struct md_cpu *cpu, const struct md_on_disk_08 *disk)
@@ -549,6 +555,7 @@
cpu->al_offset = be32_to_cpu(disk->al_offset.be);
cpu->al_nr_extents = be32_to_cpu(disk->al_nr_extents.be);
cpu->bm_offset = be32_to_cpu(disk->bm_offset.be);
+ cpu->bm_bytes_per_bit = be32_to_cpu(disk->bm_bytes_per_bit.be);
}
void md_cpu_to_disk_08(struct md_on_disk_08 *disk, const struct md_cpu *cpu)
@@ -565,6 +572,7 @@
disk->al_offset.be = cpu_to_be32(cpu->al_offset);
disk->al_nr_extents.be = cpu_to_be32(cpu->al_nr_extents);
disk->bm_offset.be = cpu_to_be32(cpu->bm_offset);
+ disk->bm_bytes_per_bit.be = cpu_to_be32(cpu->bm_bytes_per_bit);
MEMSET(disk->reserved, 0, sizeof(disk->reserved));
}
@@ -1235,6 +1243,7 @@
break;
}
cfg->md.al_nr_extents = 257; /* arbitrary. */
+ cfg->md.bm_bytes_per_bit = DEFAULT_BM_BLOCK_SIZE;
cfg->bm_mmaped_length = ((u64)cfg->md.md_size_sect - MD_BM_OFFSET_07)*512;
cfg->al_offset = cfg->md_offset + cfg->md.al_offset * 512;
@@ -1627,6 +1636,8 @@
if (format_version(cfg) >= Drbd_07) {
printf("la-size-sect "U64";\n", cfg->md.la_sect);
+ printf("bm-byte-per-bit "U32";\n",cfg->md.bm_bytes_per_bit);
+ printf("device-uuid 0x"X64(016)";\n",cfg->md.device_uuid);
printf("# bm-bytes %u;\n", cfg->bm_bytes);
printf("# bits-set %u;\n", cfg->bits_set);
if (cfg->on_disk.bm)
@@ -1692,6 +1703,10 @@
}
EXP(TK_LA_SIZE); EXP(TK_NUM); EXP(';');
cfg->md.la_sect = yylval.u64;
+ EXP(TK_BM_BYTE_PER_BIT); EXP(TK_NUM); EXP(';');
+ cfg->md.bm_bytes_per_bit = yylval.u64;
+ EXP(TK_DEVICE_UUID); EXP(TK_U64); EXP(';');
+ cfg->md.device_uuid = yylval.u64;
EXP(TK_BM); EXP('{');
bm = (le_u64 *)cfg->on_disk.bm;
i = 0;
Modified: trunk/user/drbdmeta_parser.h
===================================================================
--- trunk/user/drbdmeta_parser.h 2006-02-28 18:14:50 UTC (rev 2086)
+++ trunk/user/drbdmeta_parser.h 2006-03-01 16:36:23 UTC (rev 2087)
@@ -18,6 +18,8 @@
TK_UUID,
TK_VERSION,
TK_LA_SIZE,
+ TK_BM_BYTE_PER_BIT,
+ TK_DEVICE_UUID,
TK_TIMES
};
Modified: trunk/user/drbdmeta_scanner.fl
===================================================================
--- trunk/user/drbdmeta_scanner.fl 2006-02-28 18:14:50 UTC (rev 2086)
+++ trunk/user/drbdmeta_scanner.fl 2006-03-01 16:36:23 UTC (rev 2087)
@@ -34,6 +34,8 @@
uuid DP; return TK_UUID;
version DP; return TK_VERSION;
la-size-sect DP; return TK_LA_SIZE;
+bm-byte-per-bit DP; return TK_BM_BYTE_PER_BIT;
+device-uuid DP; return TK_DEVICE_UUID;
times DP; return TK_TIMES;
%%
More information about the drbd-cvs
mailing list