diff options
-rw-r--r-- | fs/btrfs/inode.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 45cf03ee1bc2..2e25d698bab0 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c | |||
@@ -4156,11 +4156,6 @@ static ssize_t btrfs_direct_IO(int rw, struct kiocb *iocb, | |||
4156 | return -EINVAL; | 4156 | return -EINVAL; |
4157 | } | 4157 | } |
4158 | 4158 | ||
4159 | static sector_t btrfs_bmap(struct address_space *mapping, sector_t iblock) | ||
4160 | { | ||
4161 | return extent_bmap(mapping, iblock, btrfs_get_extent); | ||
4162 | } | ||
4163 | |||
4164 | int btrfs_readpage(struct file *file, struct page *page) | 4159 | int btrfs_readpage(struct file *file, struct page *page) |
4165 | { | 4160 | { |
4166 | struct extent_io_tree *tree; | 4161 | struct extent_io_tree *tree; |
@@ -4985,13 +4980,24 @@ static struct extent_io_ops btrfs_extent_io_ops = { | |||
4985 | .clear_bit_hook = btrfs_clear_bit_hook, | 4980 | .clear_bit_hook = btrfs_clear_bit_hook, |
4986 | }; | 4981 | }; |
4987 | 4982 | ||
4983 | /* | ||
4984 | * btrfs doesn't support the bmap operation because swapfiles | ||
4985 | * use bmap to make a mapping of extents in the file. They assume | ||
4986 | * these extents won't change over the life of the file and they | ||
4987 | * use the bmap result to do IO directly to the drive. | ||
4988 | * | ||
4989 | * the btrfs bmap call would return logical addresses that aren't | ||
4990 | * suitable for IO and they also will change frequently as COW | ||
4991 | * operations happen. So, swapfile + btrfs == corruption. | ||
4992 | * | ||
4993 | * For now we're avoiding this by dropping bmap. | ||
4994 | */ | ||
4988 | static struct address_space_operations btrfs_aops = { | 4995 | static struct address_space_operations btrfs_aops = { |
4989 | .readpage = btrfs_readpage, | 4996 | .readpage = btrfs_readpage, |
4990 | .writepage = btrfs_writepage, | 4997 | .writepage = btrfs_writepage, |
4991 | .writepages = btrfs_writepages, | 4998 | .writepages = btrfs_writepages, |
4992 | .readpages = btrfs_readpages, | 4999 | .readpages = btrfs_readpages, |
4993 | .sync_page = block_sync_page, | 5000 | .sync_page = block_sync_page, |
4994 | .bmap = btrfs_bmap, | ||
4995 | .direct_IO = btrfs_direct_IO, | 5001 | .direct_IO = btrfs_direct_IO, |
4996 | .invalidatepage = btrfs_invalidatepage, | 5002 | .invalidatepage = btrfs_invalidatepage, |
4997 | .releasepage = btrfs_releasepage, | 5003 | .releasepage = btrfs_releasepage, |