Files
ubports_kernel_google_msm/include/linux
Nick Piggin fa0d7e3de6 fs: icache RCU free inodes
RCU free the struct inode. This will allow:

- Subsequent store-free path walking patch. The inode must be consulted for
  permissions when walking, so an RCU inode reference is a must.
- sb_inode_list_lock to be moved inside i_lock because sb list walkers who want
  to take i_lock no longer need to take sb_inode_list_lock to walk the list in
  the first place. This will simplify and optimize locking.
- Could remove some nested trylock loops in dcache code
- Could potentially simplify things a bit in VM land. Do not need to take the
  page lock to follow page->mapping.

The downsides of this is the performance cost of using RCU. In a simple
creat/unlink microbenchmark, performance drops by about 10% due to inability to
reuse cache-hot slab objects. As iterations increase and RCU freeing starts
kicking over, this increases to about 20%.

In cases where inode lifetimes are longer (ie. many inodes may be allocated
during the average life span of a single inode), a lot of this cache reuse is
not applicable, so the regression caused by this patch is smaller.

The cache-hot regression could largely be avoided by using SLAB_DESTROY_BY_RCU,
however this adds some complexity to list walking and store-free path walking,
so I prefer to implement this at a later date, if it is shown to be a win in
real situations. I haven't found a regression in any non-micro benchmark so I
doubt it will be a problem.

Signed-off-by: Nick Piggin <npiggin@kernel.dk>
2011-01-07 17:50:26 +11:00
..
2010-11-15 20:44:26 -05:00
2010-10-30 08:31:35 -07:00
2010-10-15 21:18:59 +02:00
2010-12-11 01:28:58 -05:00
2010-10-30 08:45:43 -04:00
2010-11-10 14:54:09 +01:00
2010-11-10 14:54:09 +01:00
2010-12-13 16:11:13 -08:00
2010-10-25 21:18:20 -04:00
2010-10-25 08:02:40 -07:00
2010-08-19 17:18:00 -07:00
2011-01-07 17:50:24 +11:00
2010-10-22 15:55:22 +02:00
2010-10-21 14:47:59 +02:00
2010-09-23 14:33:39 -07:00
2010-11-17 14:55:45 +09:00
2010-08-19 17:18:03 -07:00
2010-08-18 08:35:46 -04:00
2011-01-07 17:50:26 +11:00
2011-01-07 17:50:23 +11:00
2010-09-09 20:46:30 +02:00
2010-10-25 14:11:37 -07:00
2010-10-23 22:49:32 +02:00
2010-10-12 16:53:37 +02:00
2010-11-15 22:40:38 +01:00
2010-11-15 22:40:38 +01:00
2010-09-21 18:04:47 -07:00
2010-08-29 21:57:55 -07:00
2010-08-19 17:16:23 -07:00
2010-09-30 21:16:05 -07:00
2010-10-26 16:52:08 -07:00
2010-10-07 14:08:55 +01:00
2010-08-18 10:19:52 +02:00
2010-10-28 17:22:13 -04:00
2010-10-22 15:34:12 -05:00
2010-08-19 17:18:00 -07:00
2010-09-09 18:57:24 -07:00
2010-12-22 10:27:53 +01:00
2010-11-12 07:55:32 -08:00
2010-11-16 13:33:23 -08:00
2010-10-25 21:24:15 -04:00
2010-10-28 09:08:47 -05:00
2010-10-26 16:52:05 -07:00
2010-10-12 16:53:34 +02:00
2011-01-07 17:50:23 +11:00
2010-10-04 21:10:52 +02:00
2011-01-07 17:50:19 +11:00
2011-01-07 17:50:26 +11:00
2010-12-02 09:58:00 -05:00
2010-10-07 18:48:49 -04:00
2010-08-19 17:18:02 -07:00
2010-10-15 12:45:44 +02:00
2010-10-17 20:03:03 -07:00
2010-10-17 20:03:06 -07:00
2010-10-24 15:07:11 -07:00
2010-08-21 23:40:14 -07:00
2010-11-12 07:55:32 -08:00
2010-10-29 04:16:31 -04:00
2010-09-08 18:16:55 -07:00
2010-10-27 18:03:16 -07:00
2010-10-30 12:12:50 +02:00
2010-10-20 03:02:23 -07:00
2010-10-27 17:28:36 +01:00
2010-10-07 14:08:55 +01:00
2010-09-24 21:27:41 -07:00
2010-08-30 13:23:33 -07:00
2010-10-21 04:11:07 -07:00
2010-09-09 20:41:20 +02:00
2010-10-22 10:20:04 -07:00
2010-10-26 16:52:03 -07:00
2010-10-26 16:52:14 -07:00