[DRBD-cvs] r1678 - in trunk: drbd drbd/linux user

svn at svn.drbd.org svn at svn.drbd.org
Mon Dec 13 23:17:20 CET 2004


Author: phil
Date: 2004-12-13 23:17:17 +0100 (Mon, 13 Dec 2004)
New Revision: 1678

Modified:
   trunk/drbd/drbd_fs.c
   trunk/drbd/drbd_main.c
   trunk/drbd/drbd_strings.c
   trunk/drbd/linux/drbd.h
   trunk/user/Makefile
   trunk/user/drbdsetup.c
Log:
* The "drbdsetup /dev/drbdX outdate" command works by now.
* drbdsetup now uses the functions from the drbd_strings.c
  file for the error strings (at least in some places).


Modified: trunk/drbd/drbd_fs.c
===================================================================
--- trunk/drbd/drbd_fs.c	2004-12-13 21:11:24 UTC (rev 1677)
+++ trunk/drbd/drbd_fs.c	2004-12-13 22:17:17 UTC (rev 1678)
@@ -625,6 +625,8 @@
 		nps = DUnknown;
 		break;
 	default:
+		/* The script is broken ... */
+		drbd_md_inc(mdev,ConnectedCnt);
 		nps = DUnknown;
 		ERR("outdate-peer helper returned %d (%d)\n",(r>>8)&&0xff,r);
 	}
@@ -864,17 +866,17 @@
 	return 0;
 }
 
