X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;f=net%2Frds%2Fib_cm.c;h=29144a60019fd32527a021fb1f70d91831d9a2c7;hb=c0adf54a10903b59037a4c5fcb933dfeeb7b2624;hp=31b74f5e61adbd37535b636b1499c384bdd992f5;hpb=edac450d5b5d47aa11e614f19c8f9b17f362e608;p=cascardo%2Flinux.git diff --git a/net/rds/ib_cm.c b/net/rds/ib_cm.c index 31b74f5e61ad..29144a60019f 100644 --- a/net/rds/ib_cm.c +++ b/net/rds/ib_cm.c @@ -183,8 +183,17 @@ void rds_ib_cm_connect_complete(struct rds_connection *conn, struct rdma_cm_even /* If the peer gave us the last packet it saw, process this as if * we had received a regular ACK. */ - if (dp && dp->dp_ack_seq) - rds_send_drop_acked(conn, be64_to_cpu(dp->dp_ack_seq), NULL); + if (dp) { + /* dp structure start is not guaranteed to be 8 bytes aligned. + * Since dp_ack_seq is 64-bit extended load operations can be + * used so go through get_unaligned to avoid unaligned errors. + */ + u64 dp_ack_seq = get_unaligned(&dp->dp_ack_seq); + + if (dp_ack_seq) + rds_send_drop_acked(conn, be64_to_cpu(dp_ack_seq), + NULL); + } rds_connect_complete(conn); }