Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 346035
b: refs/heads/master
c: 992d6e9
h: refs/heads/master
i:
  346033: c442ac3
  346031: 24c8cc9
v: v3
  • Loading branch information
Lars Ellenberg authored and Philipp Reisner committed Nov 8, 2012
1 parent 96f8f25 commit 9691373
Show file tree
Hide file tree
Showing 5 changed files with 12 additions and 24 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: f3dfa40a67c354a5886c5ae53a9c5d3a2c6fd06e
refs/heads/master: 992d6e91d3654c11c2e4d8d5933ffbf82a0440f0
2 changes: 1 addition & 1 deletion trunk/drivers/block/drbd/drbd_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -503,7 +503,7 @@ static int drbd_thread_setup(void *arg)
thi->task = NULL;
thi->t_state = NONE;
smp_mb();
complete(&thi->stop);
complete_all(&thi->stop);
spin_unlock_irqrestore(&thi->t_lock, flags);

conn_info(tconn, "Terminating %s\n", current->comm);
Expand Down
14 changes: 10 additions & 4 deletions trunk/drivers/block/drbd/drbd_nl.c
Original file line number Diff line number Diff line change
Expand Up @@ -1050,10 +1050,16 @@ static void conn_reconfig_start(struct drbd_tconn *tconn)
/* if still unconfigured, stops worker again. */
static void conn_reconfig_done(struct drbd_tconn *tconn)
{
bool stop_threads;
spin_lock_irq(&tconn->req_lock);
if (conn_all_vols_unconf(tconn))
drbd_thread_stop_nowait(&tconn->worker);
stop_threads = conn_all_vols_unconf(tconn);
spin_unlock_irq(&tconn->req_lock);
if (stop_threads) {
/* asender is implicitly stopped by receiver
* in drbd_disconnect() */
drbd_thread_stop(&tconn->receiver);
drbd_thread_stop(&tconn->worker);
}
}

/* Make sure IO is suspended before calling this function(). */
Expand Down Expand Up @@ -3123,7 +3129,6 @@ int drbd_adm_down(struct sk_buff *skb, struct genl_info *info)

/* delete connection */
if (conn_lowest_minor(adm_ctx.tconn) < 0) {
drbd_thread_stop(&adm_ctx.tconn->worker);
list_del(&adm_ctx.tconn->all_tconn);
kref_put(&adm_ctx.tconn->kref, &conn_destroy);

Expand All @@ -3133,7 +3138,6 @@ int drbd_adm_down(struct sk_buff *skb, struct genl_info *info)
retcode = ERR_CONN_IN_USE;
drbd_msg_put_info("failed to delete connection");
}

up_write(&drbd_cfg_rwsem);
goto out;
out_unlock:
Expand Down Expand Up @@ -3164,6 +3168,8 @@ int drbd_adm_delete_connection(struct sk_buff *skb, struct genl_info *info)
}
up_write(&drbd_cfg_rwsem);

if (retcode == NO_ERROR)
drbd_thread_stop(&adm_ctx.tconn->worker);
out:
drbd_adm_finish(info, retcode);
return 0;
Expand Down
14 changes: 0 additions & 14 deletions trunk/drivers/block/drbd/drbd_state.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ struct after_state_chg_work {
static int w_after_state_ch(struct drbd_work *w, int unused);
static void after_state_ch(struct drbd_conf *mdev, union drbd_state os,
union drbd_state ns, enum chg_state_flags flags);
static void after_all_state_ch(struct drbd_tconn *tconn);
static enum drbd_state_rv is_valid_state(struct drbd_conf *, union drbd_state);
static enum drbd_state_rv is_valid_soft_transition(union drbd_state, union drbd_state);
static enum drbd_state_rv is_valid_transition(union drbd_state os, union drbd_state ns);
Expand Down Expand Up @@ -1380,8 +1379,6 @@ static void after_state_ch(struct drbd_conf *mdev, union drbd_state os,
resume_next_sg(mdev);
}

after_all_state_ch(mdev->tconn);

drbd_md_sync(mdev);
}

Expand All @@ -1393,12 +1390,6 @@ struct after_conn_state_chg_work {
enum chg_state_flags flags;
};

static void after_all_state_ch(struct drbd_tconn *tconn)
{
if (conn_all_vols_unconf(tconn))
drbd_thread_stop_nowait(&tconn->worker);
}

static int w_after_conn_state_ch(struct drbd_work *w, int unused)
{
struct after_conn_state_chg_work *acscw =
Expand Down Expand Up @@ -1461,12 +1452,7 @@ static int w_after_conn_state_ch(struct drbd_work *w, int unused)
spin_unlock_irq(&tconn->req_lock);
}
}


//conn_err(tconn, STATE_FMT, STATE_ARGS("nms", nms));
after_all_state_ch(tconn);
kref_put(&tconn->kref, &conn_destroy);

return 0;
}

Expand Down
4 changes: 0 additions & 4 deletions trunk/drivers/block/drbd/drbd_worker.c
Original file line number Diff line number Diff line change
Expand Up @@ -1744,10 +1744,6 @@ int drbd_worker(struct drbd_thread *thi)
*/
spin_unlock_irq(&tconn->data.work.q_lock);

/* _drbd_set_state only uses stop_nowait.
* wait here for the exiting receiver. */
drbd_thread_stop(&tconn->receiver);

down_read(&drbd_cfg_rwsem);
idr_for_each_entry(&tconn->volumes, mdev, vnr) {
D_ASSERT(mdev->state.disk == D_DISKLESS && mdev->state.conn == C_STANDALONE);
Expand Down

0 comments on commit 9691373

Please sign in to comment.