-STATIC int drbd_outdate_ioctl(drbd_dev *mdev)
+STATIC int drbd_outdate_ioctl(drbd_dev *mdev, int *reason)
 {
 	drbd_state_t os,ns;
-	int r;
+	int err,r;
 
 	spin_lock_irq(&mdev->req_lock);
 	os = mdev->state;
 	if( mdev->state.s.disk < Outdated ) { 
 		r=-999;
 	} else {
-		r = _drbd_set_state(mdev, _NS(disk,Outdated), 0);
+		r = _drbd_set_state(mdev, _NS(disk,Outdated), ChgStateVerbose);
 	}
 	ns = mdev->state;
 	spin_unlock_irq(&mdev->req_lock);
@@ -886,7 +888,9 @@
 	after_state_ch(mdev,os,ns); // TODO decide if neccesarry.
 	
 	if( r <= 0 ) {
-		return -EIO;
+		err = put_user(r, reason);
+		if(!err) err=-EIO;
+		return err;
 	}
 	
 	drbd_md_write(mdev);
@@ -1178,7 +1182,7 @@
 		break;
 
 	case DRBD_IOCTL_OUTDATE_DISK:
-		err = drbd_outdate_ioctl(mdev);
+		err = drbd_outdate_ioctl(mdev,(int *) arg);
 		break;
 
 	default:

Modified: trunk/drbd/drbd_main.c
===================================================================
--- trunk/drbd/drbd_main.c	2004-12-13 21:11:24 UTC (rev 1677)
+++ trunk/drbd/drbd_main.c	2004-12-13 22:17:17 UTC (rev 1678)
@@ -477,29 +477,31 @@
 		if( !mdev->conf.two_primaries && 
 		    ns.s.role == Primary && ns.s.peer == Primary ) rv=-1;
 
-		if( ns.s.role == Primary && ns.s.conn < Connected &&
-		    ns.s.disk <= Outdated ) rv=-2;
+		else if( ns.s.role == Primary && ns.s.conn < Connected &&
+			 ns.s.disk <= Outdated ) rv=-2;
 
-		if( ns.s.role == Primary && ns.s.conn < Connected &&
-		    ns.s.pdsk >= Unknown ) rv=-7;
+		else if( ns.s.role == Primary && ns.s.conn < Connected &&
+			 ns.s.pdsk >= Unknown ) rv=-7;
 
-		if( ns.s.role == Primary && ns.s.disk <= Inconsistent && 
-		    ns.s.pdsk <= Inconsistent ) rv=-2;
+		else if( ns.s.role == Primary && ns.s.disk <= Inconsistent && 
+			 ns.s.pdsk <= Inconsistent ) rv=-2;
 
-		if( ns.s.peer == Primary && ns.s.pdsk <= Inconsistent ) rv=-3;
+		else if( ns.s.peer == Primary && ns.s.pdsk <= Inconsistent ) 
+			rv=-3;
 
-		if( ns.s.conn > Connected && 
-		    ns.s.disk < UpToDate && ns.s.pdsk < UpToDate ) rv=-4;
+		else if( ns.s.conn > Connected && 
+			 ns.s.disk < UpToDate && ns.s.pdsk < UpToDate ) rv=-4;
 
-		if( ns.s.conn > Connected && 
-		    (ns.s.disk == Diskless || ns.s.pdsk == Diskless ) ) rv=-5;
+		else if( ns.s.conn > Connected && 
+			 (ns.s.disk == Diskless || ns.s.pdsk == Diskless ) ) 
+			rv=-5;
 
-		if( (ns.s.conn == Connected ||
-		     ns.s.conn == SkippedSyncS ||
-		     ns.s.conn == WFBitMapS ||
-		     ns.s.conn == SyncSource ||
-		     ns.s.conn == PausedSyncS) &&
-		    ns.s.disk == Outdated ) rv=-6;
+		else if( (ns.s.conn == Connected ||
+			  ns.s.conn == SkippedSyncS ||
+			  ns.s.conn == WFBitMapS ||
+			  ns.s.conn == SyncSource ||
+			  ns.s.conn == PausedSyncS) &&
+			 ns.s.disk == Outdated ) rv=-6;
 	}
 
 	if(rv <= 0) {

Modified: trunk/drbd/drbd_strings.c
===================================================================
--- trunk/drbd/drbd_strings.c	2004-12-13 21:11:24 UTC (rev 1677)
+++ trunk/drbd/drbd_strings.c	2004-12-13 22:17:17 UTC (rev 1678)
@@ -81,13 +81,13 @@
 }
 
 const char* disks_to_name(drbd_disks_t s) {
-	return s < DUnknown    ? "TO_SMALL" :
+	return s < Diskless    ? "TO_SMALL" :
 	       s > UpToDate    ? "TO_LARGE"
 		               : drbd_disk_s_names[s];
 }
 
 const char* set_st_err_name(int err) {
-	return err < -6 ? "TO_SMALL" :
+	return err < -7 ? "TO_SMALL" :
 	       err > -1 ? "TO_LARGE"
 		        : drbd_state_sw_errors[-err];
 }

Modified: trunk/drbd/linux/drbd.h
===================================================================
--- trunk/drbd/linux/drbd.h	2004-12-13 21:11:24 UTC (rev 1677)
+++ trunk/drbd/linux/drbd.h	2004-12-13 22:17:17 UTC (rev 1678)
@@ -270,7 +270,7 @@
 #define DRBD_IOCTL_WAIT_SYNC        _IOR( DRBD_IOCTL_LETTER, 0x12, struct ioctl_wait )
 #define DRBD_IOCTL_UNCONFIG_DISK    _IO ( DRBD_IOCTL_LETTER, 0x13 )
 #define DRBD_IOCTL_SET_STATE_FLAGS  _IOW( DRBD_IOCTL_LETTER, 0x14, drbd_role_t )
-#define DRBD_IOCTL_OUTDATE_DISK     _IO ( DRBD_IOCTL_LETTER, 0x15 )
+#define DRBD_IOCTL_OUTDATE_DISK     _IOW( DRBD_IOCTL_LETTER, 0x15, int )
 
 
 #endif

