mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-24 12:44:11 +08:00
mm: readahead scan lockless
radix_tree_next_hole() is implemented as a series of radix_tree_lookup()s. So it can be called locklessly, under rcu_read_lock(). Signed-off-by: Nick Piggin <npiggin@suse.de> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Hugh Dickins <hugh@veritas.com> Cc: "Paul E. McKenney" <paulmck@us.ibm.com> Reviewed-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
652ea69536
commit
30002ed2e4
@ -382,9 +382,9 @@ ondemand_readahead(struct address_space *mapping,
|
||||
if (hit_readahead_marker) {
|
||||
pgoff_t start;
|
||||
|
||||
read_lock_irq(&mapping->tree_lock);
|
||||
start = radix_tree_next_hole(&mapping->page_tree, offset, max+1);
|
||||
read_unlock_irq(&mapping->tree_lock);
|
||||
rcu_read_lock();
|
||||
start = radix_tree_next_hole(&mapping->page_tree, offset,max+1);
|
||||
rcu_read_unlock();
|
||||
|
||||
if (!start || start - offset > max)
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user