A lot of access already need to be direct, e.g. for using switch statements.
Change the remaining instances to also directly access it and remove the 
wrappers
for it (and sys_flag_nohalt).

sd_leave_handler also got another additional cleanup by using a switch statement
and running the nr_zones check (uselessly but cleaner) for the halt state as 
well
so that it matches the join side.

Signed-off-by: Christoph Hellwig <[email protected]>

---
 sheep/group.c      |   37 ++++++++++++++++++++-----------------
 sheep/ops.c        |   17 ++++++++---------
 sheep/sdnet.c      |    2 +-
 sheep/sheep.c      |    3 ++-
 sheep/sheep_priv.h |   52 ----------------------------------------------------
 5 files changed, 31 insertions(+), 80 deletions(-)

Index: sheepdog/sheep/group.c
===================================================================
--- sheepdog.orig/sheep/group.c 2012-07-19 18:14:11.000000000 +0200
+++ sheepdog/sheep/group.c      2012-07-19 18:22:38.636682134 +0200
@@ -79,7 +79,7 @@ static int get_zones_nr_from(struct sd_n
 
 bool have_enough_zones(void)
 {
-       if (sys_flag_nohalt())
+       if (sys->flags & SD_FLAG_NOHALT)
                return true;
 
        if (!current_vnode_info)
@@ -689,7 +689,7 @@ static void do_get_vdi_bitmap(struct wor
                 * If a new comer try to join the running cluster, it only
                 * need read one copy of bitmap from one of other members.
                 */
-               if (sys_stat_wait_format())
+               if (sys->status == SD_STATUS_WAIT_FOR_FORMAT)
                        break;
        }
 }
@@ -802,7 +802,7 @@ static void update_cluster_info(struct j
                        break;
                }
 
-               sys_stat_set(msg->cluster_status);
+               sys->status = msg->cluster_status;
 
                if (msg->inc_epoch) {
                        uatomic_inc(&sys->epoch);
@@ -818,10 +818,10 @@ static void update_cluster_info(struct j
                }
 
                if (current_vnode_info->nr_zones >= sys->nr_copies)
-                       sys_stat_set(SD_STATUS_OK);
+                       sys->status = SD_STATUS_OK;
                break;
        default:
-               sys_stat_set(msg->cluster_status);
+               sys->status = msg->cluster_status;
                break;
        }
 
@@ -1014,7 +1014,7 @@ void sd_join_handler(struct sd_node *joi
                for (i = 0; i < nr_members; i++)
                        dprintf("[%x] %s\n", i, node_to_str(members + i));
 
-               if (sys_stat_shutdown())
+               if (sys->status == SD_STATUS_SHUTDOWN)
                        break;
 
                update_cluster_info(jm, joined, members, nr_members);
@@ -1024,7 +1024,7 @@ void sd_join_handler(struct sd_node *joi
                        vprintf(SDOG_DEBUG, "join Sheepdog cluster\n");
                break;
        case CJ_RES_FAIL:
-               if (!sys_stat_wait_join())
+               if (sys->status != SD_STATUS_WAIT_FOR_JOIN)
                        break;
 
                if (!add_failed_node(le, joined))
@@ -1037,7 +1037,7 @@ void sd_join_handler(struct sd_node *joi
 
                dprintf("%d == %d + %d\n", nr_local, nr, nr_failed);
                if (nr_local == nr + nr_failed - nr_delayed_nodes) {
-                       sys_stat_set(SD_STATUS_OK);
+                       sys->status = SD_STATUS_OK;
                        log_current_epoch();
                }
                break;
@@ -1062,7 +1062,7 @@ void sd_join_handler(struct sd_node *joi
 
                dprintf("%d == %d + %d\n", nr_local, nr, nr_failed);
                if (nr_local == nr + nr_failed - nr_delayed_nodes) {
-                       sys_stat_set(SD_STATUS_OK);
+                       sys->status = SD_STATUS_OK;
                        log_current_epoch();
                }
 
@@ -1083,24 +1083,27 @@ void sd_leave_handler(struct sd_node *le
        for (i = 0; i < nr_members; i++)
                dprintf("[%x] %s\n", i, node_to_str(members + i));
 
-       if (sys_stat_shutdown())
+       if (sys->status == SD_STATUS_SHUTDOWN)
                return;
 
        old_vnode_info = current_vnode_info;
        current_vnode_info = alloc_vnode_info(members, nr_members);
 
-       if (sys_can_recover()) {
+       switch (sys->status) {
+       case SD_STATUS_HALT:
+       case SD_STATUS_OK:
                uatomic_inc(&sys->epoch);
                log_current_epoch();
                start_recovery(current_vnode_info, old_vnode_info);
-       }
-       put_vnode_info(old_vnode_info);
 
-       if (sys_can_halt()) {
                if (current_vnode_info->nr_zones < sys->nr_copies)
-                       sys_stat_set(SD_STATUS_HALT);
+                       sys->status = SD_STATUS_HALT;
+               break;
+       default:
+               break;
        }
 
+       put_vnode_info(old_vnode_info);
        sockfd_cache_del(&left->nid);
 }
 
@@ -1144,14 +1147,14 @@ int create_cluster(int port, int64_t zon
        dprintf("zone id = %u\n", sys->this_node.zone);
 
        if (get_latest_epoch() > 0) {
-               sys_stat_set(SD_STATUS_WAIT_FOR_JOIN);
+               sys->status = SD_STATUS_WAIT_FOR_JOIN;
 
                get_cluster_copies(&sys->nr_copies);
                get_cluster_flags(&sys->flags);
 
                sys->epoch = get_latest_epoch();
        } else {
-               sys_stat_set(SD_STATUS_WAIT_FOR_FORMAT);
+               sys->status = SD_STATUS_WAIT_FOR_FORMAT;
        }
 
        INIT_LIST_HEAD(&sys->pending_list);
Index: sheepdog/sheep/ops.c
===================================================================
--- sheepdog.orig/sheep/ops.c   2012-07-18 12:24:32.820168331 +0200
+++ sheepdog/sheep/ops.c        2012-07-19 18:21:41.960014604 +0200
@@ -246,9 +246,9 @@ static int cluster_make_fs(const struct
        set_cluster_copies(sys->nr_copies);
        set_cluster_flags(sys->flags);
        if (have_enough_zones())
-               sys_stat_set(SD_STATUS_OK);
+               sys->status = SD_STATUS_OK;
        else
-               sys_stat_set(SD_STATUS_HALT);
+               sys->status = SD_STATUS_HALT;
 
        return SD_RES_SUCCESS;
 }
@@ -256,8 +256,7 @@ static int cluster_make_fs(const struct
 static int cluster_shutdown(const struct sd_req *req, struct sd_rsp *rsp,
                            void *data)
 {
-       sys_stat_set(SD_STATUS_SHUTDOWN);
-
+       sys->status = SD_STATUS_SHUTDOWN;
        return SD_RES_SUCCESS;
 }
 
@@ -337,7 +336,7 @@ static int local_stat_cluster(struct req
        struct sd_rsp *rsp = &req->rp;
        struct epoch_log *log;
        int i, max_logs;
-       uint32_t sys_stat = sys_stat_get(), epoch;
+       uint32_t epoch;
 
        max_logs = rsp->data_length / sizeof(*log);
        epoch = get_latest_epoch();
@@ -363,7 +362,7 @@ static int local_stat_cluster(struct req
                epoch--;
        }
 
-       switch (sys_stat) {
+       switch (sys->status) {
        case SD_STATUS_OK:
                return SD_RES_SUCCESS;
        case SD_STATUS_WAIT_FOR_FORMAT:
@@ -415,7 +414,7 @@ static int cluster_manual_recover(const
         * 2) some nodes are physically down (same epoch condition).
         * In both case, the nodes(s) stat is WAIT_FOR_JOIN.
         */
-       if (!sys_stat_wait_join())
+       if (sys->status != SD_STATUS_WAIT_FOR_JOIN)
                return SD_RES_MANUAL_RECOVER;
 
        ret = get_cluster_copies(&c);
@@ -443,9 +442,9 @@ static int cluster_manual_recover(const
        }
 
        if (have_enough_zones())
-               sys_stat_set(SD_STATUS_OK);
+               sys->status = SD_STATUS_OK;
        else
-               sys_stat_set(SD_STATUS_HALT);
+               sys->status = SD_STATUS_HALT;
 
        vnode_info = get_vnode_info();
        start_recovery(vnode_info, old_vnode_info);
Index: sheepdog/sheep/sdnet.c
===================================================================
--- sheepdog.orig/sheep/sdnet.c 2012-07-16 11:32:44.100174613 +0200
+++ sheepdog/sheep/sdnet.c      2012-07-19 18:16:45.643343407 +0200
@@ -779,7 +779,7 @@ static void listen_handler(int listen_fd
        int fd, ret;
        struct client_info *ci;
 
-       if (sys_stat_shutdown()) {
+       if (sys->status == SD_STATUS_SHUTDOWN) {
                dprintf("unregistering connection %d\n", listen_fd);
                unregister_event(listen_fd);
                return;
Index: sheepdog/sheep/sheep.c
===================================================================
--- sheepdog.orig/sheep/sheep.c 2012-07-18 11:52:40.576805788 +0200
+++ sheepdog/sheep/sheep.c      2012-07-19 18:17:28.206677394 +0200
@@ -315,7 +315,8 @@ int main(int argc, char **argv)
 
        vprintf(SDOG_NOTICE, "sheepdog daemon (version %s) started\n", 
PACKAGE_VERSION);
 
-       while (!sys_stat_shutdown() || sys->nr_outstanding_reqs != 0)
+       while (sys->status != SD_STATUS_SHUTDOWN ||
+              sys->nr_outstanding_reqs != 0)
                event_loop(-1);
 
        vprintf(SDOG_INFO, "shutdown\n");
Index: sheepdog/sheep/sheep_priv.h
===================================================================
--- sheepdog.orig/sheep/sheep_priv.h    2012-07-19 18:14:10.000000000 +0200
+++ sheepdog/sheep/sheep_priv.h 2012-07-19 18:22:45.253348903 +0200
@@ -316,58 +316,6 @@ static inline int vnode_is_local(struct
        return is_myself(v->nid.addr, v->nid.port);
 }
 
-/* Cluster status/flag helper */
-
-static inline int sys_flag_nohalt(void)
-{
-       return sys->flags & SD_FLAG_NOHALT;
-}
-
-static inline int sys_stat_ok(void)
-{
-       return sys->status & SD_STATUS_OK;
-}
-
-static inline int sys_stat_wait_format(void)
-{
-       return sys->status & SD_STATUS_WAIT_FOR_FORMAT;
-}
-
-static inline int sys_stat_wait_join(void)
-{
-       return sys->status & SD_STATUS_WAIT_FOR_JOIN;
-}
-
-static inline int sys_stat_shutdown(void)
-{
-       return sys->status & SD_STATUS_SHUTDOWN;
-}
-
-static inline int sys_stat_halt(void)
-{
-       return sys->status & SD_STATUS_HALT;
-}
-
-static inline void sys_stat_set(uint32_t s)
-{
-       sys->status = s;
-}
-
-static inline uint32_t sys_stat_get(void)
-{
-       return sys->status;
-}
-
-static inline int sys_can_recover(void)
-{
-       return sys_stat_ok() || sys_stat_halt();
-}
-
-static inline int sys_can_halt(void)
-{
-       return sys_stat_ok() && !sys_flag_nohalt();
-}
-
 /* gateway operations */
 int gateway_read_obj(struct request *req);
 int gateway_write_obj(struct request *req);
-- 
sheepdog mailing list
[email protected]
http://lists.wpkg.org/mailman/listinfo/sheepdog

Reply via email to