staging: ramster: ramster-specific changes to zcache/tmem
authorDan Magenheimer <dan.magenheimer@oracle.com>
Mon, 30 Jan 2012 22:39:19 +0000 (14:39 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 9 Feb 2012 01:04:07 +0000 (17:04 -0800)
commit0fb3860a8212bfce09e4c53ab342b84adb934159
tree94bcc5fd3827a6b950bea1066dede7c37812b26b
parentb083e8619c84503e80e681504cabfb647e715edc
staging: ramster: ramster-specific changes to zcache/tmem

In tmem.[ch], new "repatriate" (provoke async get) and "localify" (handle
incoming data resulting from an async get) routines combine with a handful
of changes to existing pamops interfaces allow the generic tmem code
to support asynchronous operations.  Also, a new tmem_xhandle struct
groups together key information that must be passed to remote tmem stores.

Zcache-main.c is augmented with a large amount of ramster-specific code
to handle remote operations and "foreign" pages on both ends of the
"remotify" protocol.  New "foreign" pools are auto-created on demand.
A "selfshrinker" thread periodically repatriates remote persistent pages
when local memory conditions allow.  For certain operations, a queue is
necessary to guarantee strict ordering as out-of-order puts/flushes can
cause strange race conditions.  Pampd pointers now either point to local
memory OR describe a remote page; to allow the same 64-bits to describe
either, the LSB is used to differentiate.  Some acrobatics must be performed
to ensure local memory is available to handle a remote persistent get,
or deal with the data directly anyway if the malloc failed.  Lots
of ramster-specific statistics are available via sysfs.

Note: Some debug ifdefs left in for now.
Signed-off-by: Dan Magenheimer <dan.magenheimer@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/ramster/Kconfig
drivers/staging/ramster/Makefile
drivers/staging/ramster/tmem.c
drivers/staging/ramster/tmem.h
drivers/staging/ramster/zcache-main.c