[DRBD-cvs] drbd by phil; Fix for a 32-64 Bit problem, discovered ...
drbd-user@lists.linbit.com
drbd-user@lists.linbit.com
Fri, 2 Jul 2004 13:58:50 +0200 (CEST)
DRBD CVS committal
Author : phil
Module : drbd
Dir : drbd/drbd
Modified Files:
Tag: rel-0_7-branch
drbd_fs.c drbd_int.h
Log Message:
Fix for a 32-64 Bit problem, discovered by LMB on s390x
(reproducible on any long=64b int=32b platform, like Alpha)
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_fs.c,v
retrieving revision 1.28.2.107
retrieving revision 1.28.2.108
diff -u -3 -r1.28.2.107 -r1.28.2.108
--- drbd_fs.c 1 Jul 2004 10:11:12 -0000 1.28.2.107
+++ drbd_fs.c 2 Jul 2004 11:58:45 -0000 1.28.2.108
@@ -1055,13 +1055,19 @@
// We can drop the mutex, we do not touch anything in mdev.
up(&mdev->device_mutex);
- err = wait_event_interruptible_timeout(
+ time = wait_event_interruptible_timeout(
mdev->cstate_wait,
mdev->cstate < Unconnected
|| mdev->cstate >= Connected,
time );
- if (err == 0) err = -ETIME;
- if (err < 0) goto out_unlocked;
+ if (time < 0) {
+ err = time;
+ goto out_unlocked;
+ }
+ if (time == 0) {
+ err = -ETIME;
+ goto out_unlocked;
+ }
err=0; // no error
if(put_user(mdev->cstate>=Connected,&wp->ret_code))err=-EFAULT;
@@ -1074,19 +1080,28 @@
up(&mdev->device_mutex);
do {
- if (mdev->cstate > Connected)
- time=MAX_SCHEDULE_TIMEOUT;
- // XXX else back to user supplied timeout ??
- err = wait_event_interruptible_timeout(
+ time = wait_event_interruptible_timeout(
mdev->cstate_wait,
mdev->cstate == Connected
|| mdev->cstate < Unconnected,
time );
- if (err == 0) err = -ETIME;
- if (err < 0) goto out_unlocked;
- } while (err > 0
- && mdev->cstate != Connected
- && mdev->cstate >= Unconnected);
+
+ if (time < 0 ) {
+ err = time;
+ goto out_unlocked;
+ }
+
+ if (mdev->cstate > Connected) {
+ time=MAX_SCHEDULE_TIMEOUT;
+ }
+
+ if (time == 0) {
+ err = -ETIME;
+ goto out_unlocked;
+ }
+ } while ( mdev->cstate != Connected
+ && mdev->cstate >= Unconnected );
+
err=0; // no error
if(put_user(mdev->cstate==Connected,&wp->ret_code))err=-EFAULT;
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_int.h,v
retrieving revision 1.58.2.181
retrieving revision 1.58.2.182
diff -u -3 -r1.58.2.181 -r1.58.2.182
--- drbd_int.h 1 Jul 2004 10:11:12 -0000 1.58.2.181
+++ drbd_int.h 2 Jul 2004 11:58:45 -0000 1.58.2.182
@@ -1040,7 +1040,7 @@
#define wait_event_interruptible_timeout(wq, condition, timeout) \
({ \
- unsigned long __ret = timeout; \
+ long __ret = timeout; \
if (!(condition)) \
__wait_event_interruptible_timeout(wq, condition, __ret); \
__ret; \