[DRBD-cvs] svn commit by phil - r2294 - in trunk: . drbd - * Removed the "send_task" code and the conecpt, since w

drbd-cvs at lists.linbit.com drbd-cvs at lists.linbit.com
Tue Jul 25 12:32:40 CEST 2006


Author: phil
Date: 2006-07-25 12:32:38 +0200 (Tue, 25 Jul 2006)
New Revision: 2294

Modified:
   trunk/ROADMAP
   trunk/drbd/drbd_int.h
   trunk/drbd/drbd_main.c
   trunk/drbd/drbd_receiver.c
   trunk/drbd/drbd_req.c
Log:
* Removed the "send_task" code and the conecpt, since we no longer
  send out of the context of a caller of drbd_make_request.
* Fixed the way we determin the "remote" in drbd_req.c
* Added a missing drbd_sync_md()


Modified: trunk/ROADMAP
===================================================================
--- trunk/ROADMAP	2006-07-24 12:11:40 UTC (rev 2293)
+++ trunk/ROADMAP	2006-07-25 10:32:38 UTC (rev 2294)
@@ -803,8 +803,7 @@
    Simon works on this. 
 
 39 Send mirrored write requests out of the worker context.
-   90% DONE
-       TODO: Get rid of the "send_task" thing.
+   99% DONE
 
 
 Maybe:

Modified: trunk/drbd/drbd_int.h
===================================================================
--- trunk/drbd/drbd_int.h	2006-07-24 12:11:40 UTC (rev 2293)
+++ trunk/drbd/drbd_int.h	2006-07-25 10:32:38 UTC (rev 2294)
@@ -775,8 +775,6 @@
 	struct drbd_barrier* oldest_barrier;
 	struct hlist_head * tl_hash;
 	unsigned int tl_hash_s;
-	struct task_struct *send_task; /* about pid calling drbd_send */
-	spinlock_t send_task_lock;
 	// sector_t rs_left;	   // blocks not up-to-date [unit BM_BLOCK_SIZE]
 	// moved into bitmap->bm_set
 	unsigned long rs_total;    // blocks to sync in this run [unit BM_BLOCK_SIZE]

Modified: trunk/drbd/drbd_main.c
===================================================================
--- trunk/drbd/drbd_main.c	2006-07-24 12:11:40 UTC (rev 2293)
+++ trunk/drbd/drbd_main.c	2006-07-25 10:32:38 UTC (rev 2294)
@@ -1212,29 +1212,6 @@
 	}
 }
 
