diff options
author | Chris Mason <chris.mason@oracle.com> | 2008-11-10 11:50:50 -0500 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2008-11-10 11:50:50 -0500 |
commit | 39be25cd89450940b0e5f8a6aad71d1ec99b17bf (patch) | |
tree | ecd9732a647df1af7439e1f859ac3b00e68cb430 | |
parent | f5a31e166772a7b9fff6725b697eb8b57633671e (diff) |
Btrfs: Use invalidatepage when writepage finds a page outside of i_size
With all the recent fixes to the delalloc locking, it is now safe
again to use invalidatepage inside the writepage code for
pages outside of i_size. This used to deadlock against some of the
code to write locked ranges of pages, but all of that has been fixed.
Signed-off-by: Chris Mason <chris.mason@oracle.com>
-rw-r--r-- | fs/btrfs/extent_io.c | 6 | ||||
-rw-r--r-- | fs/btrfs/file-item.c | 1 |
2 files changed, 2 insertions, 5 deletions
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index 69ea09659d47..af2d9a9300a7 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c | |||
@@ -2174,11 +2174,7 @@ static int __extent_writepage(struct page *page, struct writeback_control *wbc, | |||
2174 | pg_offset = i_size & (PAGE_CACHE_SIZE - 1); | 2174 | pg_offset = i_size & (PAGE_CACHE_SIZE - 1); |
2175 | if (page->index > end_index || | 2175 | if (page->index > end_index || |
2176 | (page->index == end_index && !pg_offset)) { | 2176 | (page->index == end_index && !pg_offset)) { |
2177 | if (epd->extent_locked) { | 2177 | page->mapping->a_ops->invalidatepage(page, 0); |
2178 | if (tree->ops && tree->ops->writepage_end_io_hook) | ||
2179 | tree->ops->writepage_end_io_hook(page, start, | ||
2180 | page_end, NULL, 1); | ||
2181 | } | ||
2182 | unlock_page(page); | 2178 | unlock_page(page); |
2183 | return 0; | 2179 | return 0; |
2184 | } | 2180 | } |
diff --git a/fs/btrfs/file-item.c b/fs/btrfs/file-item.c index f4d3fa71bc41..f76378831407 100644 --- a/fs/btrfs/file-item.c +++ b/fs/btrfs/file-item.c | |||
@@ -185,6 +185,7 @@ int btrfs_lookup_bio_sums(struct btrfs_root *root, struct inode *inode, | |||
185 | "%llu\n", inode->i_ino, | 185 | "%llu\n", inode->i_ino, |
186 | (unsigned long long)offset); | 186 | (unsigned long long)offset); |
187 | item = NULL; | 187 | item = NULL; |
188 | btrfs_release_path(root, path); | ||
188 | goto found; | 189 | goto found; |
189 | } | 190 | } |
190 | btrfs_item_key_to_cpu(path->nodes[0], &found_key, | 191 | btrfs_item_key_to_cpu(path->nodes[0], &found_key, |