[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 ||