-inline sigset_t drbd_block_all_signals(void)
-{
-	unsigned long flags;
-	sigset_t oldset;
-	LOCK_SIGMASK(current,flags);
-	oldset = current->blocked;
-	sigfillset(&current->blocked);
-	RECALC_SIGPENDING();
-	UNLOCK_SIGMASK(current,flags);
-	return oldset;
-}
-
-inline void restore_old_sigset(sigset_t oldset)
-{
-	unsigned long flags;
-	LOCK_SIGMASK(current,flags);
-	// _never_ propagate this to anywhere...
-	sigdelset(&current->pending.signal, DRBD_SIG);
-	current->blocked = oldset;
-	RECALC_SIGPENDING();
-	UNLOCK_SIGMASK(current,flags);
-}
-
 /* the appropriate socket mutex must be held already */
 int _drbd_send_cmd(drbd_dev *mdev, struct socket *sock,
 			  Drbd_Packet_Cmd cmd, Drbd_Header *h,
@@ -1267,14 +1244,10 @@
 		  Drbd_Packet_Cmd cmd, Drbd_Header* h, size_t size)
 {
 	int ok = 0;
-	sigset_t old_blocked;
 	struct socket *sock;
 
 	if (use_data_socket) {
 		down(&mdev->data.mutex);
-		spin_lock(&mdev->send_task_lock);
-		mdev->send_task=current;
-		spin_unlock(&mdev->send_task_lock);
 		sock = mdev->data.socket;
 	} else {
 		down(&mdev->meta.mutex);
@@ -1284,15 +1257,10 @@
 	/* drbd_disconnect() could have called drbd_free_sock()
 	 * while we were waiting in down()... */
 	if (likely(sock != NULL)) {
-		old_blocked = drbd_block_all_signals();
 		ok = _drbd_send_cmd(mdev, sock, cmd, h, size, 0);
-		restore_old_sigset(old_blocked);
 	}
 
 	if (use_data_socket) {
-		spin_lock(&mdev->send_task_lock);
-		mdev->send_task=NULL;
-		spin_unlock(&mdev->send_task_lock);
 		up(&mdev->data.mutex);
 	} else
 		up(&mdev->meta.mutex);
@@ -1302,7 +1270,6 @@
 int drbd_send_cmd2(drbd_dev *mdev, Drbd_Packet_Cmd cmd, char* data,
 		   size_t size)
 {
-	sigset_t old_blocked;
 	Drbd_Header h;
 	int ok;
 
@@ -1311,20 +1278,10 @@
 	h.length  = cpu_to_be16(size);
 
 	down(&mdev->data.mutex);
-	spin_lock(&mdev->send_task_lock);
-	mdev->send_task=current;
-	spin_unlock(&mdev->send_task_lock);
 
-	old_blocked = drbd_block_all_signals();
-
 	ok = ( sizeof(h) == drbd_send(mdev,mdev->data.socket,&h,sizeof(h),0) );
 	ok = ok && ( size == drbd_send(mdev,mdev->data.socket,data,size,0) );
 
-	restore_old_sigset(old_blocked);
-
-	spin_lock(&mdev->send_task_lock);
-	mdev->send_task=NULL;
-	spin_unlock(&mdev->send_task_lock);
 	up(&mdev->data.mutex);
 
 	return ok;
@@ -1649,11 +1606,6 @@
 	}
 #endif
 
-
-	spin_lock(&mdev->send_task_lock);
-	mdev->send_task=current;
-	spin_unlock(&mdev->send_task_lock);
-
 	/* PARANOIA. if this ever triggers,
 	 * something in the layers above us is really kaputt.
 	 *one roundtrip later:
@@ -1696,10 +1648,6 @@
 	set_fs(oldfs);
 
   out:
-	spin_lock(&mdev->send_task_lock);
-	mdev->send_task=NULL;
-	spin_unlock(&mdev->send_task_lock);
-
 	ok = (len == 0);
 	if (likely(ok))
 		mdev->send_cnt += size>>9;
@@ -1726,15 +1674,10 @@
 int drbd_send_dblock(drbd_dev *mdev, drbd_request_t *req)
 {
 	int ok=1;
-	sigset_t old_blocked;
 	Drbd_Data_Packet p;
 	unsigned int dp_flags=0;
 
-	old_blocked = drbd_block_all_signals();
 	down(&mdev->data.mutex);
-	spin_lock(&mdev->send_task_lock);
-	mdev->send_task=current;
-	spin_unlock(&mdev->send_task_lock);
 
 	p.head.magic   = BE_DRBD_MAGIC;
 	p.head.command = cpu_to_be16(Data);
@@ -1760,12 +1703,7 @@
 		}
 	}
 
-	spin_lock(&mdev->send_task_lock);
-	mdev->send_task=NULL;
-	spin_unlock(&mdev->send_task_lock);
-
 	up(&mdev->data.mutex);
-	restore_old_sigset(old_blocked);
 	return ok;
 }
 
@@ -1777,7 +1715,6 @@
 		    struct Tl_epoch_entry *e)
 {
 	int ok;
-	sigset_t old_blocked;
 	Drbd_Data_Packet p;
 
 	p.head.magic   = BE_DRBD_MAGIC;
@@ -1793,21 +1730,13 @@
 	 * This one may be interupted by DRBD_SIG and/or DRBD_SIGKILL
 	 * in response to ioctl or module unload.
 	 */
-	old_blocked = drbd_block_all_signals();
 	down(&mdev->data.mutex);
-	spin_lock(&mdev->send_task_lock);
-	mdev->send_task=current;
-	spin_unlock(&mdev->send_task_lock);
 
 	dump_packet(mdev,mdev->data.socket,0,(void*)&p, __FILE__, __LINE__);
 	ok = sizeof(p) == drbd_send(mdev,mdev->data.socket,&p,sizeof(p),MSG_MORE);
 	if (ok) ok = _drbd_send_zc_bio(mdev,e->private_bio);
 
-	spin_lock(&mdev->send_task_lock);
-	mdev->send_task=NULL;
-	spin_unlock(&mdev->send_task_lock);
 	up(&mdev->data.mutex);
-	restore_old_sigset(old_blocked);
 	return ok;
 }
 
@@ -2036,7 +1965,6 @@
 	spin_lock_init(&mdev->ee_lock);
 	spin_lock_init(&mdev->req_lock);
 	spin_lock_init(&mdev->pr_lock);
-	spin_lock_init(&mdev->send_task_lock);
 	spin_lock_init(&mdev->peer_seq_lock);
 
 	INIT_LIST_HEAD(&mdev->active_ee);
@@ -2142,7 +2070,6 @@
 	mdev->rs_mark_left =
 	mdev->rs_mark_time = 0;
 	mdev->net_conf     = NULL;
-	mdev->send_task    = NULL;
 	drbd_set_my_capacity(mdev,0);
 	drbd_bm_resize(mdev,0);
 

Modified: trunk/drbd/drbd_receiver.c
===================================================================
--- trunk/drbd/drbd_receiver.c	2006-07-24 12:11:40 UTC (rev 2293)
+++ trunk/drbd/drbd_receiver.c	2006-07-25 10:32:38 UTC (rev 2294)
@@ -2066,6 +2066,7 @@
 	if (test_bit(UNIQUE,&mdev->flags)) drbd_state_unlock(mdev);
 
 	drbd_send_sr_reply(mdev,rv);
+	drbd_md_sync(mdev);
 
 	return TRUE;
 }
