diff options
Diffstat (limited to 'fs/btrfs/relocation.c')
-rw-r--r-- | fs/btrfs/relocation.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 2bd0011450df..08ef890deca6 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c | |||
@@ -1850,6 +1850,7 @@ again: | |||
1850 | eb = read_tree_block(dest, old_bytenr, old_ptr_gen); | 1850 | eb = read_tree_block(dest, old_bytenr, old_ptr_gen); |
1851 | if (IS_ERR(eb)) { | 1851 | if (IS_ERR(eb)) { |
1852 | ret = PTR_ERR(eb); | 1852 | ret = PTR_ERR(eb); |
1853 | break; | ||
1853 | } else if (!extent_buffer_uptodate(eb)) { | 1854 | } else if (!extent_buffer_uptodate(eb)) { |
1854 | ret = -EIO; | 1855 | ret = -EIO; |
1855 | free_extent_buffer(eb); | 1856 | free_extent_buffer(eb); |
@@ -3129,10 +3130,10 @@ static int relocate_file_extent_cluster(struct inode *inode, | |||
3129 | if (ret) | 3130 | if (ret) |
3130 | goto out; | 3131 | goto out; |
3131 | 3132 | ||
3132 | index = (cluster->start - offset) >> PAGE_CACHE_SHIFT; | 3133 | index = (cluster->start - offset) >> PAGE_SHIFT; |
3133 | last_index = (cluster->end - offset) >> PAGE_CACHE_SHIFT; | 3134 | last_index = (cluster->end - offset) >> PAGE_SHIFT; |
3134 | while (index <= last_index) { | 3135 | while (index <= last_index) { |
3135 | ret = btrfs_delalloc_reserve_metadata(inode, PAGE_CACHE_SIZE); | 3136 | ret = btrfs_delalloc_reserve_metadata(inode, PAGE_SIZE); |
3136 | if (ret) | 3137 | if (ret) |
3137 | goto out; | 3138 | goto out; |
3138 | 3139 | ||
@@ -3145,7 +3146,7 @@ static int relocate_file_extent_cluster(struct inode *inode, | |||
3145 | mask); | 3146 | mask); |
3146 | if (!page) { | 3147 | if (!page) { |
3147 | btrfs_delalloc_release_metadata(inode, | 3148 | btrfs_delalloc_release_metadata(inode, |
3148 | PAGE_CACHE_SIZE); | 3149 | PAGE_SIZE); |
3149 | ret = -ENOMEM; | 3150 | ret = -ENOMEM; |
3150 | goto out; | 3151 | goto out; |
3151 | } | 3152 | } |
@@ -3162,16 +3163,16 @@ static int relocate_file_extent_cluster(struct inode *inode, | |||
3162 | lock_page(page); | 3163 | lock_page(page); |
3163 | if (!PageUptodate(page)) { | 3164 | if (!PageUptodate(page)) { |
3164 | unlock_page(page); | 3165 | unlock_page(page); |
3165 | page_cache_release(page); | 3166 | put_page(page); |
3166 | btrfs_delalloc_release_metadata(inode, | 3167 | btrfs_delalloc_release_metadata(inode, |
3167 | PAGE_CACHE_SIZE); | 3168 | PAGE_SIZE); |
3168 | ret = -EIO; | 3169 | ret = -EIO; |
3169 | goto out; | 3170 | goto out; |
3170 | } | 3171 | } |
3171 | } | 3172 | } |
3172 | 3173 | ||
3173 | page_start = page_offset(page); | 3174 | page_start = page_offset(page); |
3174 | page_end = page_start + PAGE_CACHE_SIZE - 1; | 3175 | page_end = page_start + PAGE_SIZE - 1; |
3175 | 3176 | ||
3176 | lock_extent(&BTRFS_I(inode)->io_tree, page_start, page_end); | 3177 | lock_extent(&BTRFS_I(inode)->io_tree, page_start, page_end); |
3177 | 3178 | ||
@@ -3191,7 +3192,7 @@ static int relocate_file_extent_cluster(struct inode *inode, | |||
3191 | unlock_extent(&BTRFS_I(inode)->io_tree, | 3192 | unlock_extent(&BTRFS_I(inode)->io_tree, |
3192 | page_start, page_end); | 3193 | page_start, page_end); |
3193 | unlock_page(page); | 3194 | unlock_page(page); |
3194 | page_cache_release(page); | 3195 | put_page(page); |
3195 | 3196 | ||
3196 | index++; | 3197 | index++; |
3197 | balance_dirty_pages_ratelimited(inode->i_mapping); | 3198 | balance_dirty_pages_ratelimited(inode->i_mapping); |