* pick namelen/name pairs out of received buffer
                         */
 
-                       b = ls->ls_recover_buf + sizeof(struct dlm_rcom);
+                       b = ls->ls_recover_buf->rc_buf;
 
                        for (;;) {
                                memcpy(&namelen, b, sizeof(uint16_t));
 
        struct rw_semaphore     ls_recv_active; /* block dlm_recv */
        struct list_head        ls_requestqueue;/* queue remote requests */
        struct mutex            ls_requestqueue_mutex;
-       char                    *ls_recover_buf;
+       struct dlm_rcom         *ls_recover_buf;
        int                     ls_recover_nodeid; /* for debugging */
        uint64_t                ls_rcom_seq;
        spinlock_t              ls_rcom_spin;
 
        ls->ls_recover_nodeid = nodeid;
 
        if (nodeid == dlm_our_nodeid()) {
-               rc = (struct dlm_rcom *) ls->ls_recover_buf;
+               rc = ls->ls_recover_buf;
                rc->rc_result = dlm_recover_status(ls);
                goto out;
        }
        if (error)
                goto out;
 
-       rc = (struct dlm_rcom *) ls->ls_recover_buf;
+       rc = ls->ls_recover_buf;
 
        if (rc->rc_result == -ESRCH) {
                /* we pretend the remote lockspace exists with 0 status */
 {
        struct dlm_rcom *rc;
        struct dlm_mhandle *mh;
-       int error = 0, len = sizeof(struct dlm_rcom);
+       int error = 0;
+       int max_size = dlm_config.ci_buffer_size - sizeof(struct dlm_rcom);
 
        ls->ls_recover_nodeid = nodeid;
 
        if (nodeid == dlm_our_nodeid()) {
                dlm_copy_master_names(ls, last_name, last_len,
-                                     ls->ls_recover_buf + len,
-                                     dlm_config.ci_buffer_size - len, nodeid);
+                                     ls->ls_recover_buf->rc_buf,
+                                     max_size, nodeid);
                goto out;
        }
 
 
 
 static int wait_status_all(struct dlm_ls *ls, uint32_t wait_status)
 {
-       struct dlm_rcom *rc = (struct dlm_rcom *) ls->ls_recover_buf;
+       struct dlm_rcom *rc = ls->ls_recover_buf;
        struct dlm_member *memb;
        int error = 0, delay;
 
 
 static int wait_status_low(struct dlm_ls *ls, uint32_t wait_status)
 {
-       struct dlm_rcom *rc = (struct dlm_rcom *) ls->ls_recover_buf;
+       struct dlm_rcom *rc = ls->ls_recover_buf;
        int error = 0, delay = 0, nodeid = ls->ls_low_nodeid;
 
        for (;;) {