uint64_t size;
 };
 
+/* The possible results of a message handling function */
+enum vh_result {
+       /* Message handling failed */
+       VH_RESULT_ERR   = -1,
+       /* Message handling successful */
+       VH_RESULT_OK    =  0,
+       /* Message handling successful and reply prepared */
+       VH_RESULT_REPLY =  1,
+};
+
 /**
  * function prototype for the vhost backend to handler specific vhost user
  * messages prior to the master message handling
  *  vhost device id
  * @param msg
  *  Message pointer.
- * @param require_reply
- *  If the handler requires sending a reply, this varaible shall be written 1,
- *  otherwise 0.
  * @param skip_master
  *  If the handler requires skipping the master message handling, this variable
  *  shall be written 1, otherwise 0.
  * @return
- *  0 on success, -1 on failure
+ *  VH_RESULT_OK on success, VH_RESULT_REPLY on success with reply,
+ *  VH_RESULT_ERR on failure
  */
-typedef int (*vhost_msg_pre_handle)(int vid, void *msg,
-               uint32_t *require_reply, uint32_t *skip_master);
+typedef enum vh_result (*vhost_msg_pre_handle)(int vid, void *msg,
+               uint32_t *skip_master);
 
 /**
  * function prototype for the vhost backend to handler specific vhost user
  *  vhost device id
  * @param msg
  *  Message pointer.
- * @param require_reply
- *  If the handler requires sending a reply, this varaible shall be written 1,
- *  otherwise 0.
  * @return
- *  0 on success, -1 on failure
+ *  VH_RESULT_OK on success, VH_RESULT_REPLY on success with reply,
+ *  VH_RESULT_ERR on failure
  */
-typedef int (*vhost_msg_post_handle)(int vid, void *msg,
-               uint32_t *require_reply);
+typedef enum vh_result (*vhost_msg_post_handle)(int vid, void *msg);
 
 /**
  * pre and post vhost user message handlers
 
        return 0;
 }
 
-static int
-vhost_crypto_msg_post_handler(int vid, void *msg, uint32_t *require_reply)
+static enum vh_result
+vhost_crypto_msg_post_handler(int vid, void *msg)
 {
        struct virtio_net *dev = get_device(vid);
        struct vhost_crypto *vcrypto;
        VhostUserMsg *vmsg = msg;
-       int ret = 0;
+       enum vh_result ret = VH_RESULT_OK;
 
-       if (dev == NULL || require_reply == NULL) {
+       if (dev == NULL) {
                VC_LOG_ERR("Invalid vid %i", vid);
-               return -EINVAL;
+               return VH_RESULT_ERR;
        }
 
        vcrypto = dev->extern_data;
        if (vcrypto == NULL) {
                VC_LOG_ERR("Cannot find required data, is it initialized?");
-               return -ENOENT;
+               return VH_RESULT_ERR;
        }
 
-       *require_reply = 0;
-
        if (vmsg->request.master == VHOST_USER_CRYPTO_CREATE_SESS) {
                vhost_crypto_create_sess(vcrypto,
                                &vmsg->payload.crypto_session);
-               *require_reply = 1;
-       } else if (vmsg->request.master == VHOST_USER_CRYPTO_CLOSE_SESS)
-               ret = vhost_crypto_close_sess(vcrypto, vmsg->payload.u64);
-       else
-               ret = -EINVAL;
+               ret = VH_RESULT_REPLY;
+       } else if (vmsg->request.master == VHOST_USER_CRYPTO_CLOSE_SESS) {
+               if (vhost_crypto_close_sess(vcrypto, vmsg->payload.u64))
+                       ret = VH_RESULT_ERR;
+       }
 
        return ret;
 }
 
        [VHOST_USER_CRYPTO_CLOSE_SESS] = "VHOST_USER_CRYPTO_CLOSE_SESS",
 };
 
-/* The possible results of a message handling function */
-enum vh_result {
-       /* Message handling failed */
-       VH_RESULT_ERR   = -1,
-       /* Message handling successful */
-       VH_RESULT_OK    =  0,
-       /* Message handling successful and reply prepared */
-       VH_RESULT_REPLY =  1,
-};
-
 static uint64_t
 get_blk_size(int fd)
 {
        }
 
        if (dev->extern_ops.pre_msg_handle) {
-               uint32_t need_reply;
-
                ret = (*dev->extern_ops.pre_msg_handle)(dev->vid,
-                               (void *)&msg, &need_reply, &skip_master);
-               if (ret < 0)
+                               (void *)&msg, &skip_master);
+               if (ret == VH_RESULT_ERR)
                        goto skip_to_reply;
-
-               if (need_reply)
+               else if (ret == VH_RESULT_REPLY)
                        send_vhost_reply(fd, &msg);
 
                if (skip_master)
        }
 
 skip_to_post_handle:
-       if (!ret && dev->extern_ops.post_msg_handle) {
-               uint32_t need_reply;
-
+       if (ret != VH_RESULT_ERR && dev->extern_ops.post_msg_handle) {
                ret = (*dev->extern_ops.post_msg_handle)(
-                               dev->vid, (void *)&msg, &need_reply);
-               if (ret < 0)
+                               dev->vid, (void *)&msg);
+               if (ret == VH_RESULT_ERR)
                        goto skip_to_reply;
-
-               if (need_reply)
+               else if (ret == VH_RESULT_REPLY)
                        send_vhost_reply(fd, &msg);
        }
 
                vhost_user_unlock_all_queue_pairs(dev);
 
        if (msg.flags & VHOST_USER_NEED_REPLY) {
-               msg.payload.u64 = !!ret;
+               msg.payload.u64 = ret == VH_RESULT_ERR;
                msg.size = sizeof(msg.payload.u64);
                send_vhost_reply(fd, &msg);
-       } else if (ret) {
+       } else if (ret == VH_RESULT_ERR) {
                RTE_LOG(ERR, VHOST_CONFIG,
                        "vhost message handling failed.\n");
                return -1;