]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - net/rds/send.c
rds: Make sure updates to cp_send_gen can be observed
[karo-tx-linux.git] / net / rds / send.c
index e81aa176f4e2c3f42a6ba75769b5d42142c7e3c4..41b9f0f5bb9c7fac6f23efb8fe535dfa8b2f4530 100644 (file)
@@ -170,8 +170,8 @@ restart:
         * The acquire_in_xmit() check above ensures that only one
         * caller can increment c_send_gen at any time.
         */
-       cp->cp_send_gen++;
-       send_gen = cp->cp_send_gen;
+       send_gen = READ_ONCE(cp->cp_send_gen) + 1;
+       WRITE_ONCE(cp->cp_send_gen, send_gen);
 
        /*
         * rds_conn_shutdown() sets the conn state and then tests RDS_IN_XMIT,
@@ -431,7 +431,7 @@ over_batch:
                smp_mb();
                if ((test_bit(0, &conn->c_map_queued) ||
                     !list_empty(&cp->cp_send_queue)) &&
-                   send_gen == cp->cp_send_gen) {
+                       send_gen == READ_ONCE(cp->cp_send_gen)) {
                        rds_stats_inc(s_send_lock_queue_raced);
                        if (batch_count < send_batch_count)
                                goto restart;