[DRBD-cvs] r1644 - in trunk: . drbd drbd/linux scripts user

svn at svn.drbd.org svn at svn.drbd.org
Tue Nov 16 18:31:13 CET 2004


Author: phil
Date: 2004-11-16 18:31:10 +0100 (Tue, 16 Nov 2004)
New Revision: 1644

Modified:
   trunk/ROADMAP
   trunk/drbd/drbd_fs.c
   trunk/drbd/drbd_int.h
   trunk/drbd/drbd_main.c
   trunk/drbd/drbd_strings.c
   trunk/drbd/linux/drbd.h
   trunk/scripts/drbd.conf
   trunk/user/drbdadm_adjust.c
   trunk/user/drbdadm_main.c
   trunk/user/drbdadm_parser.y
   trunk/user/drbdadm_scanner.fl
   trunk/user/drbdmeta.c
   trunk/user/drbdsetup.c
Log:
* Implemented the allow-two-primaries config option
* Fixed a typo in drbd_outdate_ioctl()
* Renamed drbd_set_state() to drbd_set_role()
* Renamed MDF_UpToDate to MDF_WasUpToDate
* Changed the order of the disk_states: Outdated < Consistent 
TODO: Need to check all comparisons to Consistent...


Modified: trunk/ROADMAP
===================================================================
--- trunk/ROADMAP	2004-11-16 16:02:15 UTC (rev 1643)
+++ trunk/ROADMAP	2004-11-16 17:31:10 UTC (rev 1644)
@@ -299,7 +299,7 @@
         to find IO operations starting in the same 4k block of
         data quickly. -> With two lookups the hash table we can
 	find any concurrent access.
-  0% DONE
+  10% DONE
 
 10 Change Sync-groups to sync-after
   

Modified: trunk/drbd/drbd_fs.c
===================================================================
--- trunk/drbd/drbd_fs.c	2004-11-16 16:02:15 UTC (rev 1643)
+++ trunk/drbd/drbd_fs.c	2004-11-16 17:31:10 UTC (rev 1644)
@@ -435,12 +435,12 @@
 	drbd_set_blocksize(mdev,INITIAL_BLOCK_SIZE);
 
 	/* If MDF_Consistent is not set go into inconsistent state, otherwise
-	   investige MDF_UpToDate...
-	   If MDF_UpToDate is not set go into Outdated disk state, otherwise
+	   investige MDF_WasUpToDate...
+	   If MDF_WasUpToDate is not set go into Outdated disk state, otherwise
 	   into Consistent state.
 	*/
 	if(drbd_md_test_flag(mdev,MDF_Consistent)) {
-		if(drbd_md_test_flag(mdev,MDF_UpToDate)) {
+		if(drbd_md_test_flag(mdev,MDF_WasUpToDate)) {
 			nds = Consistent;
 		} else {
 			nds = Outdated;
@@ -588,7 +588,7 @@
 	return -EINVAL;
 }
 
-int drbd_set_state(drbd_dev *mdev,drbd_role_t newstate)
+int drbd_set_role(drbd_dev *mdev,drbd_role_t newstate)
 {
 	int r,forced = 0;
 	drbd_state_t os,ns;
@@ -825,7 +825,7 @@
 	if( mdev->state.s.disk != UpToDate ) { 
 		r=-999;
 	} else {
-		r = _drbd_set_state(mdev, _NS(role,Outdated), 0);
+		r = _drbd_set_state(mdev, _NS(disk,Outdated), 0);
 	}
 	ns = mdev->state;
 	spin_unlock_irq(&mdev->req_lock);
@@ -910,7 +910,7 @@
 			    DontBlameDrbd) ) {
 			err = -EINVAL;
 		} else {
-			err = drbd_set_state(mdev,arg);
+			err = drbd_set_role(mdev,arg);
 		}
 		break;
 

Modified: trunk/drbd/drbd_int.h
===================================================================
--- trunk/drbd/drbd_int.h	2004-11-16 16:02:15 UTC (rev 1643)
+++ trunk/drbd/drbd_int.h	2004-11-16 17:31:10 UTC (rev 1644)
@@ -246,13 +246,13 @@
 	__MDF_PrimaryInd,
 	__MDF_ConnectedInd,
 	__MDF_FullSync,
-	__MDF_UpToDate,
+	__MDF_WasUpToDate,
 };
 #define MDF_Consistent      (1<<__MDF_Consistent)
 #define MDF_PrimaryInd      (1<<__MDF_PrimaryInd)
 #define MDF_ConnectedInd    (1<<__MDF_ConnectedInd)
 #define MDF_FullSync        (1<<__MDF_FullSync)
