<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel/git/stable/linux-stable.git/lib/radix-tree.c, branch linux-2.6.33.y</title>
<subtitle>Linux kernel stable tree</subtitle>
<id>https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux-stable.git/atom?h=linux-2.6.33.y</id>
<link rel='self' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux-stable.git/atom?h=linux-2.6.33.y'/>
<link rel='alternate' type='text/html' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux-stable.git/'/>
<updated>2009-11-19T18:11:29+00:00</updated>
<entry>
<title>FS-Cache: Don't delete pending pages from the page-store tracking tree</title>
<updated>2009-11-19T18:11:29+00:00</updated>
<author>
<name>David Howells</name>
<email>dhowells@redhat.com</email>
</author>
<published>2009-11-19T18:11:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux-stable.git/commit/?id=285e728b0ac55b53a673114096168d6f74930167'/>
<id>urn:sha1:285e728b0ac55b53a673114096168d6f74930167</id>
<content type='text'>
Don't delete pending pages from the page-store tracking tree, but rather send
them for another write as they've presumably been updated.

Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
</content>
</entry>
<entry>
<title>FS-Cache: Use radix tree preload correctly in tracking of pages to be stored</title>
<updated>2009-11-19T18:11:14+00:00</updated>
<author>
<name>David Howells</name>
<email>dhowells@redhat.com</email>
</author>
<published>2009-11-19T18:11:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux-stable.git/commit/?id=b34df792b4e9e311db47fad27949095d0629c197'/>
<id>urn:sha1:b34df792b4e9e311db47fad27949095d0629c197</id>
<content type='text'>
__fscache_write_page() attempts to load the radix tree preallocation pool for
the CPU it is on before calling radix_tree_insert(), as the insertion must be
done inside a pair of spinlocks.

Use of the preallocation pool, however, is contingent on the radix tree being
initialised without __GFP_WAIT specified.  __fscache_acquire_cookie() was
passing GFP_NOFS to INIT_RADIX_TREE() - but that includes __GFP_WAIT.

The solution is to AND out __GFP_WAIT.

Additionally, the banner comment to radix_tree_preload() is altered to make
note of this prerequisite.  Possibly there should be a WARN_ON() too.

Without this fix, I have seen the following recursive deadlock caused by
radix_tree_insert() attempting to allocate memory inside the spinlocked
region, which resulted in FS-Cache being called back into to release memory -
which required the spinlock already held.

=============================================
[ INFO: possible recursive locking detected ]
2.6.32-rc6-cachefs #24
---------------------------------------------
nfsiod/7916 is trying to acquire lock:
 (&amp;cookie-&gt;lock){+.+.-.}, at: [&lt;ffffffffa0076872&gt;] __fscache_uncache_page+0xdb/0x160 [fscache]

but task is already holding lock:
 (&amp;cookie-&gt;lock){+.+.-.}, at: [&lt;ffffffffa0076acc&gt;] __fscache_write_page+0x15c/0x3f3 [fscache]

other info that might help us debug this:
5 locks held by nfsiod/7916:
 #0:  (nfsiod){+.+.+.}, at: [&lt;ffffffff81048290&gt;] worker_thread+0x19a/0x2e2
 #1:  (&amp;task-&gt;u.tk_work#2){+.+.+.}, at: [&lt;ffffffff81048290&gt;] worker_thread+0x19a/0x2e2
 #2:  (&amp;cookie-&gt;lock){+.+.-.}, at: [&lt;ffffffffa0076acc&gt;] __fscache_write_page+0x15c/0x3f3 [fscache]
 #3:  (&amp;object-&gt;lock#2){+.+.-.}, at: [&lt;ffffffffa0076b07&gt;] __fscache_write_page+0x197/0x3f3 [fscache]
 #4:  (&amp;cookie-&gt;stores_lock){+.+...}, at: [&lt;ffffffffa0076b0f&gt;] __fscache_write_page+0x19f/0x3f3 [fscache]

