The accord, local and zookeeper drivers all need an upper bound of the message size the sheepdog might send for their communication queues. Centralize the definition into a single place, and make sure we never send larger messages from the core sheepdog code. Signed-off-by: Christoph Hellwig <hch at lst.de> --- sheep/cluster.h | 3 +++ sheep/cluster/accord.c | 4 +--- sheep/cluster/local.c | 3 +-- sheep/cluster/zookeeper.c | 3 +-- sheep/group.c | 2 ++ 5 files changed, 8 insertions(+), 7 deletions(-) Index: sheepdog/sheep/cluster.h =================================================================== --- sheepdog.orig/sheep/cluster.h 2012-05-20 16:18:51.094558848 +0200 +++ sheepdog/sheep/cluster.h 2012-05-20 19:37:26.656020841 +0200 @@ -22,6 +22,9 @@ #include "sheep.h" #include "logger.h" +/* maximum payload size sent in ->notify and ->unblock */ +#define SD_MAX_EVENT_BUF_SIZE (64 * 1024) + enum cluster_join_result { CJ_RES_SUCCESS, /* Success */ CJ_RES_FAIL, /* Fail to join. The joining node has an invalidepoch. */ Index: sheepdog/sheep/cluster/accord.c =================================================================== --- sheepdog.orig/sheep/cluster/accord.c 2012-05-20 16:18:51.094558848 +0200 +++ sheepdog/sheep/cluster/accord.c 2012-05-20 19:36:44.304019756 +0200 @@ -23,8 +23,6 @@ #include "event.h" #include "work.h" -#define MAX_EVENT_BUF_SIZE (64 * 1024) - #define BASE_FILE "/sheepdog" #define LOCK_FILE BASE_FILE "/lock" #define QUEUE_FILE BASE_FILE "/queue" @@ -40,7 +38,7 @@ struct acrd_event { struct sd_node sender; size_t buf_len; - uint8_t buf[MAX_EVENT_BUF_SIZE]; + uint8_t buf[SD_MAX_EVENT_BUF_SIZE]; size_t nr_nodes; /* the number of sheep */ struct sd_node nodes[SD_MAX_NODES]; Index: sheepdog/sheep/cluster/local.c =================================================================== --- sheepdog.orig/sheep/cluster/local.c 2012-05-20 19:35:32.388017915 +0200 +++ sheepdog/sheep/cluster/local.c 2012-05-20 19:37:33.636021021 +0200 @@ -25,7 +25,6 @@ #include "work.h" #define MAX_EVENTS 500 -#define MAX_EVENT_BUF_SIZE (64 * 1024) const char *shmfile = "/tmp/sheepdog_shm"; static int shmfd; @@ -46,7 +45,7 @@ struct local_event { struct sd_node sender; size_t buf_len; - uint8_t buf[MAX_EVENT_BUF_SIZE]; + uint8_t buf[SD_MAX_EVENT_BUF_SIZE]; size_t nr_nodes; /* the number of sheep processes */ struct sd_node nodes[SD_MAX_NODES]; Index: sheepdog/sheep/cluster/zookeeper.c =================================================================== --- sheepdog.orig/sheep/cluster/zookeeper.c 2012-05-20 16:18:51.094558848 +0200 +++ sheepdog/sheep/cluster/zookeeper.c 2012-05-20 19:38:10.472021965 +0200 @@ -23,7 +23,6 @@ #include "event.h" #include "work.h" -#define MAX_EVENT_BUF_SIZE (64 * 1024) #define SESSION_TIMEOUT 30000 /* millisecond */ #define MEMBER_CREATE_TIMEOUT SESSION_TIMEOUT #define MEMBER_CREATE_INTERVAL 10 /* millisecond */ @@ -82,7 +81,7 @@ struct zk_event { int callbacked; /* set non-zero after sd_block_handler() was called */ size_t buf_len; - uint8_t buf[MAX_EVENT_BUF_SIZE]; + uint8_t buf[SD_MAX_EVENT_BUF_SIZE]; }; static int zk_notify_blocked; Index: sheepdog/sheep/group.c =================================================================== --- sheepdog.orig/sheep/group.c 2012-05-20 16:18:51.098558849 +0200 +++ sheepdog/sheep/group.c 2012-05-20 19:38:56.260023135 +0200 @@ -247,6 +247,8 @@ static struct vdi_op_message *prepare_cl else size = sizeof(*msg); + assert(size <= SD_MAX_EVENT_BUF_SIZE); + msg = zalloc(size); if (!msg) { eprintf("failed to allocate memory\n"); |