[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