[prev in list] [next in list] [prev in thread] [next in thread] 

List:       drbd-cvs
Subject:    [DRBD-cvs] svn commit by lars - r2367 - trunk/user - drbdadm: *
From:       drbd-cvs () linbit ! com
Date:       2006-08-11 23:08:00
Message-ID: 20060811230800.C82F02D99950 () mail ! linbit ! com
[Download RAW message or body]

Author: lars
Date: 2006-08-12 01:07:59 +0200 (Sat, 12 Aug 2006)
New Revision: 2367

Modified:
   trunk/user/drbdadm_main.c
   trunk/user/drbdmeta.c
Log:

drbdadm:
 * make sure progname gets set before it might be used
 * initialize drbdmeta command name pointer the same way
   as that of drbdsetup: let execvp sort it out...
 * fix compiler warning

drbdmeta:
 allow drbdmeta dump-md to be forced even when the corresponding device is
 configured and used. It may return stale data, but that might still be useful
 sometimes, especially for debugging the syncer related issues now.



Modified: trunk/user/drbdadm_main.c
===================================================================
--- trunk/user/drbdadm_main.c	2006-08-11 11:52:20 UTC (rev 2366)
+++ trunk/user/drbdadm_main.c	2006-08-11 23:07:59 UTC (rev 2367)
@@ -1424,26 +1424,37 @@
             "   PRETENDING that I am >>%s<<\n\n",nodeinfo.nodename);
   }
 
-  if(argc == 1) print_usage_and_exit("missing arguments"); // arguments missing.
-
   /* in case drbdadm is called with an absolut or relative pathname
    * look for the drbdsetup binary in the same location,
    * otherwise, just let execvp sort it out... */
   if( (progname=strrchr(argv[0],'/')) == 0 ) {
     progname=argv[0];
     drbdsetup = strdup("drbdsetup");
+    drbdmeta = strdup("drbdmeta");
   } else {
     size_t len = strlen(argv[0]) + 1;
     ++progname;
+
     len += strlen("drbdsetup") - strlen(progname);
     drbdsetup = malloc(len);
     if (drbdsetup) {
       strncpy(drbdsetup, argv[0], (progname - argv[0]));
       strcpy(drbdsetup + (progname - argv[0]), "drbdsetup");
     }
+
+    len += strlen("drbdmeta") - strlen(progname);
+    drbdmeta = malloc(len);
+    if (drbdmeta) {
+      strncpy(drbdmeta, argv[0], (progname - argv[0]));
+      strcpy(drbdmeta + (progname - argv[0]), "drbdmeta");
+    }
+
     argv[0] = progname;
   }
-  if (drbdsetup == NULL) {
+
+  if(argc == 1) print_usage_and_exit("missing arguments"); // arguments missing.
+
+  if (drbdsetup == NULL || drbdmeta == NULL) {
     fprintf(stderr,"could not strdup argv[0].\n");
     exit(E_exec_error);
   }
@@ -1602,14 +1613,6 @@
     }
   }
 
-  if(drbdsetup == NULL) {
-    find_drbdcmd(&drbdsetup,(char *[]){"./drbdsetup", "/sbin/drbdsetup", 0 });
-  }
-
-  if(drbdmeta == NULL) {
-    find_drbdcmd(&drbdmeta,(char *[]){"./drbdmeta", "/sbin/drbdmeta", 0 });
-  }
-
   uc_node(global_options.usage_count);
 
   if(cmd->res_name_required)

Modified: trunk/user/drbdmeta.c
===================================================================
--- trunk/user/drbdmeta.c	2006-08-11 11:52:20 UTC (rev 2366)
+++ trunk/user/drbdmeta.c	2006-08-11 23:07:59 UTC (rev 2367)
@@ -1350,7 +1350,7 @@
 		size_t i;
 		unsigned int percent_done = 0;
 		unsigned int percent_last_report = 0;
-		fprintf(stderr,"initialising bitmap (%u KB)\n", (bm_bytes>>10));
+		fprintf(stderr,"initialising bitmap (%u KB)\n", (unsigned int)(bm_bytes>>10));
 		/* give some progress */
 		for (i = 0; i < bm_bytes; i += chunk) {
 			MEMSET((char*)cfg->on_disk.bm+i, 0xff, chunk);
@@ -1360,11 +1360,11 @@
 				percent_last_report = percent_done;
 			}
 		}
+		fprintf(stderr,"\r100%%\n");
 #else
 		printf("initialising bitmap (%u KB)\n", (bm_bytes>>10));
 		MEMSET((void*)cfg->on_disk.bm, 0xff, bm_bytes);
 #endif
-		//fprintf(stderr,"\r100%%\n");
 	}
 #endif
 	return 0;
@@ -2460,16 +2460,6 @@
 		exit(20);
 	}
 
-	cfg->drbd_fd = dt_lock_open_drbd(cfg->drbd_dev_name, &cfg->lock_fd, 1);
-	if (cfg->drbd_fd > -1) {
-		if (is_attached(dt_minor_of_dev(cfg->drbd_dev_name))) {
-			fprintf(stderr, "Device '%s' is configured!\n",
-				cfg->drbd_dev_name);
-			exit(20);
-		}
-	}
-
-
 	for (i = 0; i < ARRY_SIZE(cmds); i++) {
 		if (!strcmp(cmds[i].name, argv[ai])) {
 			command = cmds + i;
@@ -2482,6 +2472,17 @@
 	}
 	ai++;
 
+	cfg->drbd_fd = dt_lock_open_drbd(cfg->drbd_dev_name, &cfg->lock_fd, 1);
+	if (cfg->drbd_fd > -1) {
+		if (is_attached(dt_minor_of_dev(cfg->drbd_dev_name))) {
+			if (!(force && (command->function == meta_dump_md))) {
+				fprintf(stderr, "Device '%s' is configured!\n",
+					cfg->drbd_dev_name);
+				exit(20);
+			}
+		}
+	}
+
 	return command->function(cfg, argv + ai, argc - ai);
 	/* and if we want an explicit free,
 	 * this would be the place for it.

_______________________________________________
drbd-cvs mailing list
drbd-cvs@lists.linbit.com
http://lists.linbit.com/mailman/listinfo/drbd-cvs
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic