[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(¤t->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(¤t->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