-#define MDF_UpToDate        (1<<__MDF_UpToDate)
+#define MDF_WasUpToDate     (1<<__MDF_WasUpToDate)
 
 /* drbd_meta-data.c (still in drbd_main.c) */
 enum MetaDataIndex {
@@ -271,6 +271,7 @@
  *	0: panic();
  *	1: machine_halt; SORRY, this DOES NOT WORK
  *	2: prink(EMERG ), plus flag to fail all eventual drbd IO, plus panic()
+ *	3: prink(EMERG ) and nothing more. For UML debugging...
  */
 
 extern volatile int drbd_did_panic;
@@ -280,7 +281,7 @@
 	panic(DEVICE_NAME "%d: " fmt, (int)(mdev-drbd_conf) , ##args)
 #elif  DRBD_PANIC == 1
 #error "sorry , this does not work, please contribute"
-#else
+#elif  DRBD_PANIC == 2
 #define drbd_panic(fmt, args...) do {					\
 	printk(KERN_EMERG DEVICE_NAME "%d: " fmt,			\
 			(int)(mdev-drbd_conf) , ##args);		\
@@ -288,6 +289,11 @@
 	smp_mb();							\
 	panic(DEVICE_NAME "%d: " fmt, (int)(mdev-drbd_conf) , ##args);	\
 } while (0)
+#else
+#define drbd_panic(fmt, args...) do {					\
+	printk(KERN_EMERG DEVICE_NAME "%d: " fmt,			\
+			(int)(mdev-drbd_conf) , ##args);		\
+} while (0)
 #endif
 #undef DRBD_PANIC
 
@@ -955,7 +961,7 @@
 // drbd_fs.c
 extern char* ppsize(char* buf, size_t size);
 extern int drbd_determin_dev_size(drbd_dev*);
-extern int drbd_set_state(drbd_dev *mdev,drbd_role_t newstate);
+extern int drbd_set_role(drbd_dev *mdev,drbd_role_t newstate);
 extern int drbd_ioctl(struct inode *inode, struct file *file,
 		      unsigned int cmd, unsigned long arg);
 

Modified: trunk/drbd/drbd_main.c
===================================================================
--- trunk/drbd/drbd_main.c	2004-11-16 16:02:15 UTC (rev 1643)
+++ trunk/drbd/drbd_main.c	2004-11-16 17:31:10 UTC (rev 1644)
@@ -377,14 +377,13 @@
 
 static void print_st(drbd_dev* mdev, char *name, drbd_state_t ns)
 {
-	ERR(" %s = { cs:%s st:%s/%s ds:%s/%s m:%d }\n",
+	ERR(" %s = { cs:%s st:%s/%s ds:%s/%s }\n",
 	    name,
 	    conns_to_name(ns.s.conn),
 	    roles_to_name(ns.s.role),
 	    roles_to_name(ns.s.peer),
 	    disks_to_name(ns.s.disk),
-	    disks_to_name(ns.s.pdsk),
-	    ns.s.mult);
+	    disks_to_name(ns.s.pdsk));
 }
 
 void print_st_err(drbd_dev* mdev, drbd_state_t os, drbd_state_t ns, int err)
@@ -472,10 +471,10 @@
 		/*  pre-state-change checks ; only look at ns  */
 		/* See drbd_state_sw_errors in drbd_strings.c */
 
-		if( !ns.s.mult && 
+		if( !mdev->conf.two_primaries && 
 		    ns.s.role == Primary && ns.s.peer == Primary ) rv=-1;
 
-		if( ns.s.role == Primary && ns.s.disk < UpToDate && 
+		if( ns.s.role == Primary && ns.s.disk < Consistent && 
 		    ns.s.conn < Connected ) rv=-2;
 
 		if( ns.s.peer == Primary && ns.s.pdsk <= Inconsistent && 
@@ -511,9 +510,6 @@
 	PSC(conn);
 	PSC(disk);
 	PSC(pdsk);
-	if( ns.s.mult != os.s.mult ) {
-		sprintf(pbp, "mult( %d -> %d)", os.s.mult,ns.s.mult);
-	}
 	INFO("%s\n", pb);
 #endif
 
@@ -1400,7 +1396,6 @@
 					StandAlone,
 					Diskless,
 					DUnknown,
-					0,
 					0 } };
 }
 
@@ -1629,7 +1624,7 @@
 
 			if (mdev) {
 				down(&mdev->device_mutex);
-				drbd_set_state(mdev,Secondary);
+				drbd_set_role(mdev,Secondary);
 				up(&mdev->device_mutex);
 				drbd_sync_me(mdev);
 				set_bit(DO_NOT_INC_CONCNT,&mdev->flags);
@@ -2006,11 +2001,11 @@
 	memset(buffer,0,512);
 
 	flags = mdev->gen_cnt[Flags] & ~(MDF_Consistent|MDF_PrimaryInd|
-					 MDF_ConnectedInd|MDF_UpToDate);
+					 MDF_ConnectedInd|MDF_WasUpToDate);
 	if (mdev->state.s.role == Primary)        flags |= MDF_PrimaryInd;
 	if (mdev->state.s.conn >= WFReportParams) flags |= MDF_ConnectedInd;
-	if (mdev->state.s.disk >= Consistent)     flags |= MDF_Consistent;
-	if (mdev->state.s.disk >= UpToDate)       flags |= MDF_UpToDate;
+	if (mdev->state.s.disk >  Inconsistent)   flags |= MDF_Consistent;
+	if (mdev->state.s.disk >= UpToDate)       flags |= MDF_WasUpToDate;
 	mdev->gen_cnt[Flags] = flags;
 
 	for (i = Flags; i < GEN_CNT_SIZE; i++)
@@ -2175,8 +2170,8 @@
 	if( me > other ) return 1;
 	if( me < other ) return -1;
 
-	me=mdev->gen_cnt[Flags] & MDF_UpToDate;
-	other=be32_to_cpu(partner->gen_cnt[Flags]) & MDF_UpToDate;
+	me=mdev->gen_cnt[Flags] & MDF_WasUpToDate;
+	other=be32_to_cpu(partner->gen_cnt[Flags]) & MDF_WasUpToDate;
 	if( me > other ) return 1;
 	if( me < other ) return -1;
 

Modified: trunk/drbd/drbd_strings.c
===================================================================
--- trunk/drbd/drbd_strings.c	2004-11-16 16:02:15 UTC (rev 1643)
+++ trunk/drbd/drbd_strings.c	2004-11-16 17:31:10 UTC (rev 1644)
@@ -60,7 +60,7 @@
 
 static const char *drbd_state_sw_errors[] = {
 	[1] = "Multiple primaries now allowed by config",
-	[2] = "Refusing to be Primary without UpToDate disk",
+	[2] = "Refusing to be Primary without an at least Consistent disk",
 	[3] = "Refusing to make peer Primary without disk",
 	[4] = "Refusing to be inconsistent on both nodes",
 	[5] = "Refusing to be syncing and diskless",

Modified: trunk/drbd/linux/drbd.h
===================================================================
--- trunk/drbd/linux/drbd.h	2004-11-16 16:02:15 UTC (rev 1643)
+++ trunk/drbd/linux/drbd.h	2004-11-16 17:31:10 UTC (rev 1644)
@@ -94,9 +94,9 @@
 	IN int      max_epoch_size;
 	IN int      max_buffers;
 	IN int      sndbuf_size;  /* socket send buffer size */
+	IN int      two_primaries;
 	IN unsigned int ko_count;
 	IN enum disconnect_handler on_disconnect;
-	const int   _pad;
 };
 
 struct syncer_config {
@@ -204,8 +204,8 @@
 	Diskless,
 	Failed,         /* Becomes Diskless as soon as we told it the peer */
 	Inconsistent,
-	Consistent,     /* Might be Outdated, might be UpToDate ... */
 	Outdated,
+	Consistent,     /* Might be Outdated, might be UpToDate ... */
 	UpToDate,
 	disk_mask=7
 } drbd_disks_t;
@@ -217,8 +217,7 @@
 		unsigned conn : 5 ;   // 17/32    cstates
 		unsigned disk : 3 ;   // 7/7      from DUnknown to UpToDate
 		unsigned pdsk : 3 ;   // 7/7      from DUnknown to UpToDate
-		unsigned mult : 1 ;   // 2/2      multiple primaries allowed
-		unsigned _pad : 16;   // 0        unused
+		unsigned _pad : 17;   // 0        unused
 	} s;
 	unsigned int i;
 } drbd_state_t;

Modified: trunk/scripts/drbd.conf
===================================================================
--- trunk/scripts/drbd.conf	2004-11-16 16:02:15 UTC (rev 1643)
+++ trunk/scripts/drbd.conf	2004-11-16 17:31:10 UTC (rev 1644)
@@ -186,6 +186,11 @@
     #                   the connection is established again.
     # on-disconnect reconnect;
 
+    # If you want to use OCFS2/openGFS on top of DRBD enable
+    # this optione, and only enable it if you are going to use
+    # one of these filesystems. Do not enable it for ext2,
+    # ext3,reiserFS,XFS,JFS etc...
+    # allow-two-primaries;
   }
 
   syncer {

Modified: trunk/user/drbdadm_adjust.c
===================================================================
--- trunk/user/drbdadm_adjust.c	2004-11-16 16:02:15 UTC (rev 1643)
+++ trunk/user/drbdadm_adjust.c	2004-11-16 17:31:10 UTC (rev 1644)
@@ -312,6 +312,7 @@
     do_connect |= check_opt_d(in,"sndbuf-size",1,"",res->net_options);
     do_connect |= check_opt_d(in,"ko-count",1,"",res->net_options);
     do_connect |= check_opt_s(in,"on-disconnect",res->net_options);
+    do_connect |= check_opt_b(in,"allow-two-primaries",res->net_options);
     do_connect |= complete(res->net_options);
   }
 

