RDS/IB: Add caching of frags and incs
authorChris Mason <chris.mason@oracle.com>
Thu, 27 May 2010 05:05:37 +0000 (22:05 -0700)
committerAndy Grover <andy.grover@oracle.com>
Thu, 9 Sep 2010 01:15:23 +0000 (18:15 -0700)
commit33244125871734ebc0d8d147680a0d7e99385e0b
treec4dad958a4de167f5b954e91bc90d69000cd89c1
parentfc24f78085e8771670af42f2b8929b16a0c98a22
RDS/IB: Add caching of frags and incs

This patch is based heavily on an initial patch by Chris Mason.
Instead of freeing slab memory and pages, it keeps them, and
funnels them back to be reused.

The lock minimization strategy uses xchg and cmpxchg atomic ops
for manipulation of pointers to list heads. We anchor the lists with a
pointer to a list_head struct instead of a static list_head struct.
We just have to carefully use the existing primitives with
the difference between a pointer and a static head struct.

For example, 'list_empty()' means that our anchor pointer points to a list with
a single item instead of meaning that our static head element doesn't point to
any list items.

Original patch by Chris, with significant mods and fixes by Andy and Zach.

Signed-off-by: Chris Mason <chris.mason@oracle.com>
Signed-off-by: Andy Grover <andy.grover@oracle.com>
Signed-off-by: Zach Brown <zach.brown@oracle.com>
net/rds/ib.h
net/rds/ib_cm.c
net/rds/ib_recv.c