[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