Modified: trunk/user/drbdadm_main.c
===================================================================
--- trunk/user/drbdadm_main.c	2004-11-16 16:02:15 UTC (rev 1643)
+++ trunk/user/drbdadm_main.c	2004-11-16 17:31:10 UTC (rev 1644)
@@ -965,7 +965,7 @@
 }
 
 static char* conf_file[] = {
-    "/etc/drbd-07.conf",
+    "/etc/drbd-08.conf",
     "/etc/drbd.conf",
     0
 };

Modified: trunk/user/drbdadm_parser.y
===================================================================
--- trunk/user/drbdadm_parser.y	2004-11-16 16:02:15 UTC (rev 1643)
+++ trunk/user/drbdadm_parser.y	2004-11-16 17:31:10 UTC (rev 1644)
@@ -247,6 +247,7 @@
 %token <txt> TK_SKIP_SYNC TK_USE_CSUMS TK_RATE TK_SYNC_GROUP TK_AL_EXTENTS
 %token <txt> TK_WFC_TIMEOUT TK_DEGR_WFC_TIMEOUT
 %token <txt> TK_KO_COUNT TK_ON_DISCONNECT TK_DIALOG_REFRESH
+%token <txt> TK_ALLOW_TWO_PRIMARIES
 
 %type <txt> hostname resource_name
 %type <d_option> disk_stmts disk_stmt
