[rds-devel] [PATCH] In rds_barrier, RDMA_DONE should be cleared

Olaf Kirch olaf.kirch at oracle.com
Mon Jan 7 00:45:51 PST 2008


On Saturday 05 January 2008 03:30, Richard Frank wrote:
> Also, we were setting the RDMA_DONE flag when we needed to clear it - 
> this was causing excessive CPU utilization in rds-stress.

Like this?

Olaf
-- 
Olaf Kirch  |  --- o --- Nous sommes du soleil we love when we play
okir at lst.de |    / | \   sol.dhoop.naytheet.ah kin.ir.samse.qurax
---------------------
From: Olaf Kirch <olaf.kirch at oracle.com>
Subject: [RDS] In rds_barrier, RDMA_DONE should be cleared

When we prime the RDS socket's RDMA ID for which we want
to wait, we must clear the RDMA_DONE poll flag, rather than
set it. Bug found by Rick.

Signed-off-by: Olaf Kirch <olaf.kirch at oracle.com>
---
 net/rds/rdma.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Index: ofa-kernel-1.3/net/rds/rdma.c
===================================================================
--- ofa-kernel-1.3.orig/net/rds/rdma.c
+++ ofa-kernel-1.3/net/rds/rdma.c
@@ -695,7 +695,7 @@ int rds_barrier(struct rds_sock *rs, cha
 	rdma_id = atomic_read(&conn->c_barrier_hwm);
 	if (args.wait_rdma_id && args.wait_rdma_id > rdma_id) {
 		if (nonblock) {
-			set_bit(RDS_RDMA_DONE, &rs->rs_poll_flag);
+			clear_bit(RDS_RDMA_DONE, &rs->rs_poll_flag);
 			smp_mb__after_clear_bit();
 			rds_set_barrier(rs, args.wait_rdma_id);
 			ret = -EAGAIN;



More information about the rds-devel mailing list