summaryrefslogtreecommitdiffstats
path: root/net/rds/message.c
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2010-05-12 00:11:11 +0200
committerAndy Grover <andy.grover@oracle.com>2010-09-09 03:15:09 +0200
commit7e3f2952eeb1a0fe2aa9882fd1705a88f9d89b35 (patch)
tree903d89d0d1184bd1f33df2b5036615d1c40cfb06 /net/rds/message.c
parentrds: Use RCU for the bind lookup searches (diff)
downloadlinux-7e3f2952eeb1a0fe2aa9882fd1705a88f9d89b35.tar.xz
linux-7e3f2952eeb1a0fe2aa9882fd1705a88f9d89b35.zip
rds: don't let RDS shutdown a connection while senders are present
This is the first in a long line of patches that tries to fix races between RDS connection shutdown and RDS traffic. Here we are maintaining a count of active senders to make sure the connection doesn't go away while they are using it. Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'net/rds/message.c')
-rw-r--r--net/rds/message.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/net/rds/message.c b/net/rds/message.c
index 96e2bf7dc77e..84f937f11d47 100644
--- a/net/rds/message.c
+++ b/net/rds/message.c
@@ -81,7 +81,10 @@ static void rds_message_purge(struct rds_message *rm)
void rds_message_put(struct rds_message *rm)
{
rdsdebug("put rm %p ref %d\n", rm, atomic_read(&rm->m_refcount));
-
+ if (atomic_read(&rm->m_refcount) == 0) {
+printk(KERN_CRIT "danger refcount zero on %p\n", rm);
+WARN_ON(1);
+ }
if (atomic_dec_and_test(&rm->m_refcount)) {
BUG_ON(!list_empty(&rm->m_sock_item));
BUG_ON(!list_empty(&rm->m_conn_item));