diff --git a/net/rds/rdma.c b/net/rds/rdma.c
index 8d22999b04715455619b770983c2c40e75578725..5ba5146844314ec4fdd4f5f8fb2c17c57929399d 100644
--- a/net/rds/rdma.c
+++ b/net/rds/rdma.c
@@ -747,6 +747,7 @@ int rds_cmsg_atomic(struct rds_sock *rs, struct rds_message *rm,
 	}
 
 	rm->atomic.op_notify = !!(args->flags & RDS_RDMA_NOTIFY_ME);
+	rm->atomic.op_active = 1;
 	rm->atomic.op_recverr = rs->rs_recverr;
 	rm->atomic.op_sg = rds_message_alloc_sgs(rm, 1);
 
@@ -782,8 +783,6 @@ int rds_cmsg_atomic(struct rds_sock *rs, struct rds_message *rm,
 	rm->atomic.op_rkey = rds_rdma_cookie_key(args->cookie);
 	rm->atomic.op_remote_addr = args->remote_addr + rds_rdma_cookie_offset(args->cookie);
 
-	rm->atomic.op_active = 1;
-
 	return ret;
 err:
 	if (page)
diff --git a/net/rds/rds.h b/net/rds/rds.h
index 13ed30ac424d1dfa02f56dde60a2c560c47e8c99..46d190d0854958ac86122f668214fc1844012ab9 100644
--- a/net/rds/rds.h
+++ b/net/rds/rds.h
@@ -301,7 +301,13 @@ struct rds_message {
 	 */
 	spinlock_t		m_rs_lock;
 	struct rds_sock		*m_rs;
+
+	/* cookie to send to remote, in rds header */
 	rds_rdma_cookie_t	m_rdma_cookie;
+
+	unsigned int		m_used_sgs;
+	unsigned int		m_total_sgs;
+
 	struct {
 		struct rm_atomic_op {
 			int			op_type;
@@ -343,8 +349,6 @@ struct rds_message {
 			struct scatterlist	*op_sg;
 		} data;
 	};
-	unsigned int		m_used_sgs;
-	unsigned int		m_total_sgs;
 };
 
 /*