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