stack backtrace:
Pid: 7916, comm: nfsiod Not tainted 2.6.32-rc6-cachefs #24
Call Trace:
 [&lt;ffffffff8105ac7f&gt;] __lock_acquire+0x1649/0x16e3
 [&lt;ffffffff81059ded&gt;] ? __lock_acquire+0x7b7/0x16e3
 [&lt;ffffffff8100e27d&gt;] ? dump_trace+0x248/0x257
 [&lt;ffffffff8105ad70&gt;] lock_acquire+0x57/0x6d
 [&lt;ffffffffa0076872&gt;] ? __fscache_uncache_page+0xdb/0x160 [fscache]
 [&lt;ffffffff8135467c&gt;] _spin_lock+0x2c/0x3b
 [&lt;ffffffffa0076872&gt;] ? __fscache_uncache_page+0xdb/0x160 [fscache]
 [&lt;ffffffffa0076872&gt;] __fscache_uncache_page+0xdb/0x160 [fscache]
 [&lt;ffffffffa0077eb7&gt;] ? __fscache_check_page_write+0x0/0x71 [fscache]
 [&lt;ffffffffa00b4755&gt;] nfs_fscache_release_page+0x86/0xc4 [nfs]
 [&lt;ffffffffa00907f0&gt;] nfs_release_page+0x3c/0x41 [nfs]
 [&lt;ffffffff81087ffb&gt;] try_to_release_page+0x32/0x3b
 [&lt;ffffffff81092c2b&gt;] shrink_page_list+0x316/0x4ac
 [&lt;ffffffff81058a9b&gt;] ? mark_held_locks+0x52/0x70
 [&lt;ffffffff8135451b&gt;] ? _spin_unlock_irq+0x2b/0x31
 [&lt;ffffffff81093153&gt;] shrink_inactive_list+0x392/0x67c
 [&lt;ffffffff81058a9b&gt;] ? mark_held_locks+0x52/0x70
 [&lt;ffffffff810934ca&gt;] shrink_list+0x8d/0x8f
 [&lt;ffffffff81093744&gt;] shrink_zone+0x278/0x33c
 [&lt;ffffffff81052c70&gt;] ? ktime_get_ts+0xad/0xba
 [&lt;ffffffff8109453b&gt;] try_to_free_pages+0x22e/0x392
 [&lt;ffffffff8109184c&gt;] ? isolate_pages_global+0x0/0x212
 [&lt;ffffffff8108e16b&gt;] __alloc_pages_nodemask+0x3dc/0x5cf
 [&lt;ffffffff810ae24a&gt;] cache_alloc_refill+0x34d/0x6c1
 [&lt;ffffffff811bcf74&gt;] ? radix_tree_node_alloc+0x52/0x5c
 [&lt;ffffffff810ae929&gt;] kmem_cache_alloc+0xb2/0x118
 [&lt;ffffffff811bcf74&gt;] radix_tree_node_alloc+0x52/0x5c
 [&lt;ffffffff811bcfd5&gt;] radix_tree_insert+0x57/0x19c
 [&lt;ffffffffa0076b53&gt;] __fscache_write_page+0x1e3/0x3f3 [fscache]
 [&lt;ffffffffa00b4248&gt;] __nfs_readpage_to_fscache+0x58/0x11e [nfs]
 [&lt;ffffffffa009bb77&gt;] nfs_readpage_release+0x34/0x9b [nfs]
 [&lt;ffffffffa009c0d9&gt;] nfs_readpage_release_full+0x32/0x4b [nfs]
 [&lt;ffffffffa0006cff&gt;] rpc_release_calldata+0x12/0x14 [sunrpc]
 [&lt;ffffffffa0006e2d&gt;] rpc_free_task+0x59/0x61 [sunrpc]
 [&lt;ffffffffa0006f03&gt;] rpc_async_release+0x10/0x12 [sunrpc]
 [&lt;ffffffff810482e5&gt;] worker_thread+0x1ef/0x2e2
 [&lt;ffffffff81048290&gt;] ? worker_thread+0x19a/0x2e2
 [&lt;ffffffff81352433&gt;] ? thread_return+0x3e/0x101
 [&lt;ffffffffa0006ef3&gt;] ? rpc_async_release+0x0/0x12 [sunrpc]
 [&lt;ffffffff8104bff5&gt;] ? autoremove_wake_function+0x0/0x34
 [&lt;ffffffff81058d25&gt;] ? trace_hardirqs_on+0xd/0xf
 [&lt;ffffffff810480f6&gt;] ? worker_thread+0x0/0x2e2
 [&lt;ffffffff8104bd21&gt;] kthread+0x7a/0x82
 [&lt;ffffffff8100beda&gt;] child_rip+0xa/0x20
 [&lt;ffffffff8100b87c&gt;] ? restore_args+0x0/0x30
 [&lt;ffffffff8104c2b9&gt;] ? add_wait_queue+0x15/0x44
 [&lt;ffffffff8104bca7&gt;] ? kthread+0x0/0x82
 [&lt;ffffffff8100bed0&gt;] ? child_rip+0x0/0x20

Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
</content>
</entry>
<entry>
<title>lib: do code optimization for radix_tree_lookup() and radix_tree_lookup_slot()</title>
<updated>2009-06-17T02:47:49+00:00</updated>
<author>
<name>Huang Shijie</name>
<email>shijie8@gmail.com</email>
</author>
<published>2009-06-16T22:33:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux-stable.git/commit/?id=b72b71c6cb6ecc564d4d5f9c512a7df269837846'/>
<id>urn:sha1:b72b71c6cb6ecc564d4d5f9c512a7df269837846</id>
<content type='text'>
radix_tree_lookup() and radix_tree_lookup_slot() have much the
same code except for the return value.

