[DRBD-cvs] user by phil; * Replaced the "do_panic" option with on...
drbd-user@lists.linbit.com
drbd-user@lists.linbit.com
Wed, 11 Feb 2004 14:25:25 +0100 (CET)
DRBD CVS committal
Author : phil
Project : drbd
Module : user
Dir : drbd/user
Modified Files:
Tag: rel-0_7-branch
drbdadm.h drbdadm_main.c drbdadm_parser.y drbdadm_scanner.fl
drbdsetup.c
Log Message:
* Replaced the "do_panic" option with
on-io-error = { PassOn | Panic | Detach }
[ Untested; Unfinished. Need to rework the make_request funtion a bit,
and kick out the remapping of requests to finish this. ]
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/user/Attic/drbdadm.h,v
retrieving revision 1.1.2.16
retrieving revision 1.1.2.17
diff -u -3 -r1.1.2.16 -r1.1.2.17
--- drbdadm.h 9 Feb 2004 11:15:49 -0000 1.1.2.16
+++ drbdadm.h 11 Feb 2004 13:25:20 -0000 1.1.2.17
@@ -58,15 +58,23 @@
extern int dry_run;
extern char* drbdsetup;
+extern char ss_buffer[255];
/* ssprintf() places the result of the printf in the current stack
frame and sets ptr to the resulting string. If the current stack
frame is destroyed (=function returns), the allocated memory is
freed automatically */
+/*
#define ssprintf(...) \
({ int _ss_size = snprintf(0, 0, ##__VA_ARGS__); \
char *_ss_ret = __builtin_alloca(_ss_size+1); \
snprintf(_ss_ret, _ss_size+1, ##__VA_ARGS__); \
_ss_ret; })
+#endif
+*/
+
+#define ssprintf(ptr,...) \
+ ptr=strcpy(alloca(snprintf(ss_buffer,255,##__VA_ARGS__)+1),ss_buffer)
+
#endif
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/user/Attic/drbdadm_main.c,v
retrieving revision 1.1.2.31
retrieving revision 1.1.2.32
diff -u -3 -r1.1.2.31 -r1.1.2.32
--- drbdadm_main.c 9 Feb 2004 11:15:49 -0000 1.1.2.31
+++ drbdadm_main.c 11 Feb 2004 13:25:20 -0000 1.1.2.32
@@ -84,6 +84,7 @@
static int sh_mod_parms(struct d_resource* ,char* );
static int sh_ll_dev(struct d_resource* ,char* );
+char ss_buffer[255];
int line=1;
struct d_globals global_options = { 0, 0 };
char *config_file = NULL;
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/user/Attic/drbdadm_parser.y,v
retrieving revision 1.1.2.19
retrieving revision 1.1.2.20
diff -u -3 -r1.1.2.19 -r1.1.2.20
--- drbdadm_parser.y 15 Dec 2003 15:25:53 -0000 1.1.2.19
+++ drbdadm_parser.y 11 Feb 2004 13:25:20 -0000 1.1.2.20
@@ -93,7 +93,7 @@
%token TK_RESOURCE TK_DISK TK_NET TK_SYNCER TK_ON
%token TK_PORT TK_DEVICE TK_ADDRESS TK_GLOBAL TK_STARTUP
%token TK_META_DISK TK_META_INDEX
-%token <txt> TK_PROTOCOL TK_DO_PANIC
+%token <txt> TK_PROTOCOL TK_ON_IO_ERROR
%token <txt> TK_SIZE TK_TIMEOUT TK_CONNECT_INT
%token <txt> TK_RATE TK_USE_CSUMS TK_SKIP_SYNC TK_PING_INT
%token <txt> TK_INTEGER TK_STRING TK_IPADDR TK_INCON_DEGR_CMD
@@ -163,7 +163,7 @@
| disk_stmts disk_stmt { $$=APPEND($1,$2); }
;
-disk_stmt: TK_DO_PANIC { $$=new_opt($1,0); }
+disk_stmt: TK_ON_IO_ERROR '=' TK_STRING { $$=new_opt($1,$3); }
| TK_SIZE '=' TK_INTEGER { $$=new_opt($1,$3); }
;
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/user/Attic/drbdadm_scanner.fl,v
retrieving revision 1.1.2.19
retrieving revision 1.1.2.20
diff -u -3 -r1.1.2.19 -r1.1.2.20
--- drbdadm_scanner.fl 15 Dec 2003 15:25:53 -0000 1.1.2.19
+++ drbdadm_scanner.fl 11 Feb 2004 13:25:20 -0000 1.1.2.20
@@ -59,7 +59,7 @@
timeout { DP; CP; return TK_TIMEOUT; }
ping-int { DP; CP; return TK_PING_INT; }
protocol { DP; CP; BEGIN(id); return TK_PROTOCOL;}
-do-panic { DP; CP; return TK_DO_PANIC; }
+on-io-error { DP; CP; BEGIN(id); return TK_ON_IO_ERROR;}
use-csums { DP; CP; return TK_USE_CSUMS; }
skip-sync { DP; CP; return TK_SKIP_SYNC; }
al-extents { DP; CP; return TK_AL_EXTENTS; }
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/user/drbdsetup.c,v
retrieving revision 1.54.2.21
retrieving revision 1.54.2.22
diff -u -3 -r1.54.2.21 -r1.54.2.22
--- drbdsetup.c 8 Feb 2004 12:26:14 -0000 1.54.2.21
+++ drbdsetup.c 11 Feb 2004 13:25:20 -0000 1.54.2.22
@@ -64,7 +64,7 @@
#define DEF_MAX_BUFFERS 2048 // entries
#define DEF_SNDBUF_SIZE (2*65535) // ~128KB
#define DEF_DISK_SIZE 0
-
+#define DEF_ON_IO_ERROR PassOn
#if 0
# define ioctl(X...) (fprintf(stderr,"ioctl(%s)\n",#X),0);
@@ -149,8 +149,8 @@
{"disk", cmd_disk_conf,(char *[]){"lower_dev","meta_data_dev",
"meta_data_index",0},
(struct option[]) {
- { "size", required_argument, 0, 'd' },
- { "do-panic", no_argument, 0, 'p' },
+ { "size", required_argument, 0, 'd' },
+ { "on-io-error",required_argument, 0, 'e' },
{ 0, 0, 0, 0 } } },
{"resize", cmd_disk_size, 0,
(struct option[]) {
@@ -160,6 +160,12 @@
{"show", cmd_show, 0, 0, }
};
+const char *eh_names[] = {
+ [PassOn] = "pass_on",
+ [Panic] = "panic",
+ [Detach] = "detach"
+};
+
unsigned long resolv(const char* name)
{
unsigned long retval;
@@ -335,7 +341,13 @@
for (i = 0; i < ARRY_SIZE(commands); i++)
print_command_usage(i, 0);
- printf("\nVersion: "REL_VERSION" (api:%d)\n",API_VERSION);
+ printf("\nAvailable on-io-error handlers:");
+ for(i=0;i<ARRY_SIZE(eh_names);i++) {
+ printf(" %s",eh_names[i]);
+ if(i < ARRY_SIZE(eh_names)-1) printf(",");
+ }
+
+ printf("\n\nVersion: "REL_VERSION" (api:%d)\n",API_VERSION);
if (addinfo)
printf("\n%s\n",addinfo);
@@ -403,13 +415,13 @@
struct option *options)
{
cn->config.disk_size = 0; /* default not known */
- cn->config.do_panic = 0;
+ cn->config.on_io_error = DEF_ON_IO_ERROR;
if(argc==0) return 0;
while(1)
{
- int c;
+ int c,i;
PRINT_ARGV;
c = getopt_long(argc,argv,make_optstring(options),options,0);
@@ -419,14 +431,22 @@
case 'd':
cn->config.disk_size = m_strtol(optarg,1024);
break;
- case 'p':
- cn->config.do_panic=1;
- break;
+ case 'e':
+ for(i=0;i<ARRY_SIZE(eh_names);i++) {
+ if (strcmp(optarg,eh_names[i])==0) {
+ cn->config.on_io_error=i;
+ goto ok;
+ }
+ }
+ fprintf(stderr,"%s: '%s' is an invalid on-io-error handler.\n",
+ argv[0],optarg);
+ return 20;
case 1: // non option argument. see getopt_long(3)
fprintf(stderr,"%s: Unexpected nonoption argument '%s'\n",argv[0],optarg);
case '?':
return 20;
}
+ ok:
}
return 0;
}
@@ -1097,7 +1117,9 @@
printf("Disk options:\n");
if( cn.disk_size_user ) printf(" size = %d KB\n",cn.disk_size_user);
- if( cn.do_panic ) printf(" do-panic\n");
+ if( cn.on_io_error != DEF_ON_IO_ERROR) {
+ printf(" on-io-error = %s\n",eh_names[cn.on_io_error]);
+ }
if( cn.cstate < Unconnected ) return 0;