[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