Introduce radix_tree_lookup_element() to do the real work.

/*
 * is_slot == 1 : search for the slot.
 * is_slot == 0 : search for the node.
 */
static void * radix_tree_lookup_element(struct radix_tree_root *root,
					unsigned long index, int is_slot);

Signed-off-by: Huang Shijie &lt;shijie8@gmail.com&gt;
Cc: Nick Piggin &lt;nickpiggin@yahoo.com.au&gt;
Cc: Christoph Lameter &lt;cl@linux-foundation.org&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
</entry>
<entry>
<title>radix-tree: add radix_tree_prev_hole()</title>
<updated>2009-06-17T02:47:30+00:00</updated>
<author>
<name>Wu Fengguang</name>
<email>fengguang.wu@intel.com</email>
</author>
<published>2009-06-16T22:31:32+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux-stable.git/commit/?id=dc566127dd161b6c997466a2349ac179527ea89b'/>
<id>urn:sha1:dc566127dd161b6c997466a2349ac179527ea89b</id>
<content type='text'>
The counterpart of radix_tree_next_hole(). To be used by context readahead.

Signed-off-by: Wu Fengguang &lt;fengguang.wu@intel.com&gt;
Cc: Vladislav Bolkhovitin &lt;vst@vlnb.net&gt;
Cc: Jens Axboe &lt;jens.axboe@oracle.com&gt;
Cc: Jeff Moyer &lt;jmoyer@redhat.com&gt;
Cc: Nick Piggin &lt;nickpiggin@yahoo.com.au&gt;
Cc: Ying Han &lt;yinghan@google.com&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
</entry>
<entry>
<title>Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial</title>
<updated>2009-01-07T19:31:52+00:00</updated>
<author>
<name>Linus Torvalds</name>
<email>torvalds@linux-foundation.org</email>
</author>
<published>2009-01-07T19:31:52+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux-stable.git/commit/?id=57c44c5f6fb0a8002feb258c1af58e1a744b1fcb'/>
<id>urn:sha1:57c44c5f6fb0a8002feb258c1af58e1a744b1fcb</id>
<content type='text'>
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (24 commits)
  trivial: chack -&gt; check typo fix in main Makefile
  trivial: Add a space (and a comma) to a printk in 8250 driver
  trivial: Fix misspelling of "firmware" in docs for ncr53c8xx/sym53c8xx
  trivial: Fix misspelling of "firmware" in powerpc Makefile
  trivial: Fix misspelling of "firmware" in usb.c
  trivial: Fix misspelling of "firmware" in qla1280.c
  trivial: Fix misspelling of "firmware" in a100u2w.c
  trivial: Fix misspelling of "firmware" in megaraid.c
  trivial: Fix misspelling of "firmware" in ql4_mbx.c
  trivial: Fix misspelling of "firmware" in acpi_memhotplug.c
  trivial: Fix misspelling of "firmware" in ipw2100.c
  trivial: Fix misspelling of "firmware" in atmel.c
  trivial: Fix misspelled firmware in Kconfig
  trivial: fix an -&gt; a typos in documentation and comments
  trivial: fix then -&gt; than typos in comments and documentation
  trivial: update Jesper Juhl CREDITS entry with new email
  trivial: fix singal -&gt; signal typo
  trivial: Fix incorrect use of "loose" in event.c
  trivial: printk: fix indentation of new_text_line declaration
  trivial: rtc-stk17ta8: fix sparse warning
  ...
</content>
</entry>
<entry>
<title>lib: radix_tree.c make percpu variable static</title>
<updated>2009-01-06T23:59:11+00:00</updated>
<author>
<name>Harvey Harrison</name>
<email>harvey.harrison@gmail.com</email>
</author>
<published>2009-01-06T22:40:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux-stable.git/commit/?id=8cef7d57a4a47ef7166acde05eea0bc4f723691c'/>
<id>urn:sha1:8cef7d57a4a47ef7166acde05eea0bc4f723691c</id>
<content type='text'>
radix_tree_preloads is unused outside of this file, make it static.

Noticed by sparse:
lib/radix-tree.c:84:1: warning: symbol 'per_cpu__radix_tree_preloads' was not declared. Should it be static?