@@ -2432,20 +2433,7 @@
 	drbd_thread_stop_nowait(&mdev->worker);
 	drbd_thread_stop(&mdev->asender);
 
-	while(down_trylock(&mdev->data.mutex)) {
-		struct task_struct *task;
-		spin_lock(&mdev->send_task_lock);
-		if((task=mdev->send_task)) {
-			force_sig(DRBD_SIG, task);
-			spin_unlock(&mdev->send_task_lock);
-			down(&mdev->data.mutex);
-			break;
-		} else {
-			spin_unlock(&mdev->send_task_lock);
-			set_current_state(TASK_INTERRUPTIBLE);
-			schedule_timeout(HZ / 10);
-		}
-	}
+	down(&mdev->data.mutex);
 	/* By grabbing the sock_mutex we make sure that no one
 	   uses the socket right now. */
 	drbd_free_sock(mdev);

Modified: trunk/drbd/drbd_req.c
===================================================================
--- trunk/drbd/drbd_req.c	2006-07-24 12:11:40 UTC (rev 2293)
+++ trunk/drbd/drbd_req.c	2006-07-25 10:32:38 UTC (rev 2294)
@@ -301,8 +301,9 @@
 	if (rw == WRITE && local)
 		drbd_al_begin_io(mdev, sector);
 
-	remote = remote && (mdev->state.pdsk == Inconsistent ||
-			    mdev->state.pdsk == UpToDate);
+	remote = remote && (mdev->state.pdsk == UpToDate || 
+			    ( mdev->state.pdsk == Inconsistent && 
+			      mdev->state.conn >= Connected ) );
 
 	D_ASSERT( (rw != WRITE) || (remote == (mdev->state.conn >= Connected)) );
 



More information about the drbd-cvs mailing list