From: Philipp Reisner Date: Sun, 24 Apr 2011 09:09:55 +0000 (+0200) Subject: drbd: Removed the OBJECT_DYING and the CONFIG_PENDING bits X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=a18e9d1eb0660621eb9911e59a9b4d664cbad4d9;p=linux-beck.git drbd: Removed the OBJECT_DYING and the CONFIG_PENDING bits superseded by refcounting Signed-off-by: Philipp Reisner Signed-off-by: Lars Ellenberg --- diff --git a/drivers/block/drbd/drbd_int.h b/drivers/block/drbd/drbd_int.h index 7797879d3264..28e7ecc91888 100644 --- a/drivers/block/drbd/drbd_int.h +++ b/drivers/block/drbd/drbd_int.h @@ -816,12 +816,6 @@ enum { GOT_PING_ACK, /* set when we receive a ping_ack packet, ping_wait gets woken */ CONN_WD_ST_CHG_OKAY, CONN_WD_ST_CHG_FAIL, - CONFIG_PENDING, /* serialization of (re)configuration requests. - * if set, also prevents the device from dying */ - OBJECT_DYING, /* device became unconfigured, - * but worker thread is still handling the cleanup. - * reconfiguring (nl_disk_conf, nl_net_conf) is dissalowed, - * while this is set. */ CONN_DRY_RUN, /* Expect disconnect after resync handshake. */ }; diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c index 272c4a08ee42..caaef71ec614 100644 --- a/drivers/block/drbd/drbd_nl.c +++ b/drivers/block/drbd/drbd_nl.c @@ -1040,34 +1040,20 @@ void drbd_reconsider_max_bio_size(struct drbd_conf *mdev) drbd_setup_queue_param(mdev, new); } -/* serialize deconfig (worker exiting, doing cleanup) - * and reconfig (drbdsetup disk, drbdsetup net) - * - * Wait for a potentially exiting worker, then restart it, - * or start a new one. Flush any pending work, there may still be an - * after_state_change queued. - */ +/* Starts the worker thread */ static void conn_reconfig_start(struct drbd_tconn *tconn) { - wait_event(tconn->ping_wait, !test_and_set_bit(CONFIG_PENDING, &tconn->flags)); - wait_event(tconn->ping_wait, !test_bit(OBJECT_DYING, &tconn->flags)); drbd_thread_start(&tconn->worker); conn_flush_workqueue(tconn); } -/* if still unconfigured, stops worker again. - * if configured now, clears CONFIG_PENDING. - * wakes potential waiters */ +/* if still unconfigured, stops worker again. */ static void conn_reconfig_done(struct drbd_tconn *tconn) { spin_lock_irq(&tconn->req_lock); - if (conn_all_vols_unconf(tconn)) { - set_bit(OBJECT_DYING, &tconn->flags); + if (conn_all_vols_unconf(tconn)) drbd_thread_stop_nowait(&tconn->worker); - } else - clear_bit(CONFIG_PENDING, &tconn->flags); spin_unlock_irq(&tconn->req_lock); - wake_up(&tconn->ping_wait); } /* Make sure IO is suspended before calling this function(). */ diff --git a/drivers/block/drbd/drbd_state.c b/drivers/block/drbd/drbd_state.c index d7a330e0135f..05628b45cf03 100644 --- a/drivers/block/drbd/drbd_state.c +++ b/drivers/block/drbd/drbd_state.c @@ -926,18 +926,6 @@ __drbd_set_state(struct drbd_conf *mdev, union drbd_state ns, mdev->tconn->susp_nod = ns.susp_nod; mdev->tconn->susp_fen = ns.susp_fen; - /* solve the race between becoming unconfigured, - * worker doing the cleanup, and - * admin reconfiguring us: - * on (re)configure, first set CONFIG_PENDING, - * then wait for a potentially exiting worker, - * start the worker, and schedule one no_op. - * then proceed with configuration. - */ - if(conn_all_vols_unconf(mdev->tconn) && - !test_and_set_bit(CONFIG_PENDING, &mdev->tconn->flags)) - set_bit(OBJECT_DYING, &mdev->tconn->flags); - if (os.disk == D_ATTACHING && ns.disk >= D_NEGOTIATING) drbd_print_uuids(mdev, "attached to UUIDs"); @@ -1401,10 +1389,8 @@ struct after_conn_state_chg_work { static void after_all_state_ch(struct drbd_tconn *tconn) { - if (conn_all_vols_unconf(tconn) && - test_bit(OBJECT_DYING, &tconn->flags)) { + 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) diff --git a/drivers/block/drbd/drbd_worker.c b/drivers/block/drbd/drbd_worker.c index 9d1ba8ea6818..7a73bd4287c4 100644 --- a/drivers/block/drbd/drbd_worker.c +++ b/drivers/block/drbd/drbd_worker.c @@ -1754,9 +1754,6 @@ int drbd_worker(struct drbd_thread *thi) drbd_mdev_cleanup(mdev); } up_read(&drbd_cfg_rwsem); - clear_bit(OBJECT_DYING, &tconn->flags); - clear_bit(CONFIG_PENDING, &tconn->flags); - wake_up(&tconn->ping_wait); return 0; }