> + halign = ALIGN(wr->wr.ud.hlen, 16); This doesn't seem connected to the problem I see, but is this correct? Suppose hlen is 48... then halign will be 48 but it really should be 64 I think. Do we really want halign = ALIGN(wr->wr.ud.hlen + sizeof *wqe, 16); instead? - R.