aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/inode.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/btrfs/inode.c')
-rw-r--r--fs/btrfs/inode.c577
1 files changed, 377 insertions, 200 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 512c3d1da083..7cd8ab0ef04d 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -50,6 +50,7 @@
50#include "tree-log.h" 50#include "tree-log.h"
51#include "compression.h" 51#include "compression.h"
52#include "locking.h" 52#include "locking.h"
53#include "free-space-cache.h"
53 54
54struct btrfs_iget_args { 55struct btrfs_iget_args {
55 u64 ino; 56 u64 ino;
@@ -70,6 +71,7 @@ static struct kmem_cache *btrfs_inode_cachep;
70struct kmem_cache *btrfs_trans_handle_cachep; 71struct kmem_cache *btrfs_trans_handle_cachep;
71struct kmem_cache *btrfs_transaction_cachep; 72struct kmem_cache *btrfs_transaction_cachep;
72struct kmem_cache *btrfs_path_cachep; 73struct kmem_cache *btrfs_path_cachep;
74struct kmem_cache *btrfs_free_space_cachep;
73 75
74#define S_SHIFT 12 76#define S_SHIFT 12
75static unsigned char btrfs_type_by_mode[S_IFMT >> S_SHIFT] = { 77static unsigned char btrfs_type_by_mode[S_IFMT >> S_SHIFT] = {
@@ -82,7 +84,8 @@ static unsigned char btrfs_type_by_mode[S_IFMT >> S_SHIFT] = {
82 [S_IFLNK >> S_SHIFT] = BTRFS_FT_SYMLINK, 84 [S_IFLNK >> S_SHIFT] = BTRFS_FT_SYMLINK,
83}; 85};
84 86
85static void btrfs_truncate(struct inode *inode); 87static int btrfs_setsize(struct inode *inode, loff_t newsize);
88static int btrfs_truncate(struct inode *inode);
86static int btrfs_finish_ordered_io(struct inode *inode, u64 start, u64 end); 89static int btrfs_finish_ordered_io(struct inode *inode, u64 start, u64 end);
87static noinline int cow_file_range(struct inode *inode, 90static noinline int cow_file_range(struct inode *inode,
88 struct page *locked_page, 91 struct page *locked_page,
@@ -109,6 +112,7 @@ static int btrfs_init_inode_security(struct btrfs_trans_handle *trans,
109static noinline int insert_inline_extent(struct btrfs_trans_handle *trans, 112static noinline int insert_inline_extent(struct btrfs_trans_handle *trans,
110 struct btrfs_root *root, struct inode *inode, 113 struct btrfs_root *root, struct inode *inode,
111 u64 start, size_t size, size_t compressed_size, 114 u64 start, size_t size, size_t compressed_size,
115 int compress_type,
112 struct page **compressed_pages) 116 struct page **compressed_pages)
113{ 117{
114 struct btrfs_key key; 118 struct btrfs_key key;
@@ -123,12 +127,9 @@ static noinline int insert_inline_extent(struct btrfs_trans_handle *trans,
123 size_t cur_size = size; 127 size_t cur_size = size;
124 size_t datasize; 128 size_t datasize;
125 unsigned long offset; 129 unsigned long offset;
126 int compress_type = BTRFS_COMPRESS_NONE;
127 130
128 if (compressed_size && compressed_pages) { 131 if (compressed_size && compressed_pages)
129 compress_type = root->fs_info->compress_type;
130 cur_size = compressed_size; 132 cur_size = compressed_size;
131 }
132 133
133 path = btrfs_alloc_path(); 134 path = btrfs_alloc_path();
134 if (!path) 135 if (!path)
@@ -218,7 +219,7 @@ fail:
218static noinline int cow_file_range_inline(struct btrfs_trans_handle *trans, 219static noinline int cow_file_range_inline(struct btrfs_trans_handle *trans,
219 struct btrfs_root *root, 220 struct btrfs_root *root,
220 struct inode *inode, u64 start, u64 end, 221 struct inode *inode, u64 start, u64 end,
221 size_t compressed_size, 222 size_t compressed_size, int compress_type,
222 struct page **compressed_pages) 223 struct page **compressed_pages)
223{ 224{
224 u64 isize = i_size_read(inode); 225 u64 isize = i_size_read(inode);
@@ -251,7 +252,7 @@ static noinline int cow_file_range_inline(struct btrfs_trans_handle *trans,
251 inline_len = min_t(u64, isize, actual_end); 252 inline_len = min_t(u64, isize, actual_end);
252 ret = insert_inline_extent(trans, root, inode, start, 253 ret = insert_inline_extent(trans, root, inode, start,
253 inline_len, compressed_size, 254 inline_len, compressed_size,
254 compressed_pages); 255 compress_type, compressed_pages);
255 BUG_ON(ret); 256 BUG_ON(ret);
256 btrfs_delalloc_release_metadata(inode, end + 1 - start); 257 btrfs_delalloc_release_metadata(inode, end + 1 - start);
257 btrfs_drop_extent_cache(inode, start, aligned_end - 1, 0); 258 btrfs_drop_extent_cache(inode, start, aligned_end - 1, 0);
@@ -288,6 +289,7 @@ static noinline int add_async_extent(struct async_cow *cow,
288 struct async_extent *async_extent; 289 struct async_extent *async_extent;
289 290
290 async_extent = kmalloc(sizeof(*async_extent), GFP_NOFS); 291 async_extent = kmalloc(sizeof(*async_extent), GFP_NOFS);
292 BUG_ON(!async_extent);
291 async_extent->start = start; 293 async_extent->start = start;
292 async_extent->ram_size = ram_size; 294 async_extent->ram_size = ram_size;
293 async_extent->compressed_size = compressed_size; 295 async_extent->compressed_size = compressed_size;
@@ -382,9 +384,11 @@ again:
382 */ 384 */
383 if (!(BTRFS_I(inode)->flags & BTRFS_INODE_NOCOMPRESS) && 385 if (!(BTRFS_I(inode)->flags & BTRFS_INODE_NOCOMPRESS) &&
384 (btrfs_test_opt(root, COMPRESS) || 386 (btrfs_test_opt(root, COMPRESS) ||
385 (BTRFS_I(inode)->force_compress))) { 387 (BTRFS_I(inode)->force_compress) ||
388 (BTRFS_I(inode)->flags & BTRFS_INODE_COMPRESS))) {
386 WARN_ON(pages); 389 WARN_ON(pages);
387 pages = kzalloc(sizeof(struct page *) * nr_pages, GFP_NOFS); 390 pages = kzalloc(sizeof(struct page *) * nr_pages, GFP_NOFS);
391 BUG_ON(!pages);
388 392
389 if (BTRFS_I(inode)->force_compress) 393 if (BTRFS_I(inode)->force_compress)
390 compress_type = BTRFS_I(inode)->force_compress; 394 compress_type = BTRFS_I(inode)->force_compress;
@@ -427,12 +431,13 @@ again:
427 * to make an uncompressed inline extent. 431 * to make an uncompressed inline extent.
428 */ 432 */
429 ret = cow_file_range_inline(trans, root, inode, 433 ret = cow_file_range_inline(trans, root, inode,
430 start, end, 0, NULL); 434 start, end, 0, 0, NULL);
431 } else { 435 } else {
432 /* try making a compressed inline extent */ 436 /* try making a compressed inline extent */
433 ret = cow_file_range_inline(trans, root, inode, 437 ret = cow_file_range_inline(trans, root, inode,
434 start, end, 438 start, end,
435 total_compressed, pages); 439 total_compressed,
440 compress_type, pages);
436 } 441 }
437 if (ret == 0) { 442 if (ret == 0) {
438 /* 443 /*
@@ -786,7 +791,7 @@ static noinline int cow_file_range(struct inode *inode,
786 if (start == 0) { 791 if (start == 0) {
787 /* lets try to make an inline extent */ 792 /* lets try to make an inline extent */
788 ret = cow_file_range_inline(trans, root, inode, 793 ret = cow_file_range_inline(trans, root, inode,
789 start, end, 0, NULL); 794 start, end, 0, 0, NULL);
790 if (ret == 0) { 795 if (ret == 0) {
791 extent_clear_unlock_delalloc(inode, 796 extent_clear_unlock_delalloc(inode,
792 &BTRFS_I(inode)->io_tree, 797 &BTRFS_I(inode)->io_tree,
@@ -949,6 +954,7 @@ static int cow_file_range_async(struct inode *inode, struct page *locked_page,
949 1, 0, NULL, GFP_NOFS); 954 1, 0, NULL, GFP_NOFS);
950 while (start < end) { 955 while (start < end) {
951 async_cow = kmalloc(sizeof(*async_cow), GFP_NOFS); 956 async_cow = kmalloc(sizeof(*async_cow), GFP_NOFS);
957 BUG_ON(!async_cow);
952 async_cow->inode = inode; 958 async_cow->inode = inode;
953 async_cow->root = root; 959 async_cow->root = root;
954 async_cow->locked_page = locked_page; 960 async_cow->locked_page = locked_page;
@@ -1254,7 +1260,8 @@ static int run_delalloc_range(struct inode *inode, struct page *locked_page,
1254 ret = run_delalloc_nocow(inode, locked_page, start, end, 1260 ret = run_delalloc_nocow(inode, locked_page, start, end,
1255 page_started, 0, nr_written); 1261 page_started, 0, nr_written);
1256 else if (!btrfs_test_opt(root, COMPRESS) && 1262 else if (!btrfs_test_opt(root, COMPRESS) &&
1257 !(BTRFS_I(inode)->force_compress)) 1263 !(BTRFS_I(inode)->force_compress) &&
1264 !(BTRFS_I(inode)->flags & BTRFS_INODE_COMPRESS))
1258 ret = cow_file_range(inode, locked_page, start, end, 1265 ret = cow_file_range(inode, locked_page, start, end,
1259 page_started, nr_written, 1); 1266 page_started, nr_written, 1);
1260 else 1267 else
@@ -1461,8 +1468,11 @@ static int btrfs_submit_bio_hook(struct inode *inode, int rw, struct bio *bio,
1461 if (bio_flags & EXTENT_BIO_COMPRESSED) { 1468 if (bio_flags & EXTENT_BIO_COMPRESSED) {
1462 return btrfs_submit_compressed_read(inode, bio, 1469 return btrfs_submit_compressed_read(inode, bio,
1463 mirror_num, bio_flags); 1470 mirror_num, bio_flags);
1464 } else if (!skip_sum) 1471 } else if (!skip_sum) {
1465 btrfs_lookup_bio_sums(root, inode, bio, NULL); 1472 ret = btrfs_lookup_bio_sums(root, inode, bio, NULL);
1473 if (ret)
1474 return ret;
1475 }
1466 goto mapit; 1476 goto mapit;
1467 } else if (!skip_sum) { 1477 } else if (!skip_sum) {
1468 /* csum items have already been cloned */ 1478 /* csum items have already been cloned */
@@ -1761,9 +1771,12 @@ static int btrfs_finish_ordered_io(struct inode *inode, u64 start, u64 end)
1761 add_pending_csums(trans, inode, ordered_extent->file_offset, 1771 add_pending_csums(trans, inode, ordered_extent->file_offset,
1762 &ordered_extent->list); 1772 &ordered_extent->list);
1763 1773
1764 btrfs_ordered_update_i_size(inode, 0, ordered_extent); 1774 ret = btrfs_ordered_update_i_size(inode, 0, ordered_extent);
1765 ret = btrfs_update_inode(trans, root, inode); 1775 if (!ret) {
1766 BUG_ON(ret); 1776 ret = btrfs_update_inode(trans, root, inode);
1777 BUG_ON(ret);
1778 }
1779 ret = 0;
1767out: 1780out:
1768 if (nolock) { 1781 if (nolock) {
1769 if (trans) 1782 if (trans)
@@ -1785,6 +1798,8 @@ out:
1785static int btrfs_writepage_end_io_hook(struct page *page, u64 start, u64 end, 1798static int btrfs_writepage_end_io_hook(struct page *page, u64 start, u64 end,
1786 struct extent_state *state, int uptodate) 1799 struct extent_state *state, int uptodate)
1787{ 1800{
1801 trace_btrfs_writepage_end_io_hook(page, start, end, uptodate);
1802
1788 ClearPagePrivate2(page); 1803 ClearPagePrivate2(page);
1789 return btrfs_finish_ordered_io(page->mapping->host, start, end); 1804 return btrfs_finish_ordered_io(page->mapping->host, start, end);
1790} 1805}
@@ -1895,10 +1910,10 @@ static int btrfs_io_failed_hook(struct bio *failed_bio,
1895 else 1910 else
1896 rw = READ; 1911 rw = READ;
1897 1912
1898 BTRFS_I(inode)->io_tree.ops->submit_bio_hook(inode, rw, bio, 1913 ret = BTRFS_I(inode)->io_tree.ops->submit_bio_hook(inode, rw, bio,
1899 failrec->last_mirror, 1914 failrec->last_mirror,
1900 failrec->bio_flags, 0); 1915 failrec->bio_flags, 0);
1901 return 0; 1916 return ret;
1902} 1917}
1903 1918
1904/* 1919/*
@@ -2210,8 +2225,6 @@ int btrfs_orphan_add(struct btrfs_trans_handle *trans, struct inode *inode)
2210 insert = 1; 2225 insert = 1;
2211#endif 2226#endif
2212 insert = 1; 2227 insert = 1;
2213 } else {
2214 WARN_ON(!BTRFS_I(inode)->orphan_meta_reserved);
2215 } 2228 }
2216 2229
2217 if (!BTRFS_I(inode)->orphan_meta_reserved) { 2230 if (!BTRFS_I(inode)->orphan_meta_reserved) {
@@ -2282,7 +2295,7 @@ int btrfs_orphan_del(struct btrfs_trans_handle *trans, struct inode *inode)
2282 * this cleans up any orphans that may be left on the list from the last use 2295 * this cleans up any orphans that may be left on the list from the last use
2283 * of this root. 2296 * of this root.
2284 */ 2297 */
2285void btrfs_orphan_cleanup(struct btrfs_root *root) 2298int btrfs_orphan_cleanup(struct btrfs_root *root)
2286{ 2299{
2287 struct btrfs_path *path; 2300 struct btrfs_path *path;
2288 struct extent_buffer *leaf; 2301 struct extent_buffer *leaf;
@@ -2292,10 +2305,13 @@ void btrfs_orphan_cleanup(struct btrfs_root *root)
2292 int ret = 0, nr_unlink = 0, nr_truncate = 0; 2305 int ret = 0, nr_unlink = 0, nr_truncate = 0;
2293 2306
2294 if (cmpxchg(&root->orphan_cleanup_state, 0, ORPHAN_CLEANUP_STARTED)) 2307 if (cmpxchg(&root->orphan_cleanup_state, 0, ORPHAN_CLEANUP_STARTED))
2295 return; 2308 return 0;
2296 2309
2297 path = btrfs_alloc_path(); 2310 path = btrfs_alloc_path();
2298 BUG_ON(!path); 2311 if (!path) {
2312 ret = -ENOMEM;
2313 goto out;
2314 }
2299 path->reada = -1; 2315 path->reada = -1;
2300 2316
2301 key.objectid = BTRFS_ORPHAN_OBJECTID; 2317 key.objectid = BTRFS_ORPHAN_OBJECTID;
@@ -2304,18 +2320,16 @@ void btrfs_orphan_cleanup(struct btrfs_root *root)
2304 2320
2305 while (1) { 2321 while (1) {
2306 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); 2322 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
2307 if (ret < 0) { 2323 if (ret < 0)
2308 printk(KERN_ERR "Error searching slot for orphan: %d" 2324 goto out;
2309 "\n", ret);
2310 break;
2311 }
2312 2325
2313 /* 2326 /*
2314 * if ret == 0 means we found what we were searching for, which 2327 * if ret == 0 means we found what we were searching for, which
2315 * is weird, but possible, so only screw with path if we didnt 2328 * is weird, but possible, so only screw with path if we didn't
2316 * find the key and see if we have stuff that matches 2329 * find the key and see if we have stuff that matches
2317 */ 2330 */
2318 if (ret > 0) { 2331 if (ret > 0) {
2332 ret = 0;
2319 if (path->slots[0] == 0) 2333 if (path->slots[0] == 0)
2320 break; 2334 break;
2321 path->slots[0]--; 2335 path->slots[0]--;
@@ -2343,7 +2357,10 @@ void btrfs_orphan_cleanup(struct btrfs_root *root)
2343 found_key.type = BTRFS_INODE_ITEM_KEY; 2357 found_key.type = BTRFS_INODE_ITEM_KEY;
2344 found_key.offset = 0; 2358 found_key.offset = 0;
2345 inode = btrfs_iget(root->fs_info->sb, &found_key, root, NULL); 2359 inode = btrfs_iget(root->fs_info->sb, &found_key, root, NULL);
2346 BUG_ON(IS_ERR(inode)); 2360 if (IS_ERR(inode)) {
2361 ret = PTR_ERR(inode);
2362 goto out;
2363 }
2347 2364
2348 /* 2365 /*
2349 * add this inode to the orphan list so btrfs_orphan_del does 2366 * add this inode to the orphan list so btrfs_orphan_del does
@@ -2361,7 +2378,10 @@ void btrfs_orphan_cleanup(struct btrfs_root *root)
2361 */ 2378 */
2362 if (is_bad_inode(inode)) { 2379 if (is_bad_inode(inode)) {
2363 trans = btrfs_start_transaction(root, 0); 2380 trans = btrfs_start_transaction(root, 0);
2364 BUG_ON(IS_ERR(trans)); 2381 if (IS_ERR(trans)) {
2382 ret = PTR_ERR(trans);
2383 goto out;
2384 }
2365 btrfs_orphan_del(trans, inode); 2385 btrfs_orphan_del(trans, inode);
2366 btrfs_end_transaction(trans, root); 2386 btrfs_end_transaction(trans, root);
2367 iput(inode); 2387 iput(inode);
@@ -2370,17 +2390,22 @@ void btrfs_orphan_cleanup(struct btrfs_root *root)
2370 2390
2371 /* if we have links, this was a truncate, lets do that */ 2391 /* if we have links, this was a truncate, lets do that */
2372 if (inode->i_nlink) { 2392 if (inode->i_nlink) {
2393 if (!S_ISREG(inode->i_mode)) {
2394 WARN_ON(1);
2395 iput(inode);
2396 continue;
2397 }
2373 nr_truncate++; 2398 nr_truncate++;
2374 btrfs_truncate(inode); 2399 ret = btrfs_truncate(inode);
2375 } else { 2400 } else {
2376 nr_unlink++; 2401 nr_unlink++;
2377 } 2402 }
2378 2403
2379 /* this will do delete_inode and everything for us */ 2404 /* this will do delete_inode and everything for us */
2380 iput(inode); 2405 iput(inode);
2406 if (ret)
2407 goto out;
2381 } 2408 }
2382 btrfs_free_path(path);
2383
2384 root->orphan_cleanup_state = ORPHAN_CLEANUP_DONE; 2409 root->orphan_cleanup_state = ORPHAN_CLEANUP_DONE;
2385 2410
2386 if (root->orphan_block_rsv) 2411 if (root->orphan_block_rsv)
@@ -2389,14 +2414,20 @@ void btrfs_orphan_cleanup(struct btrfs_root *root)
2389 2414
2390 if (root->orphan_block_rsv || root->orphan_item_inserted) { 2415 if (root->orphan_block_rsv || root->orphan_item_inserted) {
2391 trans = btrfs_join_transaction(root, 1); 2416 trans = btrfs_join_transaction(root, 1);
2392 BUG_ON(IS_ERR(trans)); 2417 if (!IS_ERR(trans))
2393 btrfs_end_transaction(trans, root); 2418 btrfs_end_transaction(trans, root);
2394 } 2419 }
2395 2420
2396 if (nr_unlink) 2421 if (nr_unlink)
2397 printk(KERN_INFO "btrfs: unlinked %d orphans\n", nr_unlink); 2422 printk(KERN_INFO "btrfs: unlinked %d orphans\n", nr_unlink);
2398 if (nr_truncate) 2423 if (nr_truncate)
2399 printk(KERN_INFO "btrfs: truncated %d orphans\n", nr_truncate); 2424 printk(KERN_INFO "btrfs: truncated %d orphans\n", nr_truncate);
2425
2426out:
2427 if (ret)
2428 printk(KERN_CRIT "btrfs: could not do orphan cleanup %d\n", ret);
2429 btrfs_free_path(path);
2430 return ret;
2400} 2431}
2401 2432
2402/* 2433/*
@@ -2563,6 +2594,13 @@ static void fill_inode_item(struct btrfs_trans_handle *trans,
2563 struct btrfs_inode_item *item, 2594 struct btrfs_inode_item *item,
2564 struct inode *inode) 2595 struct inode *inode)
2565{ 2596{
2597 if (!leaf->map_token)
2598 map_private_extent_buffer(leaf, (unsigned long)item,
2599 sizeof(struct btrfs_inode_item),
2600 &leaf->map_token, &leaf->kaddr,
2601 &leaf->map_start, &leaf->map_len,
2602 KM_USER1);
2603
2566 btrfs_set_inode_uid(leaf, item, inode->i_uid); 2604 btrfs_set_inode_uid(leaf, item, inode->i_uid);
2567 btrfs_set_inode_gid(leaf, item, inode->i_gid); 2605 btrfs_set_inode_gid(leaf, item, inode->i_gid);
2568 btrfs_set_inode_size(leaf, item, BTRFS_I(inode)->disk_i_size); 2606 btrfs_set_inode_size(leaf, item, BTRFS_I(inode)->disk_i_size);
@@ -2591,6 +2629,11 @@ static void fill_inode_item(struct btrfs_trans_handle *trans,
2591 btrfs_set_inode_rdev(leaf, item, inode->i_rdev); 2629 btrfs_set_inode_rdev(leaf, item, inode->i_rdev);
2592 btrfs_set_inode_flags(leaf, item, BTRFS_I(inode)->flags); 2630 btrfs_set_inode_flags(leaf, item, BTRFS_I(inode)->flags);
2593 btrfs_set_inode_block_group(leaf, item, BTRFS_I(inode)->block_group); 2631 btrfs_set_inode_block_group(leaf, item, BTRFS_I(inode)->block_group);
2632
2633 if (leaf->map_token) {
2634 unmap_extent_buffer(leaf, leaf->map_token, KM_USER1);
2635 leaf->map_token = NULL;
2636 }
2594} 2637}
2595 2638
2596/* 2639/*
@@ -2635,10 +2678,10 @@ failed:
2635 * recovery code. It remove a link in a directory with a given name, and 2678 * recovery code. It remove a link in a directory with a given name, and
2636 * also drops the back refs in the inode to the directory 2679 * also drops the back refs in the inode to the directory
2637 */ 2680 */
2638int btrfs_unlink_inode(struct btrfs_trans_handle *trans, 2681static int __btrfs_unlink_inode(struct btrfs_trans_handle *trans,
2639 struct btrfs_root *root, 2682 struct btrfs_root *root,
2640 struct inode *dir, struct inode *inode, 2683 struct inode *dir, struct inode *inode,
2641 const char *name, int name_len) 2684 const char *name, int name_len)
2642{ 2685{
2643 struct btrfs_path *path; 2686 struct btrfs_path *path;
2644 int ret = 0; 2687 int ret = 0;
@@ -2710,12 +2753,25 @@ err:
2710 btrfs_i_size_write(dir, dir->i_size - name_len * 2); 2753 btrfs_i_size_write(dir, dir->i_size - name_len * 2);
2711 inode->i_ctime = dir->i_mtime = dir->i_ctime = CURRENT_TIME; 2754 inode->i_ctime = dir->i_mtime = dir->i_ctime = CURRENT_TIME;
2712 btrfs_update_inode(trans, root, dir); 2755 btrfs_update_inode(trans, root, dir);
2713 btrfs_drop_nlink(inode);
2714 ret = btrfs_update_inode(trans, root, inode);
2715out: 2756out:
2716 return ret; 2757 return ret;
2717} 2758}
2718 2759
2760int btrfs_unlink_inode(struct btrfs_trans_handle *trans,
2761 struct btrfs_root *root,
2762 struct inode *dir, struct inode *inode,
2763 const char *name, int name_len)
2764{
2765 int ret;
2766 ret = __btrfs_unlink_inode(trans, root, dir, inode, name, name_len);
2767 if (!ret) {
2768 btrfs_drop_nlink(inode);
2769 ret = btrfs_update_inode(trans, root, inode);
2770 }
2771 return ret;
2772}
2773
2774
2719/* helper to check if there is any shared block in the path */ 2775/* helper to check if there is any shared block in the path */
2720static int check_path_shared(struct btrfs_root *root, 2776static int check_path_shared(struct btrfs_root *root,
2721 struct btrfs_path *path) 2777 struct btrfs_path *path)
@@ -3537,7 +3593,13 @@ out:
3537 return ret; 3593 return ret;
3538} 3594}
3539 3595
3540int btrfs_cont_expand(struct inode *inode, loff_t size) 3596/*
3597 * This function puts in dummy file extents for the area we're creating a hole
3598 * for. So if we are truncating this file to a larger size we need to insert
3599 * these file extents so that btrfs_get_extent will return a EXTENT_MAP_HOLE for
3600 * the range between oldsize and size
3601 */
3602int btrfs_cont_expand(struct inode *inode, loff_t oldsize, loff_t size)
3541{ 3603{
3542 struct btrfs_trans_handle *trans; 3604 struct btrfs_trans_handle *trans;
3543 struct btrfs_root *root = BTRFS_I(inode)->root; 3605 struct btrfs_root *root = BTRFS_I(inode)->root;
@@ -3545,7 +3607,7 @@ int btrfs_cont_expand(struct inode *inode, loff_t size)
3545 struct extent_map *em = NULL; 3607 struct extent_map *em = NULL;
3546 struct extent_state *cached_state = NULL; 3608 struct extent_state *cached_state = NULL;
3547 u64 mask = root->sectorsize - 1; 3609 u64 mask = root->sectorsize - 1;
3548 u64 hole_start = (inode->i_size + mask) & ~mask; 3610 u64 hole_start = (oldsize + mask) & ~mask;
3549 u64 block_end = (size + mask) & ~mask; 3611 u64 block_end = (size + mask) & ~mask;
3550 u64 last_byte; 3612 u64 last_byte;
3551 u64 cur_offset; 3613 u64 cur_offset;
@@ -3590,13 +3652,15 @@ int btrfs_cont_expand(struct inode *inode, loff_t size)
3590 err = btrfs_drop_extents(trans, inode, cur_offset, 3652 err = btrfs_drop_extents(trans, inode, cur_offset,
3591 cur_offset + hole_size, 3653 cur_offset + hole_size,
3592 &hint_byte, 1); 3654 &hint_byte, 1);
3593 BUG_ON(err); 3655 if (err)
3656 break;
3594 3657
3595 err = btrfs_insert_file_extent(trans, root, 3658 err = btrfs_insert_file_extent(trans, root,
3596 inode->i_ino, cur_offset, 0, 3659 inode->i_ino, cur_offset, 0,
3597 0, hole_size, 0, hole_size, 3660 0, hole_size, 0, hole_size,
3598 0, 0, 0); 3661 0, 0, 0);
3599 BUG_ON(err); 3662 if (err)
3663 break;
3600 3664
3601 btrfs_drop_extent_cache(inode, hole_start, 3665 btrfs_drop_extent_cache(inode, hole_start,
3602 last_byte - 1, 0); 3666 last_byte - 1, 0);
@@ -3616,81 +3680,41 @@ int btrfs_cont_expand(struct inode *inode, loff_t size)
3616 return err; 3680 return err;
3617} 3681}
3618 3682
3619static int btrfs_setattr_size(struct inode *inode, struct iattr *attr) 3683static int btrfs_setsize(struct inode *inode, loff_t newsize)
3620{ 3684{
3621 struct btrfs_root *root = BTRFS_I(inode)->root; 3685 loff_t oldsize = i_size_read(inode);
3622 struct btrfs_trans_handle *trans;
3623 unsigned long nr;
3624 int ret; 3686 int ret;
3625 3687
3626 if (attr->ia_size == inode->i_size) 3688 if (newsize == oldsize)
3627 return 0; 3689 return 0;
3628 3690
3629 if (attr->ia_size > inode->i_size) { 3691 if (newsize > oldsize) {
3630 unsigned long limit; 3692 i_size_write(inode, newsize);
3631 limit = current->signal->rlim[RLIMIT_FSIZE].rlim_cur; 3693 btrfs_ordered_update_i_size(inode, i_size_read(inode), NULL);
3632 if (attr->ia_size > inode->i_sb->s_maxbytes) 3694 truncate_pagecache(inode, oldsize, newsize);
3633 return -EFBIG; 3695 ret = btrfs_cont_expand(inode, oldsize, newsize);
3634 if (limit != RLIM_INFINITY && attr->ia_size > limit) {
3635 send_sig(SIGXFSZ, current, 0);
3636 return -EFBIG;
3637 }
3638 }
3639
3640 trans = btrfs_start_transaction(root, 5);
3641 if (IS_ERR(trans))
3642 return PTR_ERR(trans);
3643
3644 btrfs_set_trans_block_group(trans, inode);
3645
3646 ret = btrfs_orphan_add(trans, inode);
3647 BUG_ON(ret);
3648
3649 nr = trans->blocks_used;
3650 btrfs_end_transaction(trans, root);
3651 btrfs_btree_balance_dirty(root, nr);
3652
3653 if (attr->ia_size > inode->i_size) {
3654 ret = btrfs_cont_expand(inode, attr->ia_size);
3655 if (ret) { 3696 if (ret) {
3656 btrfs_truncate(inode); 3697 btrfs_setsize(inode, oldsize);
3657 return ret; 3698 return ret;
3658 } 3699 }
3659 3700
3660 i_size_write(inode, attr->ia_size); 3701 mark_inode_dirty(inode);
3661 btrfs_ordered_update_i_size(inode, inode->i_size, NULL); 3702 } else {
3662 3703
3663 trans = btrfs_start_transaction(root, 0); 3704 /*
3664 BUG_ON(IS_ERR(trans)); 3705 * We're truncating a file that used to have good data down to
3665 btrfs_set_trans_block_group(trans, inode); 3706 * zero. Make sure it gets into the ordered flush list so that
3666 trans->block_rsv = root->orphan_block_rsv; 3707 * any new writes get down to disk quickly.
3667 BUG_ON(!trans->block_rsv); 3708 */
3709 if (newsize == 0)
3710 BTRFS_I(inode)->ordered_data_close = 1;
3668 3711
3669 ret = btrfs_update_inode(trans, root, inode); 3712 /* we don't support swapfiles, so vmtruncate shouldn't fail */
3670 BUG_ON(ret); 3713 truncate_setsize(inode, newsize);
3671 if (inode->i_nlink > 0) { 3714 ret = btrfs_truncate(inode);
3672 ret = btrfs_orphan_del(trans, inode);
3673 BUG_ON(ret);
3674 }
3675 nr = trans->blocks_used;
3676 btrfs_end_transaction(trans, root);
3677 btrfs_btree_balance_dirty(root, nr);
3678 return 0;
3679 } 3715 }
3680 3716
3681 /* 3717 return ret;
3682 * We're truncating a file that used to have good data down to
3683 * zero. Make sure it gets into the ordered flush list so that
3684 * any new writes get down to disk quickly.
3685 */
3686 if (attr->ia_size == 0)
3687 BTRFS_I(inode)->ordered_data_close = 1;
3688
3689 /* we don't support swapfiles, so vmtruncate shouldn't fail */
3690 ret = vmtruncate(inode, attr->ia_size);
3691 BUG_ON(ret);
3692
3693 return 0;
3694} 3718}
3695 3719
3696static int btrfs_setattr(struct dentry *dentry, struct iattr *attr) 3720static int btrfs_setattr(struct dentry *dentry, struct iattr *attr)
@@ -3707,7 +3731,7 @@ static int btrfs_setattr(struct dentry *dentry, struct iattr *attr)
3707 return err; 3731 return err;
3708 3732
3709 if (S_ISREG(inode->i_mode) && (attr->ia_valid & ATTR_SIZE)) { 3733 if (S_ISREG(inode->i_mode) && (attr->ia_valid & ATTR_SIZE)) {
3710 err = btrfs_setattr_size(inode, attr); 3734 err = btrfs_setsize(inode, attr->ia_size);
3711 if (err) 3735 if (err)
3712 return err; 3736 return err;
3713 } 3737 }
@@ -3730,6 +3754,8 @@ void btrfs_evict_inode(struct inode *inode)
3730 unsigned long nr; 3754 unsigned long nr;
3731 int ret; 3755 int ret;
3732 3756
3757 trace_btrfs_inode_evict(inode);
3758
3733 truncate_inode_pages(&inode->i_data, 0); 3759 truncate_inode_pages(&inode->i_data, 0);
3734 if (inode->i_nlink && (btrfs_root_refs(&root->root_item) != 0 || 3760 if (inode->i_nlink && (btrfs_root_refs(&root->root_item) != 0 ||
3735 root == root->fs_info->tree_root)) 3761 root == root->fs_info->tree_root))
@@ -4072,7 +4098,6 @@ struct inode *btrfs_iget(struct super_block *s, struct btrfs_key *location,
4072 BTRFS_I(inode)->root = root; 4098 BTRFS_I(inode)->root = root;
4073 memcpy(&BTRFS_I(inode)->location, location, sizeof(*location)); 4099 memcpy(&BTRFS_I(inode)->location, location, sizeof(*location));
4074 btrfs_read_locked_inode(inode); 4100 btrfs_read_locked_inode(inode);
4075
4076 inode_tree_add(inode); 4101 inode_tree_add(inode);
4077 unlock_new_inode(inode); 4102 unlock_new_inode(inode);
4078 if (new) 4103 if (new)
@@ -4147,8 +4172,10 @@ struct inode *btrfs_lookup_dentry(struct inode *dir, struct dentry *dentry)
4147 if (!IS_ERR(inode) && root != sub_root) { 4172 if (!IS_ERR(inode) && root != sub_root) {
4148 down_read(&root->fs_info->cleanup_work_sem); 4173 down_read(&root->fs_info->cleanup_work_sem);
4149 if (!(inode->i_sb->s_flags & MS_RDONLY)) 4174 if (!(inode->i_sb->s_flags & MS_RDONLY))
4150 btrfs_orphan_cleanup(sub_root); 4175 ret = btrfs_orphan_cleanup(sub_root);
4151 up_read(&root->fs_info->cleanup_work_sem); 4176 up_read(&root->fs_info->cleanup_work_sem);
4177 if (ret)
4178 inode = ERR_PTR(ret);
4152 } 4179 }
4153 4180
4154 return inode; 4181 return inode;
@@ -4196,10 +4223,8 @@ static int btrfs_real_readdir(struct file *filp, void *dirent,
4196 struct btrfs_key found_key; 4223 struct btrfs_key found_key;
4197 struct btrfs_path *path; 4224 struct btrfs_path *path;
4198 int ret; 4225 int ret;
4199 u32 nritems;
4200 struct extent_buffer *leaf; 4226 struct extent_buffer *leaf;
4201 int slot; 4227 int slot;
4202 int advance;
4203 unsigned char d_type; 4228 unsigned char d_type;
4204 int over = 0; 4229 int over = 0;
4205 u32 di_cur; 4230 u32 di_cur;
@@ -4242,27 +4267,19 @@ static int btrfs_real_readdir(struct file *filp, void *dirent,
4242 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); 4267 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
4243 if (ret < 0) 4268 if (ret < 0)
4244 goto err; 4269 goto err;
4245 advance = 0;
4246 4270
4247 while (1) { 4271 while (1) {
4248 leaf = path->nodes[0]; 4272 leaf = path->nodes[0];
4249 nritems = btrfs_header_nritems(leaf);
4250 slot = path->slots[0]; 4273 slot = path->slots[0];
4251 if (advance || slot >= nritems) { 4274 if (slot >= btrfs_header_nritems(leaf)) {
4252 if (slot >= nritems - 1) { 4275 ret = btrfs_next_leaf(root, path);
4253 ret = btrfs_next_leaf(root, path); 4276 if (ret < 0)
4254 if (ret) 4277 goto err;
4255 break; 4278 else if (ret > 0)
4256 leaf = path->nodes[0]; 4279 break;
4257 nritems = btrfs_header_nritems(leaf); 4280 continue;
4258 slot = path->slots[0];
4259 } else {
4260 slot++;
4261 path->slots[0]++;
4262 }
4263 } 4281 }
4264 4282
4265 advance = 1;
4266 item = btrfs_item_nr(leaf, slot); 4283 item = btrfs_item_nr(leaf, slot);
4267 btrfs_item_key_to_cpu(leaf, &found_key, slot); 4284 btrfs_item_key_to_cpu(leaf, &found_key, slot);
4268 4285
@@ -4271,7 +4288,7 @@ static int btrfs_real_readdir(struct file *filp, void *dirent,
4271 if (btrfs_key_type(&found_key) != key_type) 4288 if (btrfs_key_type(&found_key) != key_type)
4272 break; 4289 break;
4273 if (found_key.offset < filp->f_pos) 4290 if (found_key.offset < filp->f_pos)
4274 continue; 4291 goto next;
4275 4292
4276 filp->f_pos = found_key.offset; 4293 filp->f_pos = found_key.offset;
4277 4294
@@ -4282,6 +4299,9 @@ static int btrfs_real_readdir(struct file *filp, void *dirent,
4282 while (di_cur < di_total) { 4299 while (di_cur < di_total) {
4283 struct btrfs_key location; 4300 struct btrfs_key location;
4284 4301
4302 if (verify_dir_item(root, leaf, di))
4303 break;
4304
4285 name_len = btrfs_dir_name_len(leaf, di); 4305 name_len = btrfs_dir_name_len(leaf, di);
4286 if (name_len <= sizeof(tmp_name)) { 4306 if (name_len <= sizeof(tmp_name)) {
4287 name_ptr = tmp_name; 4307 name_ptr = tmp_name;
@@ -4321,6 +4341,8 @@ skip:
4321 di_cur += di_len; 4341 di_cur += di_len;
4322 di = (struct btrfs_dir_item *)((char *)di + di_len); 4342 di = (struct btrfs_dir_item *)((char *)di + di_len);
4323 } 4343 }
4344next:
4345 path->slots[0]++;
4324 } 4346 }
4325 4347
4326 /* Reached end of directory/root. Bump pos past the last item. */ 4348 /* Reached end of directory/root. Bump pos past the last item. */
@@ -4513,12 +4535,17 @@ static struct inode *btrfs_new_inode(struct btrfs_trans_handle *trans,
4513 BUG_ON(!path); 4535 BUG_ON(!path);
4514 4536
4515 inode = new_inode(root->fs_info->sb); 4537 inode = new_inode(root->fs_info->sb);
4516 if (!inode) 4538 if (!inode) {
4539 btrfs_free_path(path);
4517 return ERR_PTR(-ENOMEM); 4540 return ERR_PTR(-ENOMEM);
4541 }
4518 4542
4519 if (dir) { 4543 if (dir) {
4544 trace_btrfs_inode_request(dir);
4545
4520 ret = btrfs_set_inode_index(dir, index); 4546 ret = btrfs_set_inode_index(dir, index);
4521 if (ret) { 4547 if (ret) {
4548 btrfs_free_path(path);
4522 iput(inode); 4549 iput(inode);
4523 return ERR_PTR(ret); 4550 return ERR_PTR(ret);
4524 } 4551 }
@@ -4585,12 +4612,16 @@ static struct inode *btrfs_new_inode(struct btrfs_trans_handle *trans,
4585 if ((mode & S_IFREG)) { 4612 if ((mode & S_IFREG)) {
4586 if (btrfs_test_opt(root, NODATASUM)) 4613 if (btrfs_test_opt(root, NODATASUM))
4587 BTRFS_I(inode)->flags |= BTRFS_INODE_NODATASUM; 4614 BTRFS_I(inode)->flags |= BTRFS_INODE_NODATASUM;
4588 if (btrfs_test_opt(root, NODATACOW)) 4615 if (btrfs_test_opt(root, NODATACOW) ||
4616 (BTRFS_I(dir)->flags & BTRFS_INODE_NODATACOW))
4589 BTRFS_I(inode)->flags |= BTRFS_INODE_NODATACOW; 4617 BTRFS_I(inode)->flags |= BTRFS_INODE_NODATACOW;
4590 } 4618 }
4591 4619
4592 insert_inode_hash(inode); 4620 insert_inode_hash(inode);
4593 inode_tree_add(inode); 4621 inode_tree_add(inode);
4622
4623 trace_btrfs_inode_new(inode);
4624
4594 return inode; 4625 return inode;
4595fail: 4626fail:
4596 if (dir) 4627 if (dir)
@@ -4701,9 +4732,10 @@ static int btrfs_mknod(struct inode *dir, struct dentry *dentry,
4701 inode = btrfs_new_inode(trans, root, dir, dentry->d_name.name, 4732 inode = btrfs_new_inode(trans, root, dir, dentry->d_name.name,
4702 dentry->d_name.len, dir->i_ino, objectid, 4733 dentry->d_name.len, dir->i_ino, objectid,
4703 BTRFS_I(dir)->block_group, mode, &index); 4734 BTRFS_I(dir)->block_group, mode, &index);
4704 err = PTR_ERR(inode); 4735 if (IS_ERR(inode)) {
4705 if (IS_ERR(inode)) 4736 err = PTR_ERR(inode);
4706 goto out_unlock; 4737 goto out_unlock;
4738 }
4707 4739
4708 err = btrfs_init_inode_security(trans, inode, dir, &dentry->d_name); 4740 err = btrfs_init_inode_security(trans, inode, dir, &dentry->d_name);
4709 if (err) { 4741 if (err) {
@@ -4762,9 +4794,10 @@ static int btrfs_create(struct inode *dir, struct dentry *dentry,
4762 inode = btrfs_new_inode(trans, root, dir, dentry->d_name.name, 4794 inode = btrfs_new_inode(trans, root, dir, dentry->d_name.name,
4763 dentry->d_name.len, dir->i_ino, objectid, 4795 dentry->d_name.len, dir->i_ino, objectid,
4764 BTRFS_I(dir)->block_group, mode, &index); 4796 BTRFS_I(dir)->block_group, mode, &index);
4765 err = PTR_ERR(inode); 4797 if (IS_ERR(inode)) {
4766 if (IS_ERR(inode)) 4798 err = PTR_ERR(inode);
4767 goto out_unlock; 4799 goto out_unlock;
4800 }
4768 4801
4769 err = btrfs_init_inode_security(trans, inode, dir, &dentry->d_name); 4802 err = btrfs_init_inode_security(trans, inode, dir, &dentry->d_name);
4770 if (err) { 4803 if (err) {
@@ -4809,10 +4842,10 @@ static int btrfs_link(struct dentry *old_dentry, struct inode *dir,
4809 4842
4810 /* do not allow sys_link's with other subvols of the same device */ 4843 /* do not allow sys_link's with other subvols of the same device */
4811 if (root->objectid != BTRFS_I(inode)->root->objectid) 4844 if (root->objectid != BTRFS_I(inode)->root->objectid)
4812 return -EPERM; 4845 return -EXDEV;
4813 4846
4814 btrfs_inc_nlink(inode); 4847 if (inode->i_nlink == ~0U)
4815 inode->i_ctime = CURRENT_TIME; 4848 return -EMLINK;
4816 4849
4817 err = btrfs_set_inode_index(dir, &index); 4850 err = btrfs_set_inode_index(dir, &index);
4818 if (err) 4851 if (err)
@@ -4829,6 +4862,9 @@ static int btrfs_link(struct dentry *old_dentry, struct inode *dir,
4829 goto fail; 4862 goto fail;
4830 } 4863 }
4831 4864
4865 btrfs_inc_nlink(inode);
4866 inode->i_ctime = CURRENT_TIME;
4867
4832 btrfs_set_trans_block_group(trans, dir); 4868 btrfs_set_trans_block_group(trans, dir);
4833 ihold(inode); 4869 ihold(inode);
4834 4870
@@ -4966,6 +5002,8 @@ static noinline int uncompress_inline(struct btrfs_path *path,
4966 inline_size = btrfs_file_extent_inline_item_len(leaf, 5002 inline_size = btrfs_file_extent_inline_item_len(leaf,
4967 btrfs_item_nr(leaf, path->slots[0])); 5003 btrfs_item_nr(leaf, path->slots[0]));
4968 tmp = kmalloc(inline_size, GFP_NOFS); 5004 tmp = kmalloc(inline_size, GFP_NOFS);
5005 if (!tmp)
5006 return -ENOMEM;
4969 ptr = btrfs_file_extent_inline_start(item); 5007 ptr = btrfs_file_extent_inline_start(item);
4970 5008
4971 read_extent_buffer(leaf, tmp, ptr, inline_size); 5009 read_extent_buffer(leaf, tmp, ptr, inline_size);
@@ -5198,7 +5236,7 @@ again:
5198 btrfs_mark_buffer_dirty(leaf); 5236 btrfs_mark_buffer_dirty(leaf);
5199 } 5237 }
5200 set_extent_uptodate(io_tree, em->start, 5238 set_extent_uptodate(io_tree, em->start,
5201 extent_map_end(em) - 1, GFP_NOFS); 5239 extent_map_end(em) - 1, NULL, GFP_NOFS);
5202 goto insert; 5240 goto insert;
5203 } else { 5241 } else {
5204 printk(KERN_ERR "btrfs unknown found_type %d\n", found_type); 5242 printk(KERN_ERR "btrfs unknown found_type %d\n", found_type);
@@ -5265,6 +5303,9 @@ insert:
5265 } 5303 }
5266 write_unlock(&em_tree->lock); 5304 write_unlock(&em_tree->lock);
5267out: 5305out:
5306
5307 trace_btrfs_get_extent(root, em);
5308
5268 if (path) 5309 if (path)
5269 btrfs_free_path(path); 5310 btrfs_free_path(path);
5270 if (trans) { 5311 if (trans) {
@@ -5402,17 +5443,30 @@ out:
5402} 5443}
5403 5444
5404static struct extent_map *btrfs_new_extent_direct(struct inode *inode, 5445static struct extent_map *btrfs_new_extent_direct(struct inode *inode,
5446 struct extent_map *em,
5405 u64 start, u64 len) 5447 u64 start, u64 len)
5406{ 5448{
5407 struct btrfs_root *root = BTRFS_I(inode)->root; 5449 struct btrfs_root *root = BTRFS_I(inode)->root;
5408 struct btrfs_trans_handle *trans; 5450 struct btrfs_trans_handle *trans;
5409 struct extent_map *em;
5410 struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree; 5451 struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree;
5411 struct btrfs_key ins; 5452 struct btrfs_key ins;
5412 u64 alloc_hint; 5453 u64 alloc_hint;
5413 int ret; 5454 int ret;
5455 bool insert = false;
5414 5456
5415 btrfs_drop_extent_cache(inode, start, start + len - 1, 0); 5457 /*
5458 * Ok if the extent map we looked up is a hole and is for the exact
5459 * range we want, there is no reason to allocate a new one, however if
5460 * it is not right then we need to free this one and drop the cache for
5461 * our range.
5462 */
5463 if (em->block_start != EXTENT_MAP_HOLE || em->start != start ||
5464 em->len != len) {
5465 free_extent_map(em);
5466 em = NULL;
5467 insert = true;
5468 btrfs_drop_extent_cache(inode, start, start + len - 1, 0);
5469 }
5416 5470
5417 trans = btrfs_join_transaction(root, 0); 5471 trans = btrfs_join_transaction(root, 0);
5418 if (IS_ERR(trans)) 5472 if (IS_ERR(trans))
@@ -5428,10 +5482,12 @@ static struct extent_map *btrfs_new_extent_direct(struct inode *inode,
5428 goto out; 5482 goto out;
5429 } 5483 }
5430 5484
5431 em = alloc_extent_map(GFP_NOFS);
5432 if (!em) { 5485 if (!em) {
5433 em = ERR_PTR(-ENOMEM); 5486 em = alloc_extent_map(GFP_NOFS);
5434 goto out; 5487 if (!em) {
5488 em = ERR_PTR(-ENOMEM);
5489 goto out;
5490 }
5435 } 5491 }
5436 5492
5437 em->start = start; 5493 em->start = start;
@@ -5441,9 +5497,15 @@ static struct extent_map *btrfs_new_extent_direct(struct inode *inode,
5441 em->block_start = ins.objectid; 5497 em->block_start = ins.objectid;
5442 em->block_len = ins.offset; 5498 em->block_len = ins.offset;
5443 em->bdev = root->fs_info->fs_devices->latest_bdev; 5499 em->bdev = root->fs_info->fs_devices->latest_bdev;
5500
5501 /*
5502 * We need to do this because if we're using the original em we searched
5503 * for, we could have EXTENT_FLAG_VACANCY set, and we don't want that.
5504 */
5505 em->flags = 0;
5444 set_bit(EXTENT_FLAG_PINNED, &em->flags); 5506 set_bit(EXTENT_FLAG_PINNED, &em->flags);
5445 5507
5446 while (1) { 5508 while (insert) {
5447 write_lock(&em_tree->lock); 5509 write_lock(&em_tree->lock);
5448 ret = add_extent_mapping(em_tree, em); 5510 ret = add_extent_mapping(em_tree, em);
5449 write_unlock(&em_tree->lock); 5511 write_unlock(&em_tree->lock);
@@ -5661,8 +5723,7 @@ must_cow:
5661 * it above 5723 * it above
5662 */ 5724 */
5663 len = bh_result->b_size; 5725 len = bh_result->b_size;
5664 free_extent_map(em); 5726 em = btrfs_new_extent_direct(inode, em, start, len);
5665 em = btrfs_new_extent_direct(inode, start, len);
5666 if (IS_ERR(em)) 5727 if (IS_ERR(em))
5667 return PTR_ERR(em); 5728 return PTR_ERR(em);
5668 len = min(len, em->len - (start - em->start)); 5729 len = min(len, em->len - (start - em->start));
@@ -5748,6 +5809,10 @@ static void btrfs_endio_direct_read(struct bio *bio, int err)
5748 5809
5749 kfree(dip->csums); 5810 kfree(dip->csums);
5750 kfree(dip); 5811 kfree(dip);
5812
5813 /* If we had a csum failure make sure to clear the uptodate flag */
5814 if (err)
5815 clear_bit(BIO_UPTODATE, &bio->bi_flags);
5751 dio_end_io(bio, err); 5816 dio_end_io(bio, err);
5752} 5817}
5753 5818
@@ -5821,8 +5886,10 @@ again:
5821 } 5886 }
5822 5887
5823 add_pending_csums(trans, inode, ordered->file_offset, &ordered->list); 5888 add_pending_csums(trans, inode, ordered->file_offset, &ordered->list);
5824 btrfs_ordered_update_i_size(inode, 0, ordered); 5889 ret = btrfs_ordered_update_i_size(inode, 0, ordered);
5825 btrfs_update_inode(trans, root, inode); 5890 if (!ret)
5891 btrfs_update_inode(trans, root, inode);
5892 ret = 0;
5826out_unlock: 5893out_unlock:
5827 unlock_extent_cached(&BTRFS_I(inode)->io_tree, ordered->file_offset, 5894 unlock_extent_cached(&BTRFS_I(inode)->io_tree, ordered->file_offset,
5828 ordered->file_offset + ordered->len - 1, 5895 ordered->file_offset + ordered->len - 1,
@@ -5849,6 +5916,10 @@ out_done:
5849 5916
5850 kfree(dip->csums); 5917 kfree(dip->csums);
5851 kfree(dip); 5918 kfree(dip);
5919
5920 /* If we had an error make sure to clear the uptodate flag */
5921 if (err)
5922 clear_bit(BIO_UPTODATE, &bio->bi_flags);
5852 dio_end_io(bio, err); 5923 dio_end_io(bio, err);
5853} 5924}
5854 5925
@@ -5904,7 +5975,7 @@ static struct bio *btrfs_dio_bio_alloc(struct block_device *bdev,
5904 5975
5905static inline int __btrfs_submit_dio_bio(struct bio *bio, struct inode *inode, 5976static inline int __btrfs_submit_dio_bio(struct bio *bio, struct inode *inode,
5906 int rw, u64 file_offset, int skip_sum, 5977 int rw, u64 file_offset, int skip_sum,
5907 u32 *csums) 5978 u32 *csums, int async_submit)
5908{ 5979{
5909 int write = rw & REQ_WRITE; 5980 int write = rw & REQ_WRITE;
5910 struct btrfs_root *root = BTRFS_I(inode)->root; 5981 struct btrfs_root *root = BTRFS_I(inode)->root;
@@ -5915,18 +5986,33 @@ static inline int __btrfs_submit_dio_bio(struct bio *bio, struct inode *inode,
5915 if (ret) 5986 if (ret)
5916 goto err; 5987 goto err;
5917 5988
5918 if (write && !skip_sum) { 5989 if (skip_sum)
5990 goto map;
5991
5992 if (write && async_submit) {
5919 ret = btrfs_wq_submit_bio(root->fs_info, 5993 ret = btrfs_wq_submit_bio(root->fs_info,
5920 inode, rw, bio, 0, 0, 5994 inode, rw, bio, 0, 0,
5921 file_offset, 5995 file_offset,
5922 __btrfs_submit_bio_start_direct_io, 5996 __btrfs_submit_bio_start_direct_io,
5923 __btrfs_submit_bio_done); 5997 __btrfs_submit_bio_done);
5924 goto err; 5998 goto err;
5925 } else if (!skip_sum) 5999 } else if (write) {
5926 btrfs_lookup_bio_sums_dio(root, inode, bio, 6000 /*
6001 * If we aren't doing async submit, calculate the csum of the
6002 * bio now.
6003 */
6004 ret = btrfs_csum_one_bio(root, inode, bio, file_offset, 1);
6005 if (ret)
6006 goto err;
6007 } else if (!skip_sum) {
6008 ret = btrfs_lookup_bio_sums_dio(root, inode, bio,
5927 file_offset, csums); 6009 file_offset, csums);
6010 if (ret)
6011 goto err;
6012 }
5928 6013
5929 ret = btrfs_map_bio(root, rw, bio, 0, 1); 6014map:
6015 ret = btrfs_map_bio(root, rw, bio, 0, async_submit);
5930err: 6016err:
5931 bio_put(bio); 6017 bio_put(bio);
5932 return ret; 6018 return ret;
@@ -5948,22 +6034,30 @@ static int btrfs_submit_direct_hook(int rw, struct btrfs_dio_private *dip,
5948 int nr_pages = 0; 6034 int nr_pages = 0;
5949 u32 *csums = dip->csums; 6035 u32 *csums = dip->csums;
5950 int ret = 0; 6036 int ret = 0;
5951 6037 int async_submit = 0;
5952 bio = btrfs_dio_bio_alloc(orig_bio->bi_bdev, start_sector, GFP_NOFS); 6038 int write = rw & REQ_WRITE;
5953 if (!bio)
5954 return -ENOMEM;
5955 bio->bi_private = dip;
5956 bio->bi_end_io = btrfs_end_dio_bio;
5957 atomic_inc(&dip->pending_bios);
5958 6039
5959 map_length = orig_bio->bi_size; 6040 map_length = orig_bio->bi_size;
5960 ret = btrfs_map_block(map_tree, READ, start_sector << 9, 6041 ret = btrfs_map_block(map_tree, READ, start_sector << 9,
5961 &map_length, NULL, 0); 6042 &map_length, NULL, 0);
5962 if (ret) { 6043 if (ret) {
5963 bio_put(bio); 6044 bio_put(orig_bio);
5964 return -EIO; 6045 return -EIO;
5965 } 6046 }
5966 6047
6048 if (map_length >= orig_bio->bi_size) {
6049 bio = orig_bio;
6050 goto submit;
6051 }
6052
6053 async_submit = 1;
6054 bio = btrfs_dio_bio_alloc(orig_bio->bi_bdev, start_sector, GFP_NOFS);
6055 if (!bio)
6056 return -ENOMEM;
6057 bio->bi_private = dip;
6058 bio->bi_end_io = btrfs_end_dio_bio;
6059 atomic_inc(&dip->pending_bios);
6060
5967 while (bvec <= (orig_bio->bi_io_vec + orig_bio->bi_vcnt - 1)) { 6061 while (bvec <= (orig_bio->bi_io_vec + orig_bio->bi_vcnt - 1)) {
5968 if (unlikely(map_length < submit_len + bvec->bv_len || 6062 if (unlikely(map_length < submit_len + bvec->bv_len ||
5969 bio_add_page(bio, bvec->bv_page, bvec->bv_len, 6063 bio_add_page(bio, bvec->bv_page, bvec->bv_len,
@@ -5977,14 +6071,15 @@ static int btrfs_submit_direct_hook(int rw, struct btrfs_dio_private *dip,
5977 atomic_inc(&dip->pending_bios); 6071 atomic_inc(&dip->pending_bios);
5978 ret = __btrfs_submit_dio_bio(bio, inode, rw, 6072 ret = __btrfs_submit_dio_bio(bio, inode, rw,
5979 file_offset, skip_sum, 6073 file_offset, skip_sum,
5980 csums); 6074 csums, async_submit);
5981 if (ret) { 6075 if (ret) {
5982 bio_put(bio); 6076 bio_put(bio);
5983 atomic_dec(&dip->pending_bios); 6077 atomic_dec(&dip->pending_bios);
5984 goto out_err; 6078 goto out_err;
5985 } 6079 }
5986 6080
5987 if (!skip_sum) 6081 /* Write's use the ordered csums */
6082 if (!write && !skip_sum)
5988 csums = csums + nr_pages; 6083 csums = csums + nr_pages;
5989 start_sector += submit_len >> 9; 6084 start_sector += submit_len >> 9;
5990 file_offset += submit_len; 6085 file_offset += submit_len;
@@ -6013,8 +6108,9 @@ static int btrfs_submit_direct_hook(int rw, struct btrfs_dio_private *dip,
6013 } 6108 }
6014 } 6109 }
6015 6110
6111submit:
6016 ret = __btrfs_submit_dio_bio(bio, inode, rw, file_offset, skip_sum, 6112 ret = __btrfs_submit_dio_bio(bio, inode, rw, file_offset, skip_sum,
6017 csums); 6113 csums, async_submit);
6018 if (!ret) 6114 if (!ret)
6019 return 0; 6115 return 0;
6020 6116
@@ -6052,7 +6148,8 @@ static void btrfs_submit_direct(int rw, struct bio *bio, struct inode *inode,
6052 } 6148 }
6053 dip->csums = NULL; 6149 dip->csums = NULL;
6054 6150
6055 if (!skip_sum) { 6151 /* Write's use the ordered csum stuff, so we don't need dip->csums */
6152 if (!write && !skip_sum) {
6056 dip->csums = kmalloc(sizeof(u32) * bio->bi_vcnt, GFP_NOFS); 6153 dip->csums = kmalloc(sizeof(u32) * bio->bi_vcnt, GFP_NOFS);
6057 if (!dip->csums) { 6154 if (!dip->csums) {
6058 kfree(dip); 6155 kfree(dip);
@@ -6108,6 +6205,7 @@ static ssize_t check_direct_IO(struct btrfs_root *root, int rw, struct kiocb *io
6108 unsigned long nr_segs) 6205 unsigned long nr_segs)
6109{ 6206{
6110 int seg; 6207 int seg;
6208 int i;
6111 size_t size; 6209 size_t size;
6112 unsigned long addr; 6210 unsigned long addr;
6113 unsigned blocksize_mask = root->sectorsize - 1; 6211 unsigned blocksize_mask = root->sectorsize - 1;
@@ -6122,8 +6220,22 @@ static ssize_t check_direct_IO(struct btrfs_root *root, int rw, struct kiocb *io
6122 addr = (unsigned long)iov[seg].iov_base; 6220 addr = (unsigned long)iov[seg].iov_base;
6123 size = iov[seg].iov_len; 6221 size = iov[seg].iov_len;
6124 end += size; 6222 end += size;
6125 if ((addr & blocksize_mask) || (size & blocksize_mask)) 6223 if ((addr & blocksize_mask) || (size & blocksize_mask))
6126 goto out; 6224 goto out;
6225
6226 /* If this is a write we don't need to check anymore */
6227 if (rw & WRITE)
6228 continue;
6229
6230 /*
6231 * Check to make sure we don't have duplicate iov_base's in this
6232 * iovec, if so return EINVAL, otherwise we'll get csum errors
6233 * when reading back.
6234 */
6235 for (i = seg + 1; i < nr_segs; i++) {
6236 if (iov[seg].iov_base == iov[i].iov_base)
6237 goto out;
6238 }
6127 } 6239 }
6128 retval = 0; 6240 retval = 0;
6129out: 6241out:
@@ -6474,28 +6586,42 @@ out:
6474 return ret; 6586 return ret;
6475} 6587}
6476 6588
6477static void btrfs_truncate(struct inode *inode) 6589static int btrfs_truncate(struct inode *inode)
6478{ 6590{
6479 struct btrfs_root *root = BTRFS_I(inode)->root; 6591 struct btrfs_root *root = BTRFS_I(inode)->root;
6480 int ret; 6592 int ret;
6593 int err = 0;
6481 struct btrfs_trans_handle *trans; 6594 struct btrfs_trans_handle *trans;
6482 unsigned long nr; 6595 unsigned long nr;
6483 u64 mask = root->sectorsize - 1; 6596 u64 mask = root->sectorsize - 1;
6484 6597
6485 if (!S_ISREG(inode->i_mode)) {
6486 WARN_ON(1);
6487 return;
6488 }
6489
6490 ret = btrfs_truncate_page(inode->i_mapping, inode->i_size); 6598 ret = btrfs_truncate_page(inode->i_mapping, inode->i_size);
6491 if (ret) 6599 if (ret)
6492 return; 6600 return ret;
6493 6601
6494 btrfs_wait_ordered_range(inode, inode->i_size & (~mask), (u64)-1); 6602 btrfs_wait_ordered_range(inode, inode->i_size & (~mask), (u64)-1);
6495 btrfs_ordered_update_i_size(inode, inode->i_size, NULL); 6603 btrfs_ordered_update_i_size(inode, inode->i_size, NULL);
6496 6604
6605 trans = btrfs_start_transaction(root, 5);
6606 if (IS_ERR(trans))
6607 return PTR_ERR(trans);
6608
6609 btrfs_set_trans_block_group(trans, inode);
6610
6611 ret = btrfs_orphan_add(trans, inode);
6612 if (ret) {
6613 btrfs_end_transaction(trans, root);
6614 return ret;
6615 }
6616
6617 nr = trans->blocks_used;
6618 btrfs_end_transaction(trans, root);
6619 btrfs_btree_balance_dirty(root, nr);
6620
6621 /* Now start a transaction for the truncate */
6497 trans = btrfs_start_transaction(root, 0); 6622 trans = btrfs_start_transaction(root, 0);
6498 BUG_ON(IS_ERR(trans)); 6623 if (IS_ERR(trans))
6624 return PTR_ERR(trans);
6499 btrfs_set_trans_block_group(trans, inode); 6625 btrfs_set_trans_block_group(trans, inode);
6500 trans->block_rsv = root->orphan_block_rsv; 6626 trans->block_rsv = root->orphan_block_rsv;
6501 6627
@@ -6522,29 +6648,38 @@ static void btrfs_truncate(struct inode *inode)
6522 while (1) { 6648 while (1) {
6523 if (!trans) { 6649 if (!trans) {
6524 trans = btrfs_start_transaction(root, 0); 6650 trans = btrfs_start_transaction(root, 0);
6525 BUG_ON(IS_ERR(trans)); 6651 if (IS_ERR(trans))
6652 return PTR_ERR(trans);
6526 btrfs_set_trans_block_group(trans, inode); 6653 btrfs_set_trans_block_group(trans, inode);
6527 trans->block_rsv = root->orphan_block_rsv; 6654 trans->block_rsv = root->orphan_block_rsv;
6528 } 6655 }
6529 6656
6530 ret = btrfs_block_rsv_check(trans, root, 6657 ret = btrfs_block_rsv_check(trans, root,
6531 root->orphan_block_rsv, 0, 5); 6658 root->orphan_block_rsv, 0, 5);
6532 if (ret) { 6659 if (ret == -EAGAIN) {
6533 BUG_ON(ret != -EAGAIN);
6534 ret = btrfs_commit_transaction(trans, root); 6660 ret = btrfs_commit_transaction(trans, root);
6535 BUG_ON(ret); 6661 if (ret)
6662 return ret;
6536 trans = NULL; 6663 trans = NULL;
6537 continue; 6664 continue;
6665 } else if (ret) {
6666 err = ret;
6667 break;
6538 } 6668 }
6539 6669
6540 ret = btrfs_truncate_inode_items(trans, root, inode, 6670 ret = btrfs_truncate_inode_items(trans, root, inode,
6541 inode->i_size, 6671 inode->i_size,
6542 BTRFS_EXTENT_DATA_KEY); 6672 BTRFS_EXTENT_DATA_KEY);
6543 if (ret != -EAGAIN) 6673 if (ret != -EAGAIN) {
6674 err = ret;
6544 break; 6675 break;
6676 }
6545 6677
6546 ret = btrfs_update_inode(trans, root, inode); 6678 ret = btrfs_update_inode(trans, root, inode);
6547 BUG_ON(ret); 6679 if (ret) {
6680 err = ret;
6681 break;
6682 }
6548 6683
6549 nr = trans->blocks_used; 6684 nr = trans->blocks_used;
6550 btrfs_end_transaction(trans, root); 6685 btrfs_end_transaction(trans, root);
@@ -6554,16 +6689,27 @@ static void btrfs_truncate(struct inode *inode)
6554 6689
6555 if (ret == 0 && inode->i_nlink > 0) { 6690 if (ret == 0 && inode->i_nlink > 0) {
6556 ret = btrfs_orphan_del(trans, inode); 6691 ret = btrfs_orphan_del(trans, inode);
6557 BUG_ON(ret); 6692 if (ret)
6693 err = ret;
6694 } else if (ret && inode->i_nlink > 0) {
6695 /*
6696 * Failed to do the truncate, remove us from the in memory
6697 * orphan list.
6698 */
6699 ret = btrfs_orphan_del(NULL, inode);
6558 } 6700 }
6559 6701
6560 ret = btrfs_update_inode(trans, root, inode); 6702 ret = btrfs_update_inode(trans, root, inode);
6561 BUG_ON(ret); 6703 if (ret && !err)
6704 err = ret;
6562 6705
6563 nr = trans->blocks_used; 6706 nr = trans->blocks_used;
6564 ret = btrfs_end_transaction_throttle(trans, root); 6707 ret = btrfs_end_transaction_throttle(trans, root);
6565 BUG_ON(ret); 6708 if (ret && !err)
6709 err = ret;
6566 btrfs_btree_balance_dirty(root, nr); 6710 btrfs_btree_balance_dirty(root, nr);
6711
6712 return err;
6567} 6713}
6568 6714
6569/* 6715/*
@@ -6630,9 +6776,8 @@ struct inode *btrfs_alloc_inode(struct super_block *sb)
6630 ei->index_cnt = (u64)-1; 6776 ei->index_cnt = (u64)-1;
6631 ei->last_unlink_trans = 0; 6777 ei->last_unlink_trans = 0;
6632 6778
6633 spin_lock_init(&ei->accounting_lock);
6634 atomic_set(&ei->outstanding_extents, 0); 6779 atomic_set(&ei->outstanding_extents, 0);
6635 ei->reserved_extents = 0; 6780 atomic_set(&ei->reserved_extents, 0);
6636 6781
6637 ei->ordered_data_close = 0; 6782 ei->ordered_data_close = 0;
6638 ei->orphan_meta_reserved = 0; 6783 ei->orphan_meta_reserved = 0;
@@ -6668,7 +6813,7 @@ void btrfs_destroy_inode(struct inode *inode)
6668 WARN_ON(!list_empty(&inode->i_dentry)); 6813 WARN_ON(!list_empty(&inode->i_dentry));
6669 WARN_ON(inode->i_data.nrpages); 6814 WARN_ON(inode->i_data.nrpages);
6670 WARN_ON(atomic_read(&BTRFS_I(inode)->outstanding_extents)); 6815 WARN_ON(atomic_read(&BTRFS_I(inode)->outstanding_extents));
6671 WARN_ON(BTRFS_I(inode)->reserved_extents); 6816 WARN_ON(atomic_read(&BTRFS_I(inode)->reserved_extents));
6672 6817
6673 /* 6818 /*
6674 * This can happen where we create an inode, but somebody else also 6819 * This can happen where we create an inode, but somebody else also
@@ -6760,6 +6905,8 @@ void btrfs_destroy_cachep(void)
6760 kmem_cache_destroy(btrfs_transaction_cachep); 6905 kmem_cache_destroy(btrfs_transaction_cachep);
6761 if (btrfs_path_cachep) 6906 if (btrfs_path_cachep)
6762 kmem_cache_destroy(btrfs_path_cachep); 6907 kmem_cache_destroy(btrfs_path_cachep);
6908 if (btrfs_free_space_cachep)
6909 kmem_cache_destroy(btrfs_free_space_cachep);
6763} 6910}
6764 6911
6765int btrfs_init_cachep(void) 6912int btrfs_init_cachep(void)
@@ -6788,6 +6935,12 @@ int btrfs_init_cachep(void)
6788 if (!btrfs_path_cachep) 6935 if (!btrfs_path_cachep)
6789 goto fail; 6936 goto fail;
6790 6937
6938 btrfs_free_space_cachep = kmem_cache_create("btrfs_free_space_cache",
6939 sizeof(struct btrfs_free_space), 0,
6940 SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD, NULL);
6941 if (!btrfs_free_space_cachep)
6942 goto fail;
6943
6791 return 0; 6944 return 0;
6792fail: 6945fail:
6793 btrfs_destroy_cachep(); 6946 btrfs_destroy_cachep();
@@ -6806,6 +6959,26 @@ static int btrfs_getattr(struct vfsmount *mnt,
6806 return 0; 6959 return 0;
6807} 6960}
6808 6961
6962/*
6963 * If a file is moved, it will inherit the cow and compression flags of the new
6964 * directory.
6965 */
6966static void fixup_inode_flags(struct inode *dir, struct inode *inode)
6967{
6968 struct btrfs_inode *b_dir = BTRFS_I(dir);
6969 struct btrfs_inode *b_inode = BTRFS_I(inode);
6970
6971 if (b_dir->flags & BTRFS_INODE_NODATACOW)
6972 b_inode->flags |= BTRFS_INODE_NODATACOW;
6973 else
6974 b_inode->flags &= ~BTRFS_INODE_NODATACOW;
6975
6976 if (b_dir->flags & BTRFS_INODE_COMPRESS)
6977 b_inode->flags |= BTRFS_INODE_COMPRESS;
6978 else
6979 b_inode->flags &= ~BTRFS_INODE_COMPRESS;
6980}
6981
6809static int btrfs_rename(struct inode *old_dir, struct dentry *old_dentry, 6982static int btrfs_rename(struct inode *old_dir, struct dentry *old_dentry,
6810 struct inode *new_dir, struct dentry *new_dentry) 6983 struct inode *new_dir, struct dentry *new_dentry)
6811{ 6984{
@@ -6854,8 +7027,10 @@ static int btrfs_rename(struct inode *old_dir, struct dentry *old_dentry,
6854 * should cover the worst case number of items we'll modify. 7027 * should cover the worst case number of items we'll modify.
6855 */ 7028 */
6856 trans = btrfs_start_transaction(root, 20); 7029 trans = btrfs_start_transaction(root, 20);
6857 if (IS_ERR(trans)) 7030 if (IS_ERR(trans)) {
6858 return PTR_ERR(trans); 7031 ret = PTR_ERR(trans);
7032 goto out_notrans;
7033 }
6859 7034
6860 btrfs_set_trans_block_group(trans, new_dir); 7035 btrfs_set_trans_block_group(trans, new_dir);
6861 7036
@@ -6908,11 +7083,12 @@ static int btrfs_rename(struct inode *old_dir, struct dentry *old_dentry,
6908 old_dentry->d_name.name, 7083 old_dentry->d_name.name,
6909 old_dentry->d_name.len); 7084 old_dentry->d_name.len);
6910 } else { 7085 } else {
6911 btrfs_inc_nlink(old_dentry->d_inode); 7086 ret = __btrfs_unlink_inode(trans, root, old_dir,
6912 ret = btrfs_unlink_inode(trans, root, old_dir, 7087 old_dentry->d_inode,
6913 old_dentry->d_inode, 7088 old_dentry->d_name.name,
6914 old_dentry->d_name.name, 7089 old_dentry->d_name.len);
6915 old_dentry->d_name.len); 7090 if (!ret)
7091 ret = btrfs_update_inode(trans, root, old_inode);
6916 } 7092 }
6917 BUG_ON(ret); 7093 BUG_ON(ret);
6918 7094
@@ -6939,6 +7115,8 @@ static int btrfs_rename(struct inode *old_dir, struct dentry *old_dentry,
6939 } 7115 }
6940 } 7116 }
6941 7117
7118 fixup_inode_flags(new_dir, old_inode);
7119
6942 ret = btrfs_add_link(trans, new_dir, old_inode, 7120 ret = btrfs_add_link(trans, new_dir, old_inode,
6943 new_dentry->d_name.name, 7121 new_dentry->d_name.name,
6944 new_dentry->d_name.len, 0, index); 7122 new_dentry->d_name.len, 0, index);
@@ -6952,7 +7130,7 @@ static int btrfs_rename(struct inode *old_dir, struct dentry *old_dentry,
6952 } 7130 }
6953out_fail: 7131out_fail:
6954 btrfs_end_transaction_throttle(trans, root); 7132 btrfs_end_transaction_throttle(trans, root);
6955 7133out_notrans:
6956 if (old_inode->i_ino == BTRFS_FIRST_FREE_OBJECTID) 7134 if (old_inode->i_ino == BTRFS_FIRST_FREE_OBJECTID)
6957 up_read(&root->fs_info->subvol_sem); 7135 up_read(&root->fs_info->subvol_sem);
6958 7136
@@ -7100,9 +7278,10 @@ static int btrfs_symlink(struct inode *dir, struct dentry *dentry,
7100 dentry->d_name.len, dir->i_ino, objectid, 7278 dentry->d_name.len, dir->i_ino, objectid,
7101 BTRFS_I(dir)->block_group, S_IFLNK|S_IRWXUGO, 7279 BTRFS_I(dir)->block_group, S_IFLNK|S_IRWXUGO,
7102 &index); 7280 &index);
7103 err = PTR_ERR(inode); 7281 if (IS_ERR(inode)) {
7104 if (IS_ERR(inode)) 7282 err = PTR_ERR(inode);
7105 goto out_unlock; 7283 goto out_unlock;
7284 }
7106 7285
7107 err = btrfs_init_inode_security(trans, inode, dir, &dentry->d_name); 7286 err = btrfs_init_inode_security(trans, inode, dir, &dentry->d_name);
7108 if (err) { 7287 if (err) {
@@ -7340,7 +7519,6 @@ static const struct address_space_operations btrfs_aops = {
7340 .writepage = btrfs_writepage, 7519 .writepage = btrfs_writepage,
7341 .writepages = btrfs_writepages, 7520 .writepages = btrfs_writepages,
7342 .readpages = btrfs_readpages, 7521 .readpages = btrfs_readpages,
7343 .sync_page = block_sync_page,
7344 .direct_IO = btrfs_direct_IO, 7522 .direct_IO = btrfs_direct_IO,
7345 .invalidatepage = btrfs_invalidatepage, 7523 .invalidatepage = btrfs_invalidatepage,
7346 .releasepage = btrfs_releasepage, 7524 .releasepage = btrfs_releasepage,
@@ -7356,7 +7534,6 @@ static const struct address_space_operations btrfs_symlink_aops = {
7356}; 7534};
7357 7535
7358static const struct inode_operations btrfs_file_inode_operations = { 7536static const struct inode_operations btrfs_file_inode_operations = {
7359 .truncate = btrfs_truncate,
7360 .getattr = btrfs_getattr, 7537 .getattr = btrfs_getattr,
7361 .setattr = btrfs_setattr, 7538 .setattr = btrfs_setattr,
7362 .setxattr = btrfs_setxattr, 7539 .setxattr = btrfs_setxattr,