Modified: trunk/user/Makefile
===================================================================
--- trunk/user/Makefile	2004-12-13 21:11:24 UTC (rev 1677)
+++ trunk/user/Makefile	2004-12-13 22:17:17 UTC (rev 1678)
@@ -23,7 +23,8 @@
 drbdadm-obj = drbdadm_scanner.o drbdadm_parser.o drbdadm_main.o \
 	      drbdadm_adjust.o drbdtool_common.o ../drbd/drbd_buildtag.o
 
-drbdsetup-obj = drbdsetup.o drbdtool_common.o ../drbd/drbd_buildtag.o
+drbdsetup-obj = drbdsetup.o drbdtool_common.o ../drbd/drbd_buildtag.o \
+	        ../drbd/drbd_strings.o
 
 drbdmeta-obj = drbdmeta.o drbdtool_common.o ../drbd/drbd_buildtag.o
 

Modified: trunk/user/drbdsetup.c
===================================================================
--- trunk/user/drbdsetup.c	2004-12-13 21:11:24 UTC (rev 1677)
+++ trunk/user/drbdsetup.c	2004-12-13 22:17:17 UTC (rev 1678)
@@ -969,14 +969,17 @@
 int cmd_outdate(int drbd_fd,char** argv,int argc,struct option *options)
 {
   int err;
+  int reason;
 
-  err=ioctl(drbd_fd,DRBD_IOCTL_OUTDATE_DISK);
+  err=ioctl(drbd_fd,DRBD_IOCTL_OUTDATE_DISK,&reason);
   if(err)
     {
       err=errno;
       PERROR("ioctl(,OUTDATE_DISK,) failed");
-      if(err==EISCONN)
-	fprintf(stderr,"Only possible when not connected to the peer.\n");
+      if(err==EIO) 
+	{
+	  fprintf(stderr,"%s\n",set_st_err_name(reason));
+	}
       return 20;
     }
   return 0;
@@ -1268,12 +1271,6 @@
 
 int cmd_state(int drbd_fd,char** argv,int argc,struct option *options)
 {
-  static const char *state_names[] = {
-    [Primary]   = "Primary",
-    [Secondary] = "Secondary",
-    [Unknown]   = "Unknown"
-  };
-
   struct ioctl_get_config cn;
   int err;
 
@@ -1290,33 +1287,14 @@
       return 0;
     }
 
-  printf("%s/%s\n",state_names[cn.state.s.role],state_names[cn.state.s.peer]);
+  printf("%s/%s\n",roles_to_name(cn.state.s.role),
+	 roles_to_name(cn.state.s.peer));
 
   return 0;
 }
 
 int cmd_cstate(int drbd_fd,char** argv,int argc,struct option *options)
 {
-  static const char *cstate_names[] = {
-    [Unconfigured]   = "Unconfigured",
-    [StandAlone]     = "StandAlone",
-    [Unconnected]    = "Unconnected",
-    [Timeout]        = "Timeout",
-    [BrokenPipe]     = "BrokenPipe",
-    [NetworkFailure] = "NetworkFailure",
-    [WFConnection]   = "WFConnection",
-    [WFReportParams] = "WFReportParams",
-    [Connected]      = "Connected",
-    [SkippedSyncS]   = "SkippedSyncS",
-    [SkippedSyncT]   = "SkippedSyncT",
-    [WFBitMapS]      = "WFBitMapS",
-    [WFBitMapT]      = "WFBitMapT",
-    [SyncSource]     = "SyncSource",
-    [SyncTarget]     = "SyncTarget",
-    [PausedSyncS]    = "PausedSyncS",
-    [PausedSyncT]    = "PausedSyncT"
-  };
-
   struct ioctl_get_config cn;
   int err;
 
@@ -1333,7 +1311,7 @@
       return 0;
     }
 
-  printf("%s\n",cstate_names[cn.state.s.conn]);
+  printf("%s\n",conns_to_name(cn.state.s.conn));
 
   return 0;
 }



More information about the drbd-cvs mailing list