@@ -367,6 +368,7 @@
 		| TK_KO_COUNT       TK_INTEGER
 		{ range_check(R_KO_COUNT,$1,$2);	$$=new_opt($1,$2); }
 		| TK_ON_DISCONNECT  TK_STRING	{	$$=new_opt($1,$2); }
+		| TK_ALLOW_TWO_PRIMARIES	{	$$=new_opt($1,0);  }
 		;
 
 sync_stmts:	  /* empty */	           { $$ = 0; }

Modified: trunk/user/drbdadm_scanner.fl
===================================================================
--- trunk/user/drbdadm_scanner.fl	2004-11-16 16:02:15 UTC (rev 1643)
+++ trunk/user/drbdadm_scanner.fl	2004-11-16 17:31:10 UTC (rev 1644)
@@ -197,8 +197,8 @@
 }
 
 <GLOBAL>{
-  minor[-_]count	do_assign(NUM); CP; return TK_MINOR_COUNT;
-  disable[-_]io[-_]hints yy_push_state(SEMICOLON); return TK_DISABLE_IO_HINTS;
+  minor-count	do_assign(NUM); CP; return TK_MINOR_COUNT;
+  disable-io-hints yy_push_state(SEMICOLON); return TK_DISABLE_IO_HINTS;
   dialog-refresh        do_assign(NUM); CP; return TK_DIALOG_REFRESH;
   {NDELIM}		expect_error("'minor-count|disable-io-hints|dialog-refresh'");
 }
