[DRBD-cvs] r1601 - trunk/user
svn at svn.drbd.org
svn at svn.drbd.org
Tue Oct 19 12:13:21 CEST 2004
Author: phil
Date: 2004-10-19 12:13:18 +0200 (Tue, 19 Oct 2004)
New Revision: 1601
Modified:
trunk/user/drbdadm_adjust.c
trunk/user/drbdadm_main.c
trunk/user/drbdsetup.c
trunk/user/drbdtool_common.c
trunk/user/drbdtool_common.h
Log:
drbdadm can now call drbdmeta. These new commands are
currently known to drbdadm:
create-md, show-gc, get-gc, dump-md
...more to come...
Modified: trunk/user/drbdadm_adjust.c
===================================================================
--- trunk/user/drbdadm_adjust.c 2004-10-19 09:11:49 UTC (rev 1600)
+++ trunk/user/drbdadm_adjust.c 2004-10-19 10:13:18 UTC (rev 1601)
@@ -36,9 +36,6 @@
#include "drbdadm.h"
#include "drbdtool_common.h"
-#define PERROR(fmt, args...) \
-do { fprintf(stderr,fmt ": ", ##args); perror(0); } while (0)
-
/******
This is a bit uggly.
If you think you are clever, then consider to contribute a nicer
Modified: trunk/user/drbdadm_main.c
===================================================================
--- trunk/user/drbdadm_main.c 2004-10-19 09:11:49 UTC (rev 1600)
+++ trunk/user/drbdadm_main.c 2004-10-19 10:13:18 UTC (rev 1601)
@@ -89,6 +89,7 @@
static int sh_ll_dev(struct d_resource* ,char* );
static int sh_md_dev(struct d_resource* ,char* );
static int sh_md_idx(struct d_resource* ,char* );
+static int admm_generic(struct d_resource* ,char* );
char ss_buffer[255];
struct utsname nodeinfo;
@@ -101,6 +102,7 @@
int config_valid=1;
int dry_run;
char* drbdsetup;
+char* drbdmeta;
char* setup_opts[10];
int soi=0;
volatile int alarm_raised;
@@ -109,6 +111,7 @@
{ "dry-run", no_argument, 0, 'd' },
{ "config-file", required_argument,0, 'c' },
{ "drbdsetup", required_argument,0, 's' },
+ { "drbdmeta", required_argument,0, 'm' },
{ 0, 0, 0, 0 }
};
@@ -130,6 +133,10 @@
{ "state", adm_generic_s,"state" ,1,1 },
{ "cstate", adm_generic_s,"cstate" ,1,1 },
{ "dump", adm_dump, 0 ,1,1 },
+ { "create-md", admm_generic, "create-md" ,1,1 },
+ { "show-gc", admm_generic, "show-gc" ,1,1 },
+ { "get-gc", admm_generic, "get-gc" ,1,1 },
+ { "dump-md", admm_generic, "dump-md" ,1,1 },
{ "wait_con_int", adm_wait_ci, 0 ,1,0 },
{ "sh-resources", sh_resources,0 ,0,0 },
{ "sh-mod-parms", sh_mod_parms,0 ,0,0 },
@@ -326,7 +333,7 @@
}
}
-static void find_drbdsetup(char** pathes)
+static void find_drbdcmd(char** cmd, char** pathes)
{
struct stat buf;
char **path;
@@ -334,13 +341,13 @@
path=pathes;
while(*path) {
if(stat(*path,&buf)==0) {
- drbdsetup=*path;
+ *cmd=*path;
return;
}
path++;
}
- fprintf(stderr,"Can not find drbdsetup");
+ fprintf(stderr,"Can not find command (drbdsetup/drbdmeta)");
exit(E_exec_error);
}
@@ -492,6 +499,26 @@
return m_system(argv,SLEEPS_SHORT);
}
+static int admm_generic(struct d_resource* res ,char* cmd)
+{
+ char* argv[20];
+ int argc=0;
+
+ argv[argc++]=drbdmeta;
+ argv[argc++]=res->me->device;
+ argv[argc++]="v08";
+ if(!strcmp(res->me->meta_disk,"internal")) {
+ argv[argc++]=res->me->disk;
+ } else {
+ argv[argc++]=res->me->meta_disk;
+ }
+ argv[argc++]=res->me->meta_index;
+ argv[argc++]=cmd;
+ argv[argc++]=0;
+
+ return m_system(argv,SLEEPS_SHORT);
+}
+
static int adm_generic(struct d_resource* res,char* cmd,int flags)
{
char* argv[20];
@@ -1022,6 +1049,7 @@
struct d_resource *res,*tmp;
drbdsetup=NULL;
+ drbdmeta=NULL;
dry_run=0;
yyin=NULL;
uname(&nodeinfo); /* FIXME maybe fold to lower case ? */
@@ -1038,7 +1066,7 @@
{
int c;
- c = getopt_long(argc,argv,make_optstring(admopt),admopt,0);
+ c = getopt_long(argc,argv,make_optstring(admopt,0),admopt,0);
if(c == -1) break;
switch(c)
{
@@ -1063,9 +1091,17 @@
char* pathes[2];
pathes[0]=optarg;
pathes[1]=0;
- find_drbdsetup(pathes);
+ find_drbdcmd(&drbdsetup,pathes);
}
break;
+ case 'm':
+ {
+ char* pathes[2];
+ pathes[0]=optarg;
+ pathes[1]=0;
+ find_drbdcmd(&drbdmeta,pathes);
+ }
+ break;
case '?':
// commented out, since opterr=1
//fprintf(stderr,"Unknown option %s\n",argv[optind-1]);
@@ -1151,9 +1187,13 @@
}
if(drbdsetup == NULL) {
- find_drbdsetup((char *[]){"./drbdsetup", "/sbin/drbdsetup", 0 });
+ find_drbdcmd(&drbdsetup,(char *[]){"./drbdsetup", "/sbin/drbdsetup", 0 });
}
+ if(drbdmeta == NULL) {
+ find_drbdcmd(&drbdmeta,(char *[]){"./drbdmeta", "/sbin/drbdmeta", 0 });
+ }
+
if(cmd->res_name_required)
{
if (optind + 1 > argc && cmd->function != adm_dump)
Modified: trunk/user/drbdsetup.c
===================================================================
--- trunk/user/drbdsetup.c 2004-10-19 09:11:49 UTC (rev 1600)
+++ trunk/user/drbdsetup.c 2004-10-19 10:13:18 UTC (rev 1601)
@@ -378,7 +378,7 @@
PRINT_ARGV;
next_option:
- c = getopt_long(argc,argv,make_optstring(options),options,0);
+ c = getopt_long(argc,argv,make_optstring(options,'-'),options,0);
if(c == -1) break;
switch(c)
{
@@ -426,7 +426,7 @@
PRINT_ARGV;
next_option:
- c = getopt_long(argc,argv,make_optstring(options),options,0);
+ c = getopt_long(argc,argv,make_optstring(options,'-'),options,0);
if(c == -1) break;
switch(c)
{
@@ -681,7 +681,7 @@
PRINT_ARGV;
/* only --timeout-expired may be abbreviated to -t
* --human and --do-what-I-say have to be spelled out */
- c = getopt_long_only(argc,argv,make_optstring(options),options,0);
+ c = getopt_long_only(argc,argv,make_optstring(options,'-'),options,0);
if(c == -1) break;
switch(c)
{
@@ -733,7 +733,7 @@
PRINT_ARGV;
- c = getopt_long(argc,argv,make_optstring(options),options,0);
+ c = getopt_long(argc,argv,make_optstring(options,'-'),options,0);
if(c == -1) break;
switch(c)
{
@@ -778,7 +778,7 @@
int c;
PRINT_ARGV;
- c = getopt_long(argc,argv,make_optstring(options),options,0);
+ c = getopt_long(argc,argv,make_optstring(options,'-'),options,0);
if(c == -1) break;
switch(c)
{
@@ -847,7 +847,7 @@
int c;
PRINT_ARGV;
- c = getopt_long(argc,argv,make_optstring(options),options,0);
+ c = getopt_long(argc,argv,make_optstring(options,'-'),options,0);
if(c == -1) break;
switch(c)
{
@@ -1014,7 +1014,7 @@
int c;
PRINT_ARGV;
- c = getopt_long(argc,argv,make_optstring(options),options,0);
+ c = getopt_long(argc,argv,make_optstring(options,'-'),options,0);
if(c == -1) break;
switch(c)
{
Modified: trunk/user/drbdtool_common.c
===================================================================
--- trunk/user/drbdtool_common.c 2004-10-19 09:11:49 UTC (rev 1600)
+++ trunk/user/drbdtool_common.c 2004-10-19 10:13:18 UTC (rev 1601)
@@ -25,7 +25,7 @@
return buf;
}
-const char* make_optstring(struct option *options)
+const char* make_optstring(struct option *options,char startc)
{
static char buffer[200];
static struct option* buffer_valid_for=NULL;
@@ -35,7 +35,7 @@
if(options==buffer_valid_for) return buffer;
opt=buffer_valid_for=options;
c=buffer;
- *c++='-';
+ if(startc) *c++=startc;
while(opt->name)
{
*c++=opt->val;
Modified: trunk/user/drbdtool_common.h
===================================================================
--- trunk/user/drbdtool_common.h 2004-10-19 09:11:49 UTC (rev 1600)
+++ trunk/user/drbdtool_common.h 2004-10-19 10:13:18 UTC (rev 1601)
@@ -13,7 +13,7 @@
extern int dt_open_drbd_device(const char* device,int open_may_fail);
extern int dt_close_drbd_device(int drbd_fd);
extern unsigned long m_strtol(const char* s,int def_mult);
-const char* make_optstring(struct option *options);
+const char* make_optstring(struct option *options, char startc);
char* ppsize(char* buf, size_t size);
#endif
More information about the drbd-cvs
mailing list