aboutsummaryrefslogtreecommitdiff
path: root/include/linux/timerqueue.h
diff options
context:
space:
mode:
authorPeter Zijlstra <[email protected]>2007-05-06 14:49:55 -0700
committerLinus Torvalds <[email protected]>2007-05-07 12:12:55 -0700
commitf9a14399aea13830d8af6798a53207bb0a900945 (patch)
treeb2501f1ce1d2a4564cd9a29c55705e524f594ad1 /include/linux/timerqueue.h
parentf98393a64ca1392130724c3acb4e3f325801d2b6 (diff)
mm: optimize kill_bdev()
Remove duplicate work in kill_bdev(). It currently invalidates and then truncates the bdev's mapping. invalidate_mapping_pages() will opportunistically remove pages from the mapping. And truncate_inode_pages() will forcefully remove all pages. The only thing truncate doesn't do is flush the bh lrus. So do that explicitly. This avoids (very unlikely) but possible invalid lookup results if the same bdev is quickly re-issued. It also will prevent extreme kernel latencies which are observed when blockdevs which have a large amount of pagecache are unmounted, by avoiding invalidate_mapping_pages() on that path. invalidate_mapping_pages() has no cond_resched (it can be called under spinlock), whereas truncate_inode_pages() has one. [[email protected]: restore nrpages==0 optimisation] Signed-off-by: Peter Zijlstra <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
Diffstat (limited to 'include/linux/timerqueue.h')
0 files changed, 0 insertions, 0 deletions