[DRBD-cvs] drbd by phil; * Backport of the reparent_to_init() thi...
drbd-user@lists.linbit.com
drbd-user@lists.linbit.com
Tue, 6 Apr 2004 11:14:18 +0200 (CEST)
DRBD CVS committal
Author : phil
Module : drbd
Dir : drbd/drbd
Modified Files:
drbd_int.h drbd_main.c drbd_receiver.c drbd_syncer.c
Log Message:
* Backport of the reparent_to_init() thing instead of collect_zombies()
* Improved messeges, on start and end of sync.
[Patch by LGE]
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_int.h,v
retrieving revision 1.78
retrieving revision 1.79
diff -u -3 -r1.78 -r1.79
--- drbd_int.h 22 Feb 2004 18:49:39 -0000 1.78
+++ drbd_int.h 6 Apr 2004 09:14:12 -0000 1.79
@@ -282,7 +282,6 @@
/* flag bits */
#define ISSUE_BARRIER 0
-#define COLLECT_ZOMBIES 1
#define SEND_PING 2
#define WRITER_PRESENT 3
#define BECOME_SECONDARY 4
@@ -613,10 +612,6 @@
#define wq_write_lock_irq(A) write_lock_irq(A)
#define wq_write_unlock(A) write_unlock(A)
#define wq_write_unlock_irqrestore(A,B) write_unlock_irqrestore(A,B)
-#endif
-
-#ifdef __arch_um__
-#define waitpid(A,B,C) 0
#endif
#if !defined(CONFIG_HIGHMEM) && !defined(bh_kmap)
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_main.c,v
retrieving revision 1.91
retrieving revision 1.92
diff -u -3 -r1.91 -r1.92
--- drbd_main.c 22 Feb 2004 18:49:39 -0000 1.91
+++ drbd_main.c 6 Apr 2004 09:14:12 -0000 1.92
@@ -441,13 +441,13 @@
int retval;
daemonize();
+ reparent_to_init();
down(&thi->mutex); //ensures that thi->task is set.
retval = thi->function(thi);
thi->task = 0;
- set_bit(COLLECT_ZOMBIES,&drbd_conf[thi->minor].flags);
up(&thi->mutex); //allow thread_stop to proceed
return retval;
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_receiver.c,v
retrieving revision 1.135
retrieving revision 1.136
diff -u -3 -r1.135 -r1.136
--- drbd_receiver.c 22 Feb 2004 18:49:39 -0000 1.135
+++ drbd_receiver.c 6 Apr 2004 09:14:12 -0000 1.136
@@ -838,6 +838,8 @@
mdev->resync_mark_start = jiffies;
/* This is in units of 1024 bytes... */
mdev->resync_mark_cnt = 0;
+ printk(KERN_INFO DEVICE_NAME "%d: %s Synchronisation started (target)\n",
+ (int)(mdev-drbd_conf), mdev->cstate == SyncingAll ? "FULL" : "incremental");
}
STATIC inline int receive_cstate(struct Drbd_Conf* mdev)
@@ -1202,14 +1204,6 @@
return TRUE;
}
-
-STATIC inline void drbd_collect_zombies(int minor)
-{
- if(test_and_clear_bit(COLLECT_ZOMBIES,&drbd_conf[minor].flags)) {
- while( waitpid(-1, NULL, __WCLONE|WNOHANG) > 0 );
- }
-}
-
inline void
drbd_header_error(int minor,Drbd_Packet *h, const char *s)
{
@@ -1226,7 +1220,6 @@
int i;
while (TRUE) {
- drbd_collect_zombies(minor); // in case a syncer exited.
if(test_bit(BECOME_SECONDARY,&drbd_conf[minor].flags)) {
drbd_set_state(minor,Secondary|DontWait);
if( drbd_conf[minor].state == Secondary ) {
@@ -1290,6 +1283,7 @@
if (drbd_conf[minor].sync.skip == 1)
drbd_conf[minor].sync.skip = 0;
drbd_md_write(minor);
+ printk(KERN_INFO DEVICE_NAME "%d: Successfully sync'ed up.\n",minor);
break;
case WriteHint: /* both, should only happen on SEC */
run_task_queue(&tq_disk);
@@ -1345,7 +1339,6 @@
up(&drbd_conf[minor].send_mutex);
drbd_thread_stop(&drbd_conf[minor].syncer);
- drbd_collect_zombies(minor);
for(i=0;i<=ArbitraryCnt;i++) {
drbd_conf[minor].bit_map_gen[i]=drbd_conf[minor].gen_cnt[i];
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_syncer.c,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -3 -r1.38 -r1.39
--- drbd_syncer.c 8 Mar 2004 12:19:29 -0000 1.38
+++ drbd_syncer.c 6 Apr 2004 09:14:12 -0000 1.39
@@ -414,8 +414,8 @@
ln2_bs = drbd_conf[minor].blk_size_b;
amount_blks=(amount<<10)/my_blksize;
- printk(KERN_INFO DEVICE_NAME "%d: Synchronisation started blks=%d\n",
- minor,amount_blks);
+ printk(KERN_INFO DEVICE_NAME "%d: %s Synchronisation started blks=%d\n",
+ minor, mdev->cstate == SyncingAll ? "FULL" : "incremental", amount_blks);
if(drbd_conf[minor].cstate == SyncingAll) {
drbd_conf[minor].synced_to = -( 1UL << (ln2_bs-9));
@@ -548,7 +548,31 @@
mdev->sync_method = 0;
if (mdev->sync.skip == 1)
mdev->sync.skip = 0;
- printk(KERN_INFO DEVICE_NAME "%d: Synchronisation done.\n",minor);
+
+ if (mdev->cstate == SyncingAll) {
+ /* mean speed since syncer started */
+ unsigned long db, dt, dbdt, min;
+ dt = ((jiffies - drbd_conf[minor].resync_mark_start) / HZ);
+ min = (dt+59)/60; /* rounded up minutes */
+ if (!dt) dt++;
+ db = blk_size[MAJOR_NR][minor];
+ dbdt=db/dt;
+ if (dbdt > 1000)
+ printk(KERN_INFO DEVICE_NAME
+ "%d: Synchronisation done in "
+ "%lu:%02lu:%02lu, %ld,%03ld K/sec.\n",
+ minor,
+ min / 60, min % 60, dt % 60,
+ dbdt/1000, dbdt % 1000);
+ else
+ printk(KERN_INFO DEVICE_NAME
+ "%d: Synchronisation done in "
+ "%lu:%02lu:%02lu, %ld K/sec.\n",
+ minor,
+ min / 60, min % 60, dt % 60, dbdt);
+ } else {
+ printk(KERN_INFO DEVICE_NAME "%d: Synchronisation done.\n",minor);
+ }
err:
if(mdev->cstate == SyncingAll ||