Dave Chinner
144dcfc012
radix-tree: radix_tree_range_tag_if_tagged() can set incorrect tags
...
Commit ebf8aa44be ("radix-tree:
omplement function radix_tree_range_tag_if_tagged") does not safely
set tags on on intermediate tree nodes. The code walks down the tree
setting tags before it has fully resolved the path to the leaf under
the assumption there will be a leaf slot with the tag set in the
range it is searching.
Unfortunately, this is not a valid assumption - we can abort after
setting a tag on an intermediate node if we overrun the number of
tags we are allowed to set in a batch, or stop scanning because we
we have passed the last scan index before we reach a leaf slot with
the tag we are searching for set.
As a result, we can leave the function with tags set on intemediate
nodes which can be tripped over later by tag-based lookups. The
result of these stale tags is that lookup may end prematurely or
livelock because the lookup cannot make progress.
The fix for the problem involves reocrding the traversal path we
take to the leaf nodes, and only propagating the tags back up the
tree once the tag is set in the leaf node slot. We are already
recording the path for efficient traversal, so there is no
additional overhead to do the intermediately node tag setting in
this manner.
This fixes a radix tree lookup livelock triggered by the new
writeback sync livelock avoidance code introduced in commit
f446daaea9 ("mm: implement writeback
livelock avoidance using page tagging").
Signed-off-by: Dave Chinner <dchinner@redhat.com>
Acked-by: Jan Kara <jack@suse.cz>
2010-08-23 10:33:53 +10:00
..
lzo
lib: add support for LZO-compressed kernels
2010-01-11 09:34:04 -08:00
raid6
Further tidyup of raid6 naming in lib/raid6
2010-08-12 06:44:54 +10:00
reed_solomon
zlib_deflate
trivial: fix typo "to to" in multiple files
2009-09-21 15:14:55 +02:00
zlib_inflate
inflate_fast: sout is already a short so ptr arith was off by one.
2010-03-12 15:52:44 -08:00
.gitignore
argv_split.c
tree-wide: convert open calls to remove spaces to skip_spaces() lib function
2009-12-15 08:53:32 -08:00
atomic64.c
lib: Fix atomic64_add_unless return value convention
2010-03-01 11:38:46 -08:00
atomic64_test.c
ARM: 6213/1: atomic64_test: add ARM as supported architecture
2010-07-27 10:43:46 +01:00
audit.c
bcd.c
bitmap.c
Revert "cpusets: randomize node rotor used in cpuset_mem_spread_node()"
2010-05-30 09:00:03 -07:00
bitrev.c
btree.c
lib/btree: fix possible NULL pointer dereference
2010-05-15 12:48:10 -07:00
bug.c
lib/bug.c: add oops end marker to WARN implementation
2010-08-11 08:59:22 -07:00
bust_spinlocks.c
check_signature.c
checksum.c
lib/checksum: fix one more thinko
2009-11-03 16:06:53 +01:00
cmdline.c
cpu-notifier-error-inject.c
fault-injection: add CPU notifier error injection module
2010-05-27 09:12:48 -07:00
cpumask.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
crc-ccitt.c
crc-itu-t.c
crc-t10dif.c
crc7.c
crc16.c
crc32.c
revert "crc32: use __BYTE_ORDER macro for endian detection"
2010-05-26 08:19:23 -07:00
crc32defs.h
ctype.c
ctype: constify read-only _ctype string
2009-12-15 08:53:32 -08:00
debug_locks.c
rcu: Introduce lockdep-based checking to RCU read-side primitives
2010-02-25 09:40:59 +01:00
debugobjects.c
Merge branch 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
2010-05-18 08:17:58 -07:00
dec_and_lock.c
atomic: only take lock when the counter drops to zero on UP as well
2009-06-16 19:47:47 -07:00
decompress.c
Add LZO compression support for initramfs and old-style initrd
2010-01-11 09:34:05 -08:00
decompress_bunzip2.c
lib/decompress_bunzip2.c: fix checkstack warning
2010-08-11 08:59:23 -07:00
decompress_inflate.c
lzma/gzip: fix potential oops when input data is truncated
2009-09-24 07:21:05 -07:00
decompress_unlzma.c
lzma/gzip: fix potential oops when input data is truncated
2009-09-24 07:21:05 -07:00
decompress_unlzo.c
lib: fix the use of LZO to decompress initramfs images
2010-04-24 11:31:25 -07:00
devres.c
lib/devres.c: fix comment typo
2010-07-11 22:16:32 +02:00
div64.c
dma-debug.c
dma-debug: Cleanup for copy-loop in filter_write()
2010-04-07 14:36:27 +02:00
dump_stack.c
dynamic_debug.c
module: initialize module dynamic debug later
2010-07-04 20:17:22 -07:00
extable.c
module: trim exception table on init free.
2009-06-12 21:47:04 +09:30
fault-inject.c
headers: remove sched.h from interrupt.h
2009-10-11 11:20:58 -07:00
find_last_bit.c
find_next_bit.c
flex_array.c
flex_array: add helpers to get and put to make pointers easy to use
2010-08-09 20:45:09 -07:00
gcd.c
lib: add lib/gcd.c
2009-06-18 13:04:05 -07:00
gen_crc32table.c
crc32: major optimization
2010-05-25 08:07:06 -07:00
genalloc.c
genalloc: fix allocation from end of pool
2010-06-29 15:29:30 -07:00
halfmd4.c
hexdump.c
lib: introduce common method to convert hex digits
2010-05-25 08:07:05 -07:00
hweight.c
x86: Add optimized popcnt variants
2010-04-06 15:52:11 -07:00
idr.c
idr: fix RCU lockdep splat in idr_get_next()
2010-06-23 06:50:45 -07:00
inflate.c
MN10300: Don't try and #include <linux/slab.h> in lib/inflate.c from bootloader
2010-08-12 09:51:35 -07:00
int_sqrt.c
iomap.c
iomap_copy.c
iommu-helper.c
iommu: inline iommu_num_pages
2010-08-09 20:45:05 -07:00
ioremap.c
x86, ioremap: Fix incorrect physical address handling in PAE mode
2010-07-09 11:42:03 -07:00
irq_regs.c
is_single_threaded.c
kernel: is_current_single_threaded: don't use ->mmap_sem
2009-07-17 09:11:31 +10:00
kasprintf.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
Kconfig
Merge branch 'async' of macbook:git/btrfs-unstable
2010-08-09 10:36:44 +01:00
Kconfig.debug
Merge branch 'kmemleak' of git://git.kernel.org/pub/scm/linux/kernel/git/cmarinas/linux-2.6-cm
2010-08-10 13:58:11 -07:00
Kconfig.kgdb
mips,kgdb: kdb low level trap catch and stack trace
2010-05-20 21:04:26 -05:00
Kconfig.kmemcheck
kmemcheck: depend on HAVE_ARCH_KMEMCHECK
2009-07-01 22:28:44 +02:00
kernel_lock.c
bkl: Fixup core_lock fallout
2009-12-14 23:55:33 +01:00
klist.c
kobject.c
sysfs: Comment sysfs directory tagging logic
2010-05-21 09:37:31 -07:00
kobject_uevent.c
kobject: free memory if netlink_kernel_create() fails
2010-06-04 13:27:52 -07:00
kref.c
kref: remove kref_set
2010-05-21 09:37:29 -07:00
lcm.c
block: Fix overrun in lcm() and move it to lib
2010-03-15 12:47:59 +01:00
libcrc32c.c
list_debug.c
list debugging: warn when deleting a deleted entry
2010-08-09 20:45:08 -07:00
list_sort.c
lib: revise list_sort() header comment
2010-03-06 11:26:35 -08:00
locking-selftest-hardirq.h
locking-selftest-mutex.h
locking-selftest-rlock-hardirq.h
locking-selftest-rlock-softirq.h
locking-selftest-rlock.h
locking-selftest-rsem.h
locking-selftest-softirq.h
locking-selftest-spin-hardirq.h
locking-selftest-spin-softirq.h
locking-selftest-spin.h
locking-selftest-wlock-hardirq.h
locking-selftest-wlock-softirq.h
locking-selftest-wlock.h
locking-selftest-wsem.h
locking-selftest.c
lru_cache.c
The DRBD driver
2009-10-01 21:17:49 +02:00
Makefile
Merge branch 'async' of macbook:git/btrfs-unstable
2010-08-09 10:36:44 +01:00
nlattr.c
parser.c
parser: remove unnecessary strlen()
2009-12-15 08:53:33 -08:00
percpu_counter.c
tmpfs: add accurate compare function to percpu_counter library
2010-08-09 20:44:58 -07:00
plist.c
plist: Make plist debugging raw_spinlock aware
2009-12-14 23:55:33 +01:00
prio_heap.c
prio_tree.c
proportions.c
radix-tree.c
radix-tree: radix_tree_range_tag_if_tagged() can set incorrect tags
2010-08-23 10:33:53 +10:00
random32.c
Merge branch 'master' into for-next
2010-06-16 18:08:13 +02:00
ratelimit.c
ratelimit: fix the return value when __ratelimit() fails to acquire the lock
2010-04-07 08:38:04 -07:00
rational.c
lib/rational.c needs module.h
2010-01-11 09:34:05 -08:00
rbtree.c
rbtree: Undo augmented trees performance damage and regression
2010-07-05 14:43:50 +02:00
reciprocal_div.c
rwsem-spinlock.c
rwsem generic spinlock: use IRQ save/restore spinlocks
2010-04-07 16:15:05 -07:00
rwsem.c
rwsem: smaller wrappers around rwsem_down_failed_common
2010-08-09 20:45:11 -07:00
scatterlist.c
lib/scatterlist: Hook sg_kmalloc into kmemleak (v2)
2010-07-28 22:59:02 +01:00
sha1.c
show_mem.c
mm: use the same log level for show_mem()
2010-03-06 11:26:27 -08:00
smp_processor_id.c
sort.c
spinlock_debug.c
locking: Further name space cleanups
2009-12-14 23:55:33 +01:00
string.c
lib/string.c: simplify strnstr()
2010-03-06 11:26:35 -08:00
string_helpers.c
swiotlb.c
swiotlb: Make swiotlb bookkeeping functions visible in the header file.
2010-06-07 11:59:27 -04:00
syscall.c
textsearch.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
ts_bm.c
ts_fsm.c
ts_kmp.c
uuid.c
Unified UUID/GUID definition
2010-05-19 22:40:47 -04:00
vsprintf.c
lib: vsprintf: useless strlen() removed
2010-08-09 20:45:09 -07:00