[DRBD-cvs] DRBD CVS: drbd by phil from
drbd-user@lists.linbit.com
drbd-user@lists.linbit.com
Thu, 15 Jan 2004 16:21:07 +0100 (CET)
DRBD CVS committal
Author : phil
Host :
Module : drbd
Dir : drbd/drbd
Modified Files:
Tag: rel-0_7-branch
drbd_actlog.c drbd_dsender.c drbd_int.h drbd_receiver.c
Log Message:
Tried to fix w_resync_finished() logic.
Testing needed. Will do later...
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/Attic/drbd_actlog.c,v
retrieving revision 1.1.2.53
retrieving revision 1.1.2.54
diff -u -3 -r1.1.2.53 -r1.1.2.54
--- drbd_actlog.c 15 Jan 2004 14:26:29 -0000 1.1.2.53
+++ drbd_actlog.c 15 Jan 2004 15:21:07 -0000 1.1.2.54
@@ -560,13 +560,14 @@
from other places in non IRQ */
unsigned long flags=0;
int cleared;
- /* notify of SYNC_FINISHED is now done by other means */
+ int finished=0;
cleared = bm_set_bit(mdev, sector, blk_size, SS_IN_SYNC);
spin_lock_irqsave(&mdev->al_lock,flags);
mdev->rs_left -= cleared;
D_ASSERT((long)mdev->rs_left >= 0);
+ if( cleared && mdev->rs_left == 0 ) finished=1;
if(jiffies - mdev->rs_mark_time > HZ*10) {
mdev->rs_mark_time=jiffies;
@@ -575,6 +576,13 @@
spin_unlock_irqrestore(&mdev->al_lock,flags);
drbd_try_clear_on_disk_bm(mdev,sector,cleared,may_sleep);
+
+ if( finished ) {
+ // This must be after the last call to clear_on_disk_bm() !
+ D_ASSERT( mdev->resync_work.cb == w_resync_inactive );
+ mdev->resync_work.cb = w_resync_finished;
+ __drbd_queue_work(mdev,&mdev->data.work,&mdev->resync_work);
+ }
}
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/Attic/drbd_dsender.c,v
retrieving revision 1.1.2.47
retrieving revision 1.1.2.48
diff -u -3 -r1.1.2.47 -r1.1.2.48
--- drbd_dsender.c 15 Jan 2004 14:26:29 -0000 1.1.2.47
+++ drbd_dsender.c 15 Jan 2004 15:21:07 -0000 1.1.2.48
@@ -72,12 +72,6 @@
__drbd_queue_work(mdev,&mdev->data.work,&e->w);
}
-int w_resync_source(drbd_dev *mdev, struct drbd_work *w)
-{
- ERR("I seem to be resync source, but callback triggered??\n");
- return 0;
-}
-
int w_resync_inactive(drbd_dev *mdev, struct drbd_work *w)
{
ERR("resync inactive, but callback triggered??\n");
@@ -155,8 +149,7 @@
if (sector == MBDS_DONE) {
INVALIDATE_MAGIC(pr);
mempool_free(pr,drbd_pr_mempool);
- // __queue_work ... shortcut.
- w_resync_finished(mdev,w);
+ mdev->resync_work.cb = w_resync_inactive;
return 1;
}
@@ -191,7 +184,6 @@
} else {
// If we are SyncSource we must be consistent :)
mdev->gen_cnt[Flags] |= MDF_Consistent;
- w->cb = w_resync_source;
if ( mdev->rs_total == 0 ) {
w->cb = w_resync_finished;
__drbd_queue_work(mdev,&mdev->data.work,w);
@@ -216,7 +208,6 @@
if (mdev->cstate == SyncTarget) {
mdev->gen_cnt[Flags] |= MDF_Consistent;
drbd_md_write(mdev);
- drbd_send_short_cmd(mdev,SyncDone);
}
mdev->rs_total = 0;
set_cstate(mdev,Connected);
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_int.h,v
retrieving revision 1.58.2.90
retrieving revision 1.58.2.91
diff -u -3 -r1.58.2.90 -r1.58.2.91
--- drbd_int.h 15 Jan 2004 14:26:29 -0000 1.58.2.90
+++ drbd_int.h 15 Jan 2004 15:21:07 -0000 1.58.2.91
@@ -344,7 +344,6 @@
SyncParam,
SyncStop,
SyncCont,
- SyncDone,
MAX_CMD,
MayIgnore = 0x100, // Flag only to test if (cmd > MayIgnore) ...
MAX_OPT_CMD,
@@ -375,7 +374,6 @@
case SyncParam : return "SyncParam";
case SyncStop : return "SyncStop";
case SyncCont : return "SyncCont";
- case SyncDone : return "SyncDone";
case MAX_CMD : return "MAX_CMD";
case MayIgnore : return "MayIgnore";
case MAX_OPT_CMD : return "MAX_OPT_CMD";
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_receiver.c,v
retrieving revision 1.97.2.81
retrieving revision 1.97.2.82
diff -u -3 -r1.97.2.81 -r1.97.2.82
--- drbd_receiver.c 15 Jan 2004 14:26:29 -0000 1.97.2.81
+++ drbd_receiver.c 15 Jan 2004 15:21:07 -0000 1.97.2.82
@@ -1532,27 +1532,6 @@
return TRUE; // cannot fail ?
}
-STATIC int receive_SyncDone(drbd_dev *mdev, Drbd_Header *h)
-{
- unsigned long dt;
- D_ASSERT(mdev->cstate == SyncSource);
- D_ASSERT(mdev->resync_work.cb == w_resync_source);
-
- INIT_LIST_HEAD(&mdev->resync_work.list);
- mdev->resync_work.cb = w_resync_inactive;
-
- dt = (jiffies - mdev->rs_start) / HZ + 1;
- INFO("Resync done (total %lu sec; %lu K/sec)\n",
- dt,(mdev->rs_total/2)/dt);
-
- mdev->rs_total = 0;
- set_cstate(mdev,Connected);
-
- // assert that all bit-map parts are cleared.
- D_ASSERT(list_empty(&mdev->resync->lru));
- return TRUE; // cannot fail ?
-}
-
typedef int (*drbd_cmd_handler_f)(drbd_dev*,Drbd_Header*);
static drbd_cmd_handler_f drbd_default_handler[] = {
@@ -1576,7 +1555,6 @@
[SyncParam] = receive_SyncParam,
[SyncStop] = receive_SyncStop,
[SyncCont] = receive_SyncCont,
- [SyncDone] = receive_SyncDone,
};
static drbd_cmd_handler_f *drbd_cmd_handler = drbd_default_handler;