Signed-off-by: Harvey Harrison &lt;harvey.harrison@gmail.com&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
</entry>
<entry>
<title>trivial: radix-tree: document wrap-around issue of radix_tree_next_hole()</title>
<updated>2009-01-06T10:28:05+00:00</updated>
<author>
<name>Wu Fengguang</name>
<email>fengguang.wu@intel.com</email>
</author>
<published>2008-11-27T10:42:22+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux-stable.git/commit/?id=8e6bdb7f8b478323525444ecee7a1477ff5b6639'/>
<id>urn:sha1:8e6bdb7f8b478323525444ecee7a1477ff5b6639</id>
<content type='text'>
And some 80-line cleanups.

Signed-off-by: Wu Fengguang &lt;wfg@linux.intel.com&gt;
Signed-off-by: Jiri Kosina &lt;jkosina@suse.cz&gt;
</content>
</entry>
<entry>
<title>SL*B: drop kmem cache argument from constructor</title>
<updated>2008-07-26T19:00:07+00:00</updated>
<author>
<name>Alexey Dobriyan</name>
<email>adobriyan@gmail.com</email>
</author>
<published>2008-07-26T02:45:34+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux-stable.git/commit/?id=51cc50685a4275c6a02653670af9f108a64e01cf'/>
<id>urn:sha1:51cc50685a4275c6a02653670af9f108a64e01cf</id>
<content type='text'>
Kmem cache passed to constructor is only needed for constructors that are
themselves multiplexeres.  Nobody uses this "feature", nor does anybody uses
passed kmem cache in non-trivial way, so pass only pointer to object.

Non-trivial places are:
	arch/powerpc/mm/init_64.c
	arch/powerpc/mm/hugetlbpage.c

This is flag day, yes.

Signed-off-by: Alexey Dobriyan &lt;adobriyan@gmail.com&gt;
Acked-by: Pekka Enberg &lt;penberg@cs.helsinki.fi&gt;
Acked-by: Christoph Lameter &lt;cl@linux-foundation.org&gt;
Cc: Jon Tollefson &lt;kniht@linux.vnet.ibm.com&gt;
Cc: Nick Piggin &lt;nickpiggin@yahoo.com.au&gt;
Cc: Matt Mackall &lt;mpm@selenic.com&gt;
[akpm@linux-foundation.org: fix arch/powerpc/mm/hugetlbpage.c]
[akpm@linux-foundation.org: fix mm/slab.c]
[akpm@linux-foundation.org: fix ubifs]
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
</entry>
<entry>
<title>radix-tree: add gang_lookup_slot, gang_lookup_slot_tag</title>
<updated>2008-07-26T19:00:06+00:00</updated>
<author>
<name>Nick Piggin</name>
<email>npiggin@suse.de</email>
</author>
<published>2008-07-26T02:45:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux-stable.git/commit/?id=47feff2c8eefe85099f87c43d3096855f0085ca0'/>
<id>urn:sha1:47feff2c8eefe85099f87c43d3096855f0085ca0</id>
<content type='text'>
Introduce gang_lookup_slot() and gang_lookup_slot_tag() functions, which
are used by lockless pagecache.

Signed-off-by: Nick Piggin &lt;npiggin@suse.de&gt;
Cc: Benjamin Herrenschmidt &lt;benh@kernel.crashing.org&gt;
Cc: Paul Mackerras &lt;paulus@samba.org&gt;
Cc: Hugh Dickins &lt;hugh@veritas.com&gt;
Cc: "Paul E. McKenney" &lt;paulmck@us.ibm.com&gt;
Reviewed-by: Peter Zijlstra &lt;a.p.zijlstra@chello.nl&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
</entry>
<entry>
<title>Christoph has moved</title>
<updated>2008-07-04T17:40:04+00:00</updated>
<author>
<name>Christoph Lameter</name>
<email>clameter@sgi.com</email>
</author>
<published>2008-07-04T16:59:22+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux-stable.git/commit/?id=cde53535991fbb5c34a1566f25955297c1487b8d'/>
<id>urn:sha1:cde53535991fbb5c34a1566f25955297c1487b8d</id>
<content type='text'>
Remove all clameter@sgi.com addresses from the kernel tree since they will
become invalid on June 27th.  Change my maintainer email address for the
slab allocators to cl@linux-foundation.org (which will be the new email
address for the future).

Signed-off-by: Christoph Lameter &lt;clameter@sgi.com&gt;
Signed-off-by: Christoph Lameter &lt;cl@linux-foundation.org&gt;
Cc: Pekka Enberg &lt;penberg@cs.helsinki.fi&gt;
Cc: Stephen Rothwell &lt;sfr@canb.auug.org.au&gt;
Cc: Matt Mackall &lt;mpm@selenic.com&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
</entry>
</feed>
