int first_contact)
 {
        struct smc_connection *conn = &smc->conn;
+       struct smc_clc_msg_trail trl;
+       struct kvec vec[2];
        struct msghdr msg;
-       struct kvec vec;
+       int i;
 
        /* send SMC Confirm CLC msg */
        clc->hdr.version = SMC_V1;              /* SMC version */
                clc->d0.dmbe_size = conn->rmbe_size_short;
                clc->d0.dmbe_idx = 0;
                memcpy(&clc->d0.linkid, conn->lgr->id, SMC_LGR_ID_SIZE);
-               memcpy(clc->d0.smcd_trl.eyecatcher, SMCD_EYECATCHER,
+               memcpy(trl.eyecatcher, SMCD_EYECATCHER,
                       sizeof(SMCD_EYECATCHER));
        } else {
                struct smc_link *link = conn->lnk;
                clc->r0.rmb_dma_addr = cpu_to_be64((u64)sg_dma_address
                                (conn->rmb_desc->sgt[link->link_idx].sgl));
                hton24(clc->r0.psn, link->psn_initial);
-               memcpy(clc->r0.smcr_trl.eyecatcher, SMC_EYECATCHER,
-                      sizeof(SMC_EYECATCHER));
+               memcpy(trl.eyecatcher, SMC_EYECATCHER, sizeof(SMC_EYECATCHER));
        }
 
        memset(&msg, 0, sizeof(msg));
-       vec.iov_base = clc;
-       vec.iov_len = ntohs(clc->hdr.length);
-       return kernel_sendmsg(smc->clcsock, &msg, &vec, 1,
+       i = 0;
+       vec[i].iov_base = clc;
+       vec[i++].iov_len = (clc->hdr.typev1 == SMC_TYPE_D ?
+                           SMCD_CLC_ACCEPT_CONFIRM_LEN :
+                           SMCR_CLC_ACCEPT_CONFIRM_LEN) -
+                          sizeof(trl);
+       vec[i].iov_base = &trl;
+       vec[i++].iov_len = sizeof(trl);
+       return kernel_sendmsg(smc->clcsock, &msg, vec, 1,
                              ntohs(clc->hdr.length));
 }
 
 
        __be64 rmb_dma_addr;    /* RMB virtual address */
        u8 reserved2;
        u8 psn[3];              /* packet sequence number */
-       struct smc_clc_msg_trail smcr_trl;
-                               /* eye catcher "SMCR" EBCDIC */
 } __packed;
 
 struct smcd_clc_msg_accept_confirm {   /* SMCD accept/confirm */
           dmbe_size : 4;
 #endif
        u16 reserved4;
-       u32 linkid;             /* Link identifier */
+       __be32 linkid;          /* Link identifier */
        u32 reserved5[3];
-       struct smc_clc_msg_trail smcd_trl;
-                               /* eye catcher "SMCD" EBCDIC */
 } __packed;
 
 struct smc_clc_msg_accept_confirm {    /* clc accept / confirm message */