diff options
author | Naohiro Aota <naota@elisp.net> | 2014-09-30 23:40:56 +0900 |
---|---|---|
committer | David Sterba <dsterba@suse.cz> | 2014-10-10 10:38:36 +0200 |
commit | f32d749e66c2914d18f0acaad759e98fd829926a (patch) | |
tree | 713f72a87d5b117241171575f6e672b3685c6552 /props.h | |
parent | 9ecbbe30ec29bc6d75cf4785081a20b8beeb6ba5 (diff) |
btrfs-progs: do not reclaim extent buffer
We should kill free_some_buffers() to stop reclaiming extent buffers or
we will hit a problem described below.
As of commit 53ee1bccf99cd5b474fe1aa857b7dd176e3a1407, we are not
counting a reference for tree->lru anymore. However free_some_buffers()
is still left and is reclaiming extent buffers whose @refs == 1. This
cause extent buffers to be reclaimed unintentionally. Thus the following
steps could happen:
1. A buffer at address A is reclaimed by free_some_buffers()
(address A is also free()ed)
2. Some code call alloc_extent_buffer()
3. Address A is assigned to newly allocated buffer
4. You see a buffer pointed by A suddenly changed its content
This problem is also pointed out here and it has a reproducer:
https://www.mail-archive.com/linux-btrfs@vger.kernel.org/msg36703.html
This commit drop free_some_buffers() and related variables, and also it
modify extent_io_tree_cleanup() to catch non-free'ed buffers properly.
Signed-off-by: Naohiro Aota <naota@elisp.net>
Signed-off-by: David Sterba <dsterba@suse.cz>
Diffstat (limited to 'props.h')
0 files changed, 0 insertions, 0 deletions