@@ -253,6 +253,7 @@
   max-epoch-size	do_assign(NUM);   CP; return TK_MAX_EPOCH_SIZE;
   ko-count		do_assign(NUM);   CP; return TK_KO_COUNT;
   on-disconnect 	do_assign(ON_DISCONNECT); CP; return TK_ON_DISCONNECT;
+  allow-two-primaries   yy_push_state(SEMICOLON); CP; return TK_ALLOW_TWO_PRIMARIES;
   {NDELIM}		expect_error("one of 'sndbuf-size|timeout|ping-int|connect-int|max-buffers|max-epoch-size|ko-count|on-disconnect'");
 }
 

Modified: trunk/user/drbdmeta.c
===================================================================
--- trunk/user/drbdmeta.c	2004-11-16 16:02:15 UTC (rev 1643)
+++ trunk/user/drbdmeta.c	2004-11-16 17:31:10 UTC (rev 1644)
@@ -84,13 +84,13 @@
 	__MDF_PrimaryInd,
 	__MDF_ConnectedInd,
 	__MDF_FullSync,
-	__MDF_UpToDate,
+	__MDF_WasUpToDate,
 };
 #define MDF_Consistent      (1<<__MDF_Consistent)
 #define MDF_PrimaryInd      (1<<__MDF_PrimaryInd)
 #define MDF_ConnectedInd    (1<<__MDF_ConnectedInd)
 #define MDF_FullSync        (1<<__MDF_FullSync)
-#define MDF_UpToDate        (1<<__MDF_UpToDate)
+#define MDF_WasUpToDate     (1<<__MDF_WasUpToDate)
 
 enum MetaDataIndex {
 	Flags,			/* Consistency flag,connected-ind,primary-ind */
@@ -191,7 +191,7 @@
 	/* 06 does not have the UpToDate flag, set it according to
 	   the Consistent Flag */
 	flags = cpu->gc[Flags];
-	if( flags & MDF_Consistent) flags = flags | MDF_UpToDate;
+	if( flags & MDF_Consistent) flags = flags | MDF_WasUpToDate;
 	cpu->gc[Flags]=flags;
 }
 
@@ -202,10 +202,10 @@
 
 	/* Commulate the UpToDate flag into the consistent flag. */
 	flags = cpu->gc[Flags];
-	if(!((flags & MDF_Consistent) && (flags & MDF_UpToDate))) {
+	if(!((flags & MDF_Consistent) && (flags & MDF_WasUpToDate))) {
 		flags &= ~MDF_Consistent;
 	}
-	flags &= ~MDF_UpToDate;
+	flags &= ~MDF_WasUpToDate;
 	cpu->gc[Flags]=flags;
 
 	for (i = 0; i < GEN_CNT_SIZE; i++)
@@ -253,7 +253,7 @@
 	/* 07 does not have the UpToDate flag, set it according to
 	   the Consistent Flag */
 	flags = cpu->gc[Flags];
-	if( flags & MDF_Consistent) flags = flags | MDF_UpToDate;
+	if( flags & MDF_Consistent) flags = flags | MDF_WasUpToDate;
 	cpu->gc[Flags]=flags;
 }
 
@@ -264,10 +264,10 @@
 
 	/* Commulate the UpToDate flag into the consistent flag. */
 	flags = cpu->gc[Flags];
