When we send a vdi operaton to the collie, the following procedures are executed:
(1) the operation message 'A' is sent to the corosync (2) __sd_deliver is called with w->msg == 'A' (3) the completion message 'B' is sent to the corosync (4) __sd_deliver_done is called with w->msg == 'A' (5) __sd_deliver is called with w->msg == 'B' (6) __sd_deliver_done is called with w->msg == 'B' These must be called in this order. This patch ensures that (4) is called before (5). Signed-off-by: MORITA Kazutaka <[email protected]> --- collie/group.c | 8 +++++++- 1 files changed, 7 insertions(+), 1 deletions(-) diff --git a/collie/group.c b/collie/group.c index 5dfd49e..2983f95 100644 --- a/collie/group.c +++ b/collie/group.c @@ -848,7 +848,13 @@ static void sd_deliver(cpg_handle_t handle, const struct cpg_name *group_name, vprintf(SDOG_DEBUG "%u\n", pid); return; - } + } else + /* + * must be blocked until the message with + * m->done == 0 is completely finished + * (__sd_deliver_done is called) + */ + w->work.attr = WORK_ORDERED; } else if (m->op == SD_MSG_JOIN) w->work.attr = WORK_ORDERED; -- 1.5.6.5 -- sheepdog mailing list [email protected] http://lists.wpkg.org/mailman/listinfo/sheepdog
