aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/extent_io.h
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2008-04-09 16:28:12 -0400
committerChris Mason <chris.mason@oracle.com>2008-09-25 11:04:01 -0400
commitce9adaa5a792c2099a83246265eb4055bc38b6b8 (patch)
tree3ac03bb73cd3aad0c0b194d387cbb5b136c92fa7 /fs/btrfs/extent_io.h
parent728131d8e40c2a47c59ca91a806299c4708029f9 (diff)
Btrfs: Do metadata checksums for reads via a workqueue
Before, metadata checksumming was done by the callers of read_tree_block, which would set EXTENT_CSUM bits in the extent tree to show that a given range of pages was already checksummed and didn't need to be verified again. But, those bits could go away via try_to_releasepage, and the end result was bogus checksum failures on pages that never left the cache. The new code validates checksums when the page is read. It is a little tricky because metadata blocks can span pages and a single read may end up going via multiple bios. Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/extent_io.h')
-rw-r--r--fs/btrfs/extent_io.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/fs/btrfs/extent_io.h b/fs/btrfs/extent_io.h
index d9f5bc4dbd7f..9d2991d1d3ce 100644
--- a/fs/btrfs/extent_io.h
+++ b/fs/btrfs/extent_io.h
@@ -13,7 +13,6 @@
13#define EXTENT_DEFRAG (1 << 6) 13#define EXTENT_DEFRAG (1 << 6)
14#define EXTENT_DEFRAG_DONE (1 << 7) 14#define EXTENT_DEFRAG_DONE (1 << 7)
15#define EXTENT_BUFFER_FILLED (1 << 8) 15#define EXTENT_BUFFER_FILLED (1 << 8)
16#define EXTENT_CSUM (1 << 9)
17#define EXTENT_IOBITS (EXTENT_LOCKED | EXTENT_WRITEBACK) 16#define EXTENT_IOBITS (EXTENT_LOCKED | EXTENT_WRITEBACK)
18 17
19/* 18/*
@@ -218,4 +217,7 @@ int map_private_extent_buffer(struct extent_buffer *eb, unsigned long offset,
218void unmap_extent_buffer(struct extent_buffer *eb, char *token, int km); 217void unmap_extent_buffer(struct extent_buffer *eb, char *token, int km);
219int invalidate_extent_lru(struct extent_io_tree *tree, u64 start, 218int invalidate_extent_lru(struct extent_io_tree *tree, u64 start,
220 unsigned long len); 219 unsigned long len);
220int release_extent_buffer_tail_pages(struct extent_buffer *eb);
221int extent_range_uptodate(struct extent_io_tree *tree,
222 u64 start, u64 end);
221#endif 223#endif