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.c393
1 files changed, 249 insertions, 144 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 119520bdb9a5..5cc64ab9c485 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,
@@ -1254,7 +1259,8 @@ static int run_delalloc_range(struct inode *inode, struct page *locked_page,
1254 ret = run_delalloc_nocow(inode, locked_page, start, end, 1259 ret = run_delalloc_nocow(inode, locked_page, start, end,
1255 page_started, 0, nr_written); 1260 page_started, 0, nr_written);
1256 else if (!btrfs_test_opt(root, COMPRESS) && 1261 else if (!btrfs_test_opt(root, COMPRESS) &&
1257 !(BTRFS_I(inode)->force_compress)) 1262 !(BTRFS_I(inode)->force_compress) &&
1263 !(BTRFS_I(inode)->flags & BTRFS_INODE_COMPRESS))
1258 ret = cow_file_range(inode, locked_page, start, end, 1264 ret = cow_file_range(inode, locked_page, start, end,
1259 page_started, nr_written, 1); 1265 page_started, nr_written, 1);
1260 else 1266 else
@@ -1461,8 +1467,11 @@ static int btrfs_submit_bio_hook(struct inode *inode, int rw, struct bio *bio,
1461 if (bio_flags & EXTENT_BIO_COMPRESSED) { 1467 if (bio_flags & EXTENT_BIO_COMPRESSED) {
1462 return btrfs_submit_compressed_read(inode, bio, 1468 return btrfs_submit_compressed_read(inode, bio,
1463 mirror_num, bio_flags); 1469 mirror_num, bio_flags);
1464 } else if (!skip_sum) 1470 } else if (!skip_sum) {
1465 btrfs_lookup_bio_sums(root, inode, bio, NULL); 1471 ret = btrfs_lookup_bio_sums(root, inode, bio, NULL);
1472 if (ret)
1473 return ret;
1474 }
1466 goto mapit; 1475 goto mapit;
1467 } else if (!skip_sum) { 1476 } else if (!skip_sum) {
1468 /* csum items have already been cloned */ 1477 /* csum items have already been cloned */
@@ -1785,6 +1794,8 @@ out:
1785static int btrfs_writepage_end_io_hook(struct page *page, u64 start, u64 end, 1794static int btrfs_writepage_end_io_hook(struct page *page, u64 start, u64 end,
1786 struct extent_state *state, int uptodate) 1795 struct extent_state *state, int uptodate)
1787{ 1796{
1797 trace_btrfs_writepage_end_io_hook(page, start, end, uptodate);
1798
1788 ClearPagePrivate2(page); 1799 ClearPagePrivate2(page);
1789 return btrfs_finish_ordered_io(page->mapping->host, start, end); 1800 return btrfs_finish_ordered_io(page->mapping->host, start, end);
1790} 1801}
@@ -1895,10 +1906,10 @@ static int btrfs_io_failed_hook(struct bio *failed_bio,
1895 else 1906 else
1896 rw = READ; 1907 rw = READ;
1897 1908
1898 BTRFS_I(inode)->io_tree.ops->submit_bio_hook(inode, rw, bio, 1909 ret = BTRFS_I(inode)->io_tree.ops->submit_bio_hook(inode, rw, bio,
1899 failrec->last_mirror, 1910 failrec->last_mirror,
1900 failrec->bio_flags, 0); 1911 failrec->bio_flags, 0);
1901 return 0; 1912 return ret;
1902} 1913}
1903 1914
1904/* 1915/*
@@ -2210,8 +2221,6 @@ int btrfs_orphan_add(struct btrfs_trans_handle *trans, struct inode *inode)
2210 insert = 1; 2221 insert = 1;
2211#endif 2222#endif
2212 insert = 1; 2223 insert = 1;
2213 } else {
2214 WARN_ON(!BTRFS_I(inode)->orphan_meta_reserved);
2215 } 2224 }
2216 2225
2217 if (!BTRFS_I(inode)->orphan_meta_reserved) { 2226 if (!BTRFS_I(inode)->orphan_meta_reserved) {
@@ -2282,7 +2291,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 2291 * this cleans up any orphans that may be left on the list from the last use
2283 * of this root. 2292 * of this root.
2284 */ 2293 */
2285void btrfs_orphan_cleanup(struct btrfs_root *root) 2294int btrfs_orphan_cleanup(struct btrfs_root *root)
2286{ 2295{
2287 struct btrfs_path *path; 2296 struct btrfs_path *path;
2288 struct extent_buffer *leaf; 2297 struct extent_buffer *leaf;
@@ -2292,10 +2301,13 @@ void btrfs_orphan_cleanup(struct btrfs_root *root)
2292 int ret = 0, nr_unlink = 0, nr_truncate = 0; 2301 int ret = 0, nr_unlink = 0, nr_truncate = 0;
2293 2302
2294 if (cmpxchg(&root->orphan_cleanup_state, 0, ORPHAN_CLEANUP_STARTED)) 2303 if (cmpxchg(&root->orphan_cleanup_state, 0, ORPHAN_CLEANUP_STARTED))
2295 return; 2304 return 0;
2296 2305
2297 path = btrfs_alloc_path(); 2306 path = btrfs_alloc_path();
2298 BUG_ON(!path); 2307 if (!path) {
2308 ret = -ENOMEM;
2309 goto out;
2310 }
2299 path->reada = -1; 2311 path->reada = -1;
2300 2312
2301 key.objectid = BTRFS_ORPHAN_OBJECTID; 2313 key.objectid = BTRFS_ORPHAN_OBJECTID;
@@ -2304,18 +2316,16 @@ void btrfs_orphan_cleanup(struct btrfs_root *root)
2304 2316
2305 while (1) { 2317 while (1) {
2306 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); 2318 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
2307 if (ret < 0) { 2319 if (ret < 0)
2308 printk(KERN_ERR "Error searching slot for orphan: %d" 2320 goto out;
2309 "\n", ret);
2310 break;
2311 }
2312 2321
2313 /* 2322 /*
2314 * if ret == 0 means we found what we were searching for, which 2323 * 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 2324 * 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 2325 * find the key and see if we have stuff that matches
2317 */ 2326 */
2318 if (ret > 0) { 2327 if (ret > 0) {
2328 ret = 0;
2319 if (path->slots[0] == 0) 2329 if (path->slots[0] == 0)
2320 break; 2330 break;
2321 path->slots[0]--; 2331 path->slots[0]--;
@@ -2343,7 +2353,10 @@ void btrfs_orphan_cleanup(struct btrfs_root *root)
2343 found_key.type = BTRFS_INODE_ITEM_KEY; 2353 found_key.type = BTRFS_INODE_ITEM_KEY;
2344 found_key.offset = 0; 2354 found_key.offset = 0;
2345 inode = btrfs_iget(root->fs_info->sb, &found_key, root, NULL); 2355 inode = btrfs_iget(root->fs_info->sb, &found_key, root, NULL);
2346 BUG_ON(IS_ERR(inode)); 2356 if (IS_ERR(inode)) {
2357 ret = PTR_ERR(inode);
2358 goto out;
2359 }
2347 2360
2348 /* 2361 /*
2349 * add this inode to the orphan list so btrfs_orphan_del does 2362 * add this inode to the orphan list so btrfs_orphan_del does
@@ -2361,7 +2374,10 @@ void btrfs_orphan_cleanup(struct btrfs_root *root)
2361 */ 2374 */
2362 if (is_bad_inode(inode)) { 2375 if (is_bad_inode(inode)) {
2363 trans = btrfs_start_transaction(root, 0); 2376 trans = btrfs_start_transaction(root, 0);
2364 BUG_ON(IS_ERR(trans)); 2377 if (IS_ERR(trans)) {
2378 ret = PTR_ERR(trans);
2379 goto out;
2380 }
2365 btrfs_orphan_del(trans, inode); 2381 btrfs_orphan_del(trans, inode);
2366 btrfs_end_transaction(trans, root); 2382 btrfs_end_transaction(trans, root);
2367 iput(inode); 2383 iput(inode);
@@ -2370,17 +2386,22 @@ void btrfs_orphan_cleanup(struct btrfs_root *root)
2370 2386
2371 /* if we have links, this was a truncate, lets do that */ 2387 /* if we have links, this was a truncate, lets do that */
2372 if (inode->i_nlink) { 2388 if (inode->i_nlink) {
2389 if (!S_ISREG(inode->i_mode)) {
2390 WARN_ON(1);
2391 iput(inode);
2392 continue;
2393 }
2373 nr_truncate++; 2394 nr_truncate++;
2374 btrfs_truncate(inode); 2395 ret = btrfs_truncate(inode);
2375 } else { 2396 } else {
2376 nr_unlink++; 2397 nr_unlink++;
2377 } 2398 }
2378 2399
2379 /* this will do delete_inode and everything for us */ 2400 /* this will do delete_inode and everything for us */
2380 iput(inode); 2401 iput(inode);
2402 if (ret)
2403 goto out;
2381 } 2404 }
2382 btrfs_free_path(path);
2383
2384 root->orphan_cleanup_state = ORPHAN_CLEANUP_DONE; 2405 root->orphan_cleanup_state = ORPHAN_CLEANUP_DONE;
2385 2406
2386 if (root->orphan_block_rsv) 2407 if (root->orphan_block_rsv)
@@ -2389,14 +2410,20 @@ void btrfs_orphan_cleanup(struct btrfs_root *root)
2389 2410
2390 if (root->orphan_block_rsv || root->orphan_item_inserted) { 2411 if (root->orphan_block_rsv || root->orphan_item_inserted) {
2391 trans = btrfs_join_transaction(root, 1); 2412 trans = btrfs_join_transaction(root, 1);
2392 BUG_ON(IS_ERR(trans)); 2413 if (!IS_ERR(trans))
2393 btrfs_end_transaction(trans, root); 2414 btrfs_end_transaction(trans, root);
2394 } 2415 }
2395 2416
2396 if (nr_unlink) 2417 if (nr_unlink)
2397 printk(KERN_INFO "btrfs: unlinked %d orphans\n", nr_unlink); 2418 printk(KERN_INFO "btrfs: unlinked %d orphans\n", nr_unlink);
2398 if (nr_truncate) 2419 if (nr_truncate)
2399 printk(KERN_INFO "btrfs: truncated %d orphans\n", nr_truncate); 2420 printk(KERN_INFO "btrfs: truncated %d orphans\n", nr_truncate);
2421
2422out:
2423 if (ret)
2424 printk(KERN_CRIT "btrfs: could not do orphan cleanup %d\n", ret);
2425 btrfs_free_path(path);
2426 return ret;
2400} 2427}
2401 2428
2402/* 2429/*
@@ -2635,10 +2662,10 @@ failed:
2635 * recovery code. It remove a link in a directory with a given name, and 2662 * 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 2663 * also drops the back refs in the inode to the directory
2637 */ 2664 */
2638int btrfs_unlink_inode(struct btrfs_trans_handle *trans, 2665static int __btrfs_unlink_inode(struct btrfs_trans_handle *trans,
2639 struct btrfs_root *root, 2666 struct btrfs_root *root,
2640 struct inode *dir, struct inode *inode, 2667 struct inode *dir, struct inode *inode,
2641 const char *name, int name_len) 2668 const char *name, int name_len)
2642{ 2669{
2643 struct btrfs_path *path; 2670 struct btrfs_path *path;
2644 int ret = 0; 2671 int ret = 0;
@@ -2710,12 +2737,25 @@ err:
2710 btrfs_i_size_write(dir, dir->i_size - name_len * 2); 2737 btrfs_i_size_write(dir, dir->i_size - name_len * 2);
2711 inode->i_ctime = dir->i_mtime = dir->i_ctime = CURRENT_TIME; 2738 inode->i_ctime = dir->i_mtime = dir->i_ctime = CURRENT_TIME;
2712 btrfs_update_inode(trans, root, dir); 2739 btrfs_update_inode(trans, root, dir);
2713 btrfs_drop_nlink(inode);
2714 ret = btrfs_update_inode(trans, root, inode);
2715out: 2740out:
2716 return ret; 2741 return ret;
2717} 2742}
2718 2743
2744int btrfs_unlink_inode(struct btrfs_trans_handle *trans,
2745 struct btrfs_root *root,
2746 struct inode *dir, struct inode *inode,
2747 const char *name, int name_len)
2748{
2749 int ret;
2750 ret = __btrfs_unlink_inode(trans, root, dir, inode, name, name_len);
2751 if (!ret) {
2752 btrfs_drop_nlink(inode);
2753 ret = btrfs_update_inode(trans, root, inode);
2754 }
2755 return ret;
2756}
2757
2758
2719/* helper to check if there is any shared block in the path */ 2759/* helper to check if there is any shared block in the path */
2720static int check_path_shared(struct btrfs_root *root, 2760static int check_path_shared(struct btrfs_root *root,
2721 struct btrfs_path *path) 2761 struct btrfs_path *path)
@@ -3537,7 +3577,13 @@ out:
3537 return ret; 3577 return ret;
3538} 3578}
3539 3579
3540int btrfs_cont_expand(struct inode *inode, loff_t size) 3580/*
3581 * This function puts in dummy file extents for the area we're creating a hole
3582 * for. So if we are truncating this file to a larger size we need to insert
3583 * these file extents so that btrfs_get_extent will return a EXTENT_MAP_HOLE for
3584 * the range between oldsize and size
3585 */
3586int btrfs_cont_expand(struct inode *inode, loff_t oldsize, loff_t size)
3541{ 3587{
3542 struct btrfs_trans_handle *trans; 3588 struct btrfs_trans_handle *trans;
3543 struct btrfs_root *root = BTRFS_I(inode)->root; 3589 struct btrfs_root *root = BTRFS_I(inode)->root;
@@ -3545,7 +3591,7 @@ int btrfs_cont_expand(struct inode *inode, loff_t size)
3545 struct extent_map *em = NULL; 3591 struct extent_map *em = NULL;
3546 struct extent_state *cached_state = NULL; 3592 struct extent_state *cached_state = NULL;
3547 u64 mask = root->sectorsize - 1; 3593 u64 mask = root->sectorsize - 1;
3548 u64 hole_start = (inode->i_size + mask) & ~mask; 3594 u64 hole_start = (oldsize + mask) & ~mask;
3549 u64 block_end = (size + mask) & ~mask; 3595 u64 block_end = (size + mask) & ~mask;
3550 u64 last_byte; 3596 u64 last_byte;
3551 u64 cur_offset; 3597 u64 cur_offset;
@@ -3590,13 +3636,15 @@ int btrfs_cont_expand(struct inode *inode, loff_t size)
3590 err = btrfs_drop_extents(trans, inode, cur_offset, 3636 err = btrfs_drop_extents(trans, inode, cur_offset,
3591 cur_offset + hole_size, 3637 cur_offset + hole_size,
3592 &hint_byte, 1); 3638 &hint_byte, 1);
3593 BUG_ON(err); 3639 if (err)
3640 break;
3594 3641
3595 err = btrfs_insert_file_extent(trans, root, 3642 err = btrfs_insert_file_extent(trans, root,
3596 inode->i_ino, cur_offset, 0, 3643 inode->i_ino, cur_offset, 0,
3597 0, hole_size, 0, hole_size, 3644 0, hole_size, 0, hole_size,
3598 0, 0, 0); 3645 0, 0, 0);
3599 BUG_ON(err); 3646 if (err)
3647 break;
3600 3648
3601 btrfs_drop_extent_cache(inode, hole_start, 3649 btrfs_drop_extent_cache(inode, hole_start,
3602 last_byte - 1, 0); 3650 last_byte - 1, 0);
@@ -3616,81 +3664,41 @@ int btrfs_cont_expand(struct inode *inode, loff_t size)
3616 return err; 3664 return err;
3617} 3665}
3618 3666
3619static int btrfs_setattr_size(struct inode *inode, struct iattr *attr) 3667static int btrfs_setsize(struct inode *inode, loff_t newsize)
3620{ 3668{
3621 struct btrfs_root *root = BTRFS_I(inode)->root; 3669 loff_t oldsize = i_size_read(inode);
3622 struct btrfs_trans_handle *trans;
3623 unsigned long nr;
3624 int ret; 3670 int ret;
3625 3671
3626 if (attr->ia_size == inode->i_size) 3672 if (newsize == oldsize)
3627 return 0; 3673 return 0;
3628 3674
3629 if (attr->ia_size > inode->i_size) { 3675 if (newsize > oldsize) {
3630 unsigned long limit; 3676 i_size_write(inode, newsize);
3631 limit = current->signal->rlim[RLIMIT_FSIZE].rlim_cur; 3677 btrfs_ordered_update_i_size(inode, i_size_read(inode), NULL);
3632 if (attr->ia_size > inode->i_sb->s_maxbytes) 3678 truncate_pagecache(inode, oldsize, newsize);
3633 return -EFBIG; 3679 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) { 3680 if (ret) {
3656 btrfs_truncate(inode); 3681 btrfs_setsize(inode, oldsize);
3657 return ret; 3682 return ret;
3658 } 3683 }
3659 3684
3660 i_size_write(inode, attr->ia_size); 3685 mark_inode_dirty(inode);
3661 btrfs_ordered_update_i_size(inode, inode->i_size, NULL); 3686 } else {
3662 3687
3663 trans = btrfs_start_transaction(root, 0); 3688 /*
3664 BUG_ON(IS_ERR(trans)); 3689 * We're truncating a file that used to have good data down to
3665 btrfs_set_trans_block_group(trans, inode); 3690 * zero. Make sure it gets into the ordered flush list so that
3666 trans->block_rsv = root->orphan_block_rsv; 3691 * any new writes get down to disk quickly.
3667 BUG_ON(!trans->block_rsv); 3692 */
3693 if (newsize == 0)
3694 BTRFS_I(inode)->ordered_data_close = 1;
3668 3695
3669 ret = btrfs_update_inode(trans, root, inode); 3696 /* we don't support swapfiles, so vmtruncate shouldn't fail */
3670 BUG_ON(ret); 3697 truncate_setsize(inode, newsize);
3671 if (inode->i_nlink > 0) { 3698 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 } 3699 }
3680 3700
3681 /* 3701 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} 3702}
3695 3703
3696static int btrfs_setattr(struct dentry *dentry, struct iattr *attr) 3704static int btrfs_setattr(struct dentry *dentry, struct iattr *attr)
@@ -3707,7 +3715,7 @@ static int btrfs_setattr(struct dentry *dentry, struct iattr *attr)
3707 return err; 3715 return err;
3708 3716
3709 if (S_ISREG(inode->i_mode) && (attr->ia_valid & ATTR_SIZE)) { 3717 if (S_ISREG(inode->i_mode) && (attr->ia_valid & ATTR_SIZE)) {
3710 err = btrfs_setattr_size(inode, attr); 3718 err = btrfs_setsize(inode, attr->ia_size);
3711 if (err) 3719 if (err)
3712 return err; 3720 return err;
3713 } 3721 }
@@ -3730,6 +3738,8 @@ void btrfs_evict_inode(struct inode *inode)
3730 unsigned long nr; 3738 unsigned long nr;
3731 int ret; 3739 int ret;
3732 3740
3741 trace_btrfs_inode_evict(inode);
3742
3733 truncate_inode_pages(&inode->i_data, 0); 3743 truncate_inode_pages(&inode->i_data, 0);
3734 if (inode->i_nlink && (btrfs_root_refs(&root->root_item) != 0 || 3744 if (inode->i_nlink && (btrfs_root_refs(&root->root_item) != 0 ||
3735 root == root->fs_info->tree_root)) 3745 root == root->fs_info->tree_root))
@@ -4072,7 +4082,6 @@ struct inode *btrfs_iget(struct super_block *s, struct btrfs_key *location,
4072 BTRFS_I(inode)->root = root; 4082 BTRFS_I(inode)->root = root;
4073 memcpy(&BTRFS_I(inode)->location, location, sizeof(*location)); 4083 memcpy(&BTRFS_I(inode)->location, location, sizeof(*location));
4074 btrfs_read_locked_inode(inode); 4084 btrfs_read_locked_inode(inode);
4075
4076 inode_tree_add(inode); 4085 inode_tree_add(inode);
4077 unlock_new_inode(inode); 4086 unlock_new_inode(inode);
4078 if (new) 4087 if (new)
@@ -4147,8 +4156,10 @@ struct inode *btrfs_lookup_dentry(struct inode *dir, struct dentry *dentry)
4147 if (!IS_ERR(inode) && root != sub_root) { 4156 if (!IS_ERR(inode) && root != sub_root) {
4148 down_read(&root->fs_info->cleanup_work_sem); 4157 down_read(&root->fs_info->cleanup_work_sem);
4149 if (!(inode->i_sb->s_flags & MS_RDONLY)) 4158 if (!(inode->i_sb->s_flags & MS_RDONLY))
4150 btrfs_orphan_cleanup(sub_root); 4159 ret = btrfs_orphan_cleanup(sub_root);
4151 up_read(&root->fs_info->cleanup_work_sem); 4160 up_read(&root->fs_info->cleanup_work_sem);
4161 if (ret)
4162 inode = ERR_PTR(ret);
4152 } 4163 }
4153 4164
4154 return inode; 4165 return inode;
@@ -4282,6 +4293,9 @@ static int btrfs_real_readdir(struct file *filp, void *dirent,
4282 while (di_cur < di_total) { 4293 while (di_cur < di_total) {
4283 struct btrfs_key location; 4294 struct btrfs_key location;
4284 4295
4296 if (verify_dir_item(root, leaf, di))
4297 break;
4298
4285 name_len = btrfs_dir_name_len(leaf, di); 4299 name_len = btrfs_dir_name_len(leaf, di);
4286 if (name_len <= sizeof(tmp_name)) { 4300 if (name_len <= sizeof(tmp_name)) {
4287 name_ptr = tmp_name; 4301 name_ptr = tmp_name;
@@ -4517,6 +4531,8 @@ static struct inode *btrfs_new_inode(struct btrfs_trans_handle *trans,
4517 return ERR_PTR(-ENOMEM); 4531 return ERR_PTR(-ENOMEM);
4518 4532
4519 if (dir) { 4533 if (dir) {
4534 trace_btrfs_inode_request(dir);
4535
4520 ret = btrfs_set_inode_index(dir, index); 4536 ret = btrfs_set_inode_index(dir, index);
4521 if (ret) { 4537 if (ret) {
4522 iput(inode); 4538 iput(inode);
@@ -4585,12 +4601,16 @@ static struct inode *btrfs_new_inode(struct btrfs_trans_handle *trans,
4585 if ((mode & S_IFREG)) { 4601 if ((mode & S_IFREG)) {
4586 if (btrfs_test_opt(root, NODATASUM)) 4602 if (btrfs_test_opt(root, NODATASUM))
4587 BTRFS_I(inode)->flags |= BTRFS_INODE_NODATASUM; 4603 BTRFS_I(inode)->flags |= BTRFS_INODE_NODATASUM;
4588 if (btrfs_test_opt(root, NODATACOW)) 4604 if (btrfs_test_opt(root, NODATACOW) ||
4605 (BTRFS_I(dir)->flags & BTRFS_INODE_NODATACOW))
4589 BTRFS_I(inode)->flags |= BTRFS_INODE_NODATACOW; 4606 BTRFS_I(inode)->flags |= BTRFS_INODE_NODATACOW;
4590 } 4607 }
4591 4608
4592 insert_inode_hash(inode); 4609 insert_inode_hash(inode);
4593 inode_tree_add(inode); 4610 inode_tree_add(inode);
4611
4612 trace_btrfs_inode_new(inode);
4613
4594 return inode; 4614 return inode;
4595fail: 4615fail:
4596 if (dir) 4616 if (dir)
@@ -4809,7 +4829,10 @@ static int btrfs_link(struct dentry *old_dentry, struct inode *dir,
4809 4829
4810 /* do not allow sys_link's with other subvols of the same device */ 4830 /* do not allow sys_link's with other subvols of the same device */
4811 if (root->objectid != BTRFS_I(inode)->root->objectid) 4831 if (root->objectid != BTRFS_I(inode)->root->objectid)
4812 return -EPERM; 4832 return -EXDEV;
4833
4834 if (inode->i_nlink == ~0U)
4835 return -EMLINK;
4813 4836
4814 btrfs_inc_nlink(inode); 4837 btrfs_inc_nlink(inode);
4815 inode->i_ctime = CURRENT_TIME; 4838 inode->i_ctime = CURRENT_TIME;
@@ -5265,6 +5288,9 @@ insert:
5265 } 5288 }
5266 write_unlock(&em_tree->lock); 5289 write_unlock(&em_tree->lock);
5267out: 5290out:
5291
5292 trace_btrfs_get_extent(root, em);
5293
5268 if (path) 5294 if (path)
5269 btrfs_free_path(path); 5295 btrfs_free_path(path);
5270 if (trans) { 5296 if (trans) {
@@ -5748,6 +5774,10 @@ static void btrfs_endio_direct_read(struct bio *bio, int err)
5748 5774
5749 kfree(dip->csums); 5775 kfree(dip->csums);
5750 kfree(dip); 5776 kfree(dip);
5777
5778 /* If we had a csum failure make sure to clear the uptodate flag */
5779 if (err)
5780 clear_bit(BIO_UPTODATE, &bio->bi_flags);
5751 dio_end_io(bio, err); 5781 dio_end_io(bio, err);
5752} 5782}
5753 5783
@@ -5849,6 +5879,10 @@ out_done:
5849 5879
5850 kfree(dip->csums); 5880 kfree(dip->csums);
5851 kfree(dip); 5881 kfree(dip);
5882
5883 /* If we had an error make sure to clear the uptodate flag */
5884 if (err)
5885 clear_bit(BIO_UPTODATE, &bio->bi_flags);
5852 dio_end_io(bio, err); 5886 dio_end_io(bio, err);
5853} 5887}
5854 5888
@@ -5922,9 +5956,12 @@ static inline int __btrfs_submit_dio_bio(struct bio *bio, struct inode *inode,
5922 __btrfs_submit_bio_start_direct_io, 5956 __btrfs_submit_bio_start_direct_io,
5923 __btrfs_submit_bio_done); 5957 __btrfs_submit_bio_done);
5924 goto err; 5958 goto err;
5925 } else if (!skip_sum) 5959 } else if (!skip_sum) {
5926 btrfs_lookup_bio_sums_dio(root, inode, bio, 5960 ret = btrfs_lookup_bio_sums_dio(root, inode, bio,
5927 file_offset, csums); 5961 file_offset, csums);
5962 if (ret)
5963 goto err;
5964 }
5928 5965
5929 ret = btrfs_map_bio(root, rw, bio, 0, 1); 5966 ret = btrfs_map_bio(root, rw, bio, 0, 1);
5930err: 5967err:
@@ -5948,6 +5985,7 @@ static int btrfs_submit_direct_hook(int rw, struct btrfs_dio_private *dip,
5948 int nr_pages = 0; 5985 int nr_pages = 0;
5949 u32 *csums = dip->csums; 5986 u32 *csums = dip->csums;
5950 int ret = 0; 5987 int ret = 0;
5988 int write = rw & REQ_WRITE;
5951 5989
5952 bio = btrfs_dio_bio_alloc(orig_bio->bi_bdev, start_sector, GFP_NOFS); 5990 bio = btrfs_dio_bio_alloc(orig_bio->bi_bdev, start_sector, GFP_NOFS);
5953 if (!bio) 5991 if (!bio)
@@ -5984,7 +6022,8 @@ static int btrfs_submit_direct_hook(int rw, struct btrfs_dio_private *dip,
5984 goto out_err; 6022 goto out_err;
5985 } 6023 }
5986 6024
5987 if (!skip_sum) 6025 /* Write's use the ordered csums */
6026 if (!write && !skip_sum)
5988 csums = csums + nr_pages; 6027 csums = csums + nr_pages;
5989 start_sector += submit_len >> 9; 6028 start_sector += submit_len >> 9;
5990 file_offset += submit_len; 6029 file_offset += submit_len;
@@ -6052,7 +6091,8 @@ static void btrfs_submit_direct(int rw, struct bio *bio, struct inode *inode,
6052 } 6091 }
6053 dip->csums = NULL; 6092 dip->csums = NULL;
6054 6093
6055 if (!skip_sum) { 6094 /* Write's use the ordered csum stuff, so we don't need dip->csums */
6095 if (!write && !skip_sum) {
6056 dip->csums = kmalloc(sizeof(u32) * bio->bi_vcnt, GFP_NOFS); 6096 dip->csums = kmalloc(sizeof(u32) * bio->bi_vcnt, GFP_NOFS);
6057 if (!dip->csums) { 6097 if (!dip->csums) {
6058 kfree(dip); 6098 kfree(dip);
@@ -6474,28 +6514,42 @@ out:
6474 return ret; 6514 return ret;
6475} 6515}
6476 6516
6477static void btrfs_truncate(struct inode *inode) 6517static int btrfs_truncate(struct inode *inode)
6478{ 6518{
6479 struct btrfs_root *root = BTRFS_I(inode)->root; 6519 struct btrfs_root *root = BTRFS_I(inode)->root;
6480 int ret; 6520 int ret;
6521 int err = 0;
6481 struct btrfs_trans_handle *trans; 6522 struct btrfs_trans_handle *trans;
6482 unsigned long nr; 6523 unsigned long nr;
6483 u64 mask = root->sectorsize - 1; 6524 u64 mask = root->sectorsize - 1;
6484 6525
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); 6526 ret = btrfs_truncate_page(inode->i_mapping, inode->i_size);
6491 if (ret) 6527 if (ret)
6492 return; 6528 return ret;
6493 6529
6494 btrfs_wait_ordered_range(inode, inode->i_size & (~mask), (u64)-1); 6530 btrfs_wait_ordered_range(inode, inode->i_size & (~mask), (u64)-1);
6495 btrfs_ordered_update_i_size(inode, inode->i_size, NULL); 6531 btrfs_ordered_update_i_size(inode, inode->i_size, NULL);
6496 6532
6533 trans = btrfs_start_transaction(root, 5);
6534 if (IS_ERR(trans))
6535 return PTR_ERR(trans);
6536
6537 btrfs_set_trans_block_group(trans, inode);
6538
6539 ret = btrfs_orphan_add(trans, inode);
6540 if (ret) {
6541 btrfs_end_transaction(trans, root);
6542 return ret;
6543 }
6544
6545 nr = trans->blocks_used;
6546 btrfs_end_transaction(trans, root);
6547 btrfs_btree_balance_dirty(root, nr);
6548
6549 /* Now start a transaction for the truncate */
6497 trans = btrfs_start_transaction(root, 0); 6550 trans = btrfs_start_transaction(root, 0);
6498 BUG_ON(IS_ERR(trans)); 6551 if (IS_ERR(trans))
6552 return PTR_ERR(trans);
6499 btrfs_set_trans_block_group(trans, inode); 6553 btrfs_set_trans_block_group(trans, inode);
6500 trans->block_rsv = root->orphan_block_rsv; 6554 trans->block_rsv = root->orphan_block_rsv;
6501 6555
@@ -6522,29 +6576,38 @@ static void btrfs_truncate(struct inode *inode)
6522 while (1) { 6576 while (1) {
6523 if (!trans) { 6577 if (!trans) {
6524 trans = btrfs_start_transaction(root, 0); 6578 trans = btrfs_start_transaction(root, 0);
6525 BUG_ON(IS_ERR(trans)); 6579 if (IS_ERR(trans))
6580 return PTR_ERR(trans);
6526 btrfs_set_trans_block_group(trans, inode); 6581 btrfs_set_trans_block_group(trans, inode);
6527 trans->block_rsv = root->orphan_block_rsv; 6582 trans->block_rsv = root->orphan_block_rsv;
6528 } 6583 }
6529 6584
6530 ret = btrfs_block_rsv_check(trans, root, 6585 ret = btrfs_block_rsv_check(trans, root,
6531 root->orphan_block_rsv, 0, 5); 6586 root->orphan_block_rsv, 0, 5);
6532 if (ret) { 6587 if (ret == -EAGAIN) {
6533 BUG_ON(ret != -EAGAIN);
6534 ret = btrfs_commit_transaction(trans, root); 6588 ret = btrfs_commit_transaction(trans, root);
6535 BUG_ON(ret); 6589 if (ret)
6590 return ret;
6536 trans = NULL; 6591 trans = NULL;
6537 continue; 6592 continue;
6593 } else if (ret) {
6594 err = ret;
6595 break;
6538 } 6596 }
6539 6597
6540 ret = btrfs_truncate_inode_items(trans, root, inode, 6598 ret = btrfs_truncate_inode_items(trans, root, inode,
6541 inode->i_size, 6599 inode->i_size,
6542 BTRFS_EXTENT_DATA_KEY); 6600 BTRFS_EXTENT_DATA_KEY);
6543 if (ret != -EAGAIN) 6601 if (ret != -EAGAIN) {
6602 err = ret;
6544 break; 6603 break;
6604 }
6545 6605
6546 ret = btrfs_update_inode(trans, root, inode); 6606 ret = btrfs_update_inode(trans, root, inode);
6547 BUG_ON(ret); 6607 if (ret) {
6608 err = ret;
6609 break;
6610 }
6548 6611
6549 nr = trans->blocks_used; 6612 nr = trans->blocks_used;
6550 btrfs_end_transaction(trans, root); 6613 btrfs_end_transaction(trans, root);
@@ -6554,16 +6617,27 @@ static void btrfs_truncate(struct inode *inode)
6554 6617
6555 if (ret == 0 && inode->i_nlink > 0) { 6618 if (ret == 0 && inode->i_nlink > 0) {
6556 ret = btrfs_orphan_del(trans, inode); 6619 ret = btrfs_orphan_del(trans, inode);
6557 BUG_ON(ret); 6620 if (ret)
6621 err = ret;
6622 } else if (ret && inode->i_nlink > 0) {
6623 /*
6624 * Failed to do the truncate, remove us from the in memory
6625 * orphan list.
6626 */
6627 ret = btrfs_orphan_del(NULL, inode);
6558 } 6628 }
6559 6629
6560 ret = btrfs_update_inode(trans, root, inode); 6630 ret = btrfs_update_inode(trans, root, inode);
6561 BUG_ON(ret); 6631 if (ret && !err)
6632 err = ret;
6562 6633
6563 nr = trans->blocks_used; 6634 nr = trans->blocks_used;
6564 ret = btrfs_end_transaction_throttle(trans, root); 6635 ret = btrfs_end_transaction_throttle(trans, root);
6565 BUG_ON(ret); 6636 if (ret && !err)
6637 err = ret;
6566 btrfs_btree_balance_dirty(root, nr); 6638 btrfs_btree_balance_dirty(root, nr);
6639
6640 return err;
6567} 6641}
6568 6642
6569/* 6643/*
@@ -6630,9 +6704,8 @@ struct inode *btrfs_alloc_inode(struct super_block *sb)
6630 ei->index_cnt = (u64)-1; 6704 ei->index_cnt = (u64)-1;
6631 ei->last_unlink_trans = 0; 6705 ei->last_unlink_trans = 0;
6632 6706
6633 spin_lock_init(&ei->accounting_lock);
6634 atomic_set(&ei->outstanding_extents, 0); 6707 atomic_set(&ei->outstanding_extents, 0);
6635 ei->reserved_extents = 0; 6708 atomic_set(&ei->reserved_extents, 0);
6636 6709
6637 ei->ordered_data_close = 0; 6710 ei->ordered_data_close = 0;
6638 ei->orphan_meta_reserved = 0; 6711 ei->orphan_meta_reserved = 0;
@@ -6668,7 +6741,7 @@ void btrfs_destroy_inode(struct inode *inode)
6668 WARN_ON(!list_empty(&inode->i_dentry)); 6741 WARN_ON(!list_empty(&inode->i_dentry));
6669 WARN_ON(inode->i_data.nrpages); 6742 WARN_ON(inode->i_data.nrpages);
6670 WARN_ON(atomic_read(&BTRFS_I(inode)->outstanding_extents)); 6743 WARN_ON(atomic_read(&BTRFS_I(inode)->outstanding_extents));
6671 WARN_ON(BTRFS_I(inode)->reserved_extents); 6744 WARN_ON(atomic_read(&BTRFS_I(inode)->reserved_extents));
6672 6745
6673 /* 6746 /*
6674 * This can happen where we create an inode, but somebody else also 6747 * This can happen where we create an inode, but somebody else also
@@ -6760,6 +6833,8 @@ void btrfs_destroy_cachep(void)
6760 kmem_cache_destroy(btrfs_transaction_cachep); 6833 kmem_cache_destroy(btrfs_transaction_cachep);
6761 if (btrfs_path_cachep) 6834 if (btrfs_path_cachep)
6762 kmem_cache_destroy(btrfs_path_cachep); 6835 kmem_cache_destroy(btrfs_path_cachep);
6836 if (btrfs_free_space_cachep)
6837 kmem_cache_destroy(btrfs_free_space_cachep);
6763} 6838}
6764 6839
6765int btrfs_init_cachep(void) 6840int btrfs_init_cachep(void)
@@ -6788,6 +6863,12 @@ int btrfs_init_cachep(void)
6788 if (!btrfs_path_cachep) 6863 if (!btrfs_path_cachep)
6789 goto fail; 6864 goto fail;
6790 6865
6866 btrfs_free_space_cachep = kmem_cache_create("btrfs_free_space_cache",
6867 sizeof(struct btrfs_free_space), 0,
6868 SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD, NULL);
6869 if (!btrfs_free_space_cachep)
6870 goto fail;
6871
6791 return 0; 6872 return 0;
6792fail: 6873fail:
6793 btrfs_destroy_cachep(); 6874 btrfs_destroy_cachep();
@@ -6806,6 +6887,26 @@ static int btrfs_getattr(struct vfsmount *mnt,
6806 return 0; 6887 return 0;
6807} 6888}
6808 6889
6890/*
6891 * If a file is moved, it will inherit the cow and compression flags of the new
6892 * directory.
6893 */
6894static void fixup_inode_flags(struct inode *dir, struct inode *inode)
6895{
6896 struct btrfs_inode *b_dir = BTRFS_I(dir);
6897 struct btrfs_inode *b_inode = BTRFS_I(inode);
6898
6899 if (b_dir->flags & BTRFS_INODE_NODATACOW)
6900 b_inode->flags |= BTRFS_INODE_NODATACOW;
6901 else
6902 b_inode->flags &= ~BTRFS_INODE_NODATACOW;
6903
6904 if (b_dir->flags & BTRFS_INODE_COMPRESS)
6905 b_inode->flags |= BTRFS_INODE_COMPRESS;
6906 else
6907 b_inode->flags &= ~BTRFS_INODE_COMPRESS;
6908}
6909
6809static int btrfs_rename(struct inode *old_dir, struct dentry *old_dentry, 6910static int btrfs_rename(struct inode *old_dir, struct dentry *old_dentry,
6810 struct inode *new_dir, struct dentry *new_dentry) 6911 struct inode *new_dir, struct dentry *new_dentry)
6811{ 6912{
@@ -6854,8 +6955,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. 6955 * should cover the worst case number of items we'll modify.
6855 */ 6956 */
6856 trans = btrfs_start_transaction(root, 20); 6957 trans = btrfs_start_transaction(root, 20);
6857 if (IS_ERR(trans)) 6958 if (IS_ERR(trans)) {
6858 return PTR_ERR(trans); 6959 ret = PTR_ERR(trans);
6960 goto out_notrans;
6961 }
6859 6962
6860 btrfs_set_trans_block_group(trans, new_dir); 6963 btrfs_set_trans_block_group(trans, new_dir);
6861 6964
@@ -6908,11 +7011,12 @@ static int btrfs_rename(struct inode *old_dir, struct dentry *old_dentry,
6908 old_dentry->d_name.name, 7011 old_dentry->d_name.name,
6909 old_dentry->d_name.len); 7012 old_dentry->d_name.len);
6910 } else { 7013 } else {
6911 btrfs_inc_nlink(old_dentry->d_inode); 7014 ret = __btrfs_unlink_inode(trans, root, old_dir,
6912 ret = btrfs_unlink_inode(trans, root, old_dir, 7015 old_dentry->d_inode,
6913 old_dentry->d_inode, 7016 old_dentry->d_name.name,
6914 old_dentry->d_name.name, 7017 old_dentry->d_name.len);
6915 old_dentry->d_name.len); 7018 if (!ret)
7019 ret = btrfs_update_inode(trans, root, old_inode);
6916 } 7020 }
6917 BUG_ON(ret); 7021 BUG_ON(ret);
6918 7022
@@ -6939,6 +7043,8 @@ static int btrfs_rename(struct inode *old_dir, struct dentry *old_dentry,
6939 } 7043 }
6940 } 7044 }
6941 7045
7046 fixup_inode_flags(new_dir, old_inode);
7047
6942 ret = btrfs_add_link(trans, new_dir, old_inode, 7048 ret = btrfs_add_link(trans, new_dir, old_inode,
6943 new_dentry->d_name.name, 7049 new_dentry->d_name.name,
6944 new_dentry->d_name.len, 0, index); 7050 new_dentry->d_name.len, 0, index);
@@ -6952,7 +7058,7 @@ static int btrfs_rename(struct inode *old_dir, struct dentry *old_dentry,
6952 } 7058 }
6953out_fail: 7059out_fail:
6954 btrfs_end_transaction_throttle(trans, root); 7060 btrfs_end_transaction_throttle(trans, root);
6955 7061out_notrans:
6956 if (old_inode->i_ino == BTRFS_FIRST_FREE_OBJECTID) 7062 if (old_inode->i_ino == BTRFS_FIRST_FREE_OBJECTID)
6957 up_read(&root->fs_info->subvol_sem); 7063 up_read(&root->fs_info->subvol_sem);
6958 7064
@@ -7355,7 +7461,6 @@ static const struct address_space_operations btrfs_symlink_aops = {
7355}; 7461};
7356 7462
7357static const struct inode_operations btrfs_file_inode_operations = { 7463static const struct inode_operations btrfs_file_inode_operations = {
7358 .truncate = btrfs_truncate,
7359 .getattr = btrfs_getattr, 7464 .getattr = btrfs_getattr,
7360 .setattr = btrfs_setattr, 7465 .setattr = btrfs_setattr,
7361 .setxattr = btrfs_setxattr, 7466 .setxattr = btrfs_setxattr,