Skip to content

Commit

Permalink
buffer: make invalidate_bdev() drain all percpu LRU add caches
Browse files Browse the repository at this point in the history
commit fa4b907 upstream.

invalidate_bdev() should release all page cache pages which are clean
and not being used; however, if some pages are still in the percpu LRU
add caches on other cpus, those pages are considered in used and don't
get released.  Fix it by calling lru_add_drain_all() before trying to
invalidate pages.

This problem was discovered while testing block automatic native
capacity unlocking.  Null pages which were read before automatic
unlocking didn't get released by invalidate_bdev() and ended up
interfering with partition scan after unlocking.

Signed-off-by: Tejun Heo <[email protected]>
  • Loading branch information
htejun authored and debian-kernel-patches-to-git committed Mar 12, 2011
1 parent 5b60fe6 commit 6c5a9a5
Showing 1 changed file with 1 addition and 0 deletions.
1 change: 1 addition & 0 deletions fs/buffer.c
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,7 @@ void invalidate_bdev(struct block_device *bdev)
return;

invalidate_bh_lrus();
lru_add_drain_all(); /* make sure all lru add caches are flushed */
invalidate_mapping_pages(mapping, 0, -1);
}
EXPORT_SYMBOL(invalidate_bdev);
Expand Down

0 comments on commit 6c5a9a5

Please sign in to comment.