-	if(!((flags & MDF_Consistent) && (flags & MDF_UpToDate))) {
+	if(!((flags & MDF_Consistent) && (flags & MDF_WasUpToDate))) {
 		flags &= ~MDF_Consistent;
 	}
-	flags &= ~MDF_UpToDate;
+	flags &= ~MDF_WasUpToDate;
 	cpu->gc[Flags]=flags;
 
 	disk->la_kb.be = cpu_to_be64(cpu->la_sect >> 1);
@@ -635,7 +635,7 @@
 {
 	printf("%d:%d:%d:%d:%d:%d:%d:%d:%d\n",
 	       md->gc[Flags] & MDF_Consistent ? 1 : 0,
-	       md->gc[Flags] & MDF_UpToDate ? 1 : 0,
+	       md->gc[Flags] & MDF_WasUpToDate ? 1 : 0,
 	       md->gc[HumanCnt],
 	       md->gc[TimeoutCnt],
 	       md->gc[ConnectedCnt],
@@ -1098,13 +1098,13 @@
 	       "                      ConnectedCnt |     |     |     |     |\n"
 	       "                  TimeoutCnt |     |     |     |     |     |\n"
 	       "              HumanCnt |     |     |     |     |     |     |\n"
-	       "        UpToDate |     |     |     |     |     |     |     |\n"
+	       "     WasUpToDate |     |     |     |     |     |     |     |\n"
 	       "Consistent |     |     |     |     |     |     |     |     |\n"
 	       "   --------+-----+-----+-----+-----+-----+-----+-----+-----+\n"
 	       "       %3s | %3s | %3d | %3d | %3d | %3d | %3s | %3s | %3s  \n"
 	       "\n",
 	       cfg->md.gc[Flags] & MDF_Consistent ? "1/c" : "0/i",
-	       cfg->md.gc[Flags] & MDF_UpToDate ? "1/y" : "0/n",
+	       cfg->md.gc[Flags] & MDF_WasUpToDate ? "1/y" : "0/n",
 	       cfg->md.gc[HumanCnt],
 	       cfg->md.gc[TimeoutCnt],
 	       cfg->md.gc[ConnectedCnt],
@@ -1294,7 +1294,7 @@
 
 	do {
 		if (!m_strsep_b(str, &tmp.gc[Flags], MDF_Consistent)) break;
-		if (!m_strsep_b(str, &tmp.gc[Flags], MDF_UpToDate)) break;
+		if (!m_strsep_b(str, &tmp.gc[Flags], MDF_WasUpToDate)) break;
 		if (!m_strsep(str, &tmp.gc[HumanCnt])) break;
 		if (!m_strsep(str, &tmp.gc[TimeoutCnt])) break;
 		if (!m_strsep(str, &tmp.gc[ConnectedCnt])) break;

Modified: trunk/user/drbdsetup.c
===================================================================
--- trunk/user/drbdsetup.c	2004-11-16 16:02:15 UTC (rev 1643)
+++ trunk/user/drbdsetup.c	2004-11-16 17:31:10 UTC (rev 1644)
@@ -68,6 +68,7 @@
 #define DEF_ON_IO_ERROR         PassOn
 #define DEF_KO_COUNT                 0
 #define DEF_ON_DISCONNECT       Reconnect
+#define DEF_TWO_PRIMARIES            0
 
 #if 0
 # define ioctl(X...) (fprintf(stderr,"ioctl(%s)\n",#X),0);
@@ -158,6 +159,7 @@
      { "sndbuf-size",required_argument, 0, 'S' },
      { "ko-count",   required_argument, 0, 'k' },
      { "on-disconnect",required_argument, 0, 'd' },
+     { "allow-two-primaries",no_argument, 0, 'm' },
      { 0,            0,                 0, 0 } } },
   {"disk", cmd_disk_conf,(char *[]){"lower_dev","meta_data_dev",
 				    "meta_data_index",0},
@@ -443,7 +445,7 @@
   cn->config.max_buffers = DEF_MAX_BUFFERS;
   cn->config.sndbuf_size = DEF_SNDBUF_SIZE ;
   cn->config.on_disconnect = DEF_ON_DISCONNECT;
-  cn->config.ko_count = DEF_KO_COUNT;
+  cn->config.two_primaries = DEF_TWO_PRIMARIES;
 
   if(argc==0) return 0;
 
@@ -486,6 +488,9 @@
           cn->config.ko_count = m_strtoll_range(optarg,1, "ko-count",
 			  DRBD_KO_COUNT_MIN, DRBD_KO_COUNT_MAX);
           break;
+       case 'm':
+	  cn->config.two_primaries = 1;
+          break;
 	case 'd':
 	  for(i=0;i<ARRY_SIZE(dh_names);i++) {
 	    if (strcmp(optarg,dh_names[i])==0) {
@@ -1247,8 +1252,8 @@
       if( cn.nconf.on_disconnect != DEF_ON_DISCONNECT) {
 	printf(" on-disconnect = %s\n",dh_names[cn.nconf.on_disconnect]);
       }
+      if( cn.nconf.two_primaries ) printf(" allow-two-primaries\n");
 
-
       printf("Syncer options:\n");
 
       SHOW_I("rate","KB/sec", cn.sconf.rate, DEF_SYNC_RATE);



More information about the drbd-cvs mailing list