diff options
Diffstat (limited to 'fs/btrfs/inode.c')
-rw-r--r-- | fs/btrfs/inode.c | 199 |
1 files changed, 91 insertions, 108 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index c41db6d45ab6..2bfdc641d4e3 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c | |||
@@ -36,6 +36,7 @@ | |||
36 | #include <linux/xattr.h> | 36 | #include <linux/xattr.h> |
37 | #include <linux/posix_acl.h> | 37 | #include <linux/posix_acl.h> |
38 | #include <linux/falloc.h> | 38 | #include <linux/falloc.h> |
39 | #include <linux/slab.h> | ||
39 | #include "compat.h" | 40 | #include "compat.h" |
40 | #include "ctree.h" | 41 | #include "ctree.h" |
41 | #include "disk-io.h" | 42 | #include "disk-io.h" |
@@ -379,7 +380,8 @@ again: | |||
379 | * change at any time if we discover bad compression ratios. | 380 | * change at any time if we discover bad compression ratios. |
380 | */ | 381 | */ |
381 | if (!(BTRFS_I(inode)->flags & BTRFS_INODE_NOCOMPRESS) && | 382 | if (!(BTRFS_I(inode)->flags & BTRFS_INODE_NOCOMPRESS) && |
382 | btrfs_test_opt(root, COMPRESS)) { | 383 | (btrfs_test_opt(root, COMPRESS) || |
384 | (BTRFS_I(inode)->force_compress))) { | ||
383 | WARN_ON(pages); | 385 | WARN_ON(pages); |
384 | pages = kzalloc(sizeof(struct page *) * nr_pages, GFP_NOFS); | 386 | pages = kzalloc(sizeof(struct page *) * nr_pages, GFP_NOFS); |
385 | 387 | ||
@@ -483,8 +485,10 @@ again: | |||
483 | nr_pages_ret = 0; | 485 | nr_pages_ret = 0; |
484 | 486 | ||
485 | /* flag the file so we don't compress in the future */ | 487 | /* flag the file so we don't compress in the future */ |
486 | if (!btrfs_test_opt(root, FORCE_COMPRESS)) | 488 | if (!btrfs_test_opt(root, FORCE_COMPRESS) && |
489 | !(BTRFS_I(inode)->force_compress)) { | ||
487 | BTRFS_I(inode)->flags |= BTRFS_INODE_NOCOMPRESS; | 490 | BTRFS_I(inode)->flags |= BTRFS_INODE_NOCOMPRESS; |
491 | } | ||
488 | } | 492 | } |
489 | if (will_compress) { | 493 | if (will_compress) { |
490 | *num_added += 1; | 494 | *num_added += 1; |
@@ -570,8 +574,8 @@ retry: | |||
570 | unsigned long nr_written = 0; | 574 | unsigned long nr_written = 0; |
571 | 575 | ||
572 | lock_extent(io_tree, async_extent->start, | 576 | lock_extent(io_tree, async_extent->start, |
573 | async_extent->start + | 577 | async_extent->start + |
574 | async_extent->ram_size - 1, GFP_NOFS); | 578 | async_extent->ram_size - 1, GFP_NOFS); |
575 | 579 | ||
576 | /* allocate blocks */ | 580 | /* allocate blocks */ |
577 | ret = cow_file_range(inode, async_cow->locked_page, | 581 | ret = cow_file_range(inode, async_cow->locked_page, |
@@ -793,7 +797,7 @@ static noinline int cow_file_range(struct inode *inode, | |||
793 | while (disk_num_bytes > 0) { | 797 | while (disk_num_bytes > 0) { |
794 | unsigned long op; | 798 | unsigned long op; |
795 | 799 | ||
796 | cur_alloc_size = min(disk_num_bytes, root->fs_info->max_extent); | 800 | cur_alloc_size = disk_num_bytes; |
797 | ret = btrfs_reserve_extent(trans, root, cur_alloc_size, | 801 | ret = btrfs_reserve_extent(trans, root, cur_alloc_size, |
798 | root->sectorsize, 0, alloc_hint, | 802 | root->sectorsize, 0, alloc_hint, |
799 | (u64)-1, &ins, 1); | 803 | (u64)-1, &ins, 1); |
@@ -1211,7 +1215,8 @@ static int run_delalloc_range(struct inode *inode, struct page *locked_page, | |||
1211 | else if (BTRFS_I(inode)->flags & BTRFS_INODE_PREALLOC) | 1215 | else if (BTRFS_I(inode)->flags & BTRFS_INODE_PREALLOC) |
1212 | ret = run_delalloc_nocow(inode, locked_page, start, end, | 1216 | ret = run_delalloc_nocow(inode, locked_page, start, end, |
1213 | page_started, 0, nr_written); | 1217 | page_started, 0, nr_written); |
1214 | else if (!btrfs_test_opt(root, COMPRESS)) | 1218 | else if (!btrfs_test_opt(root, COMPRESS) && |
1219 | !(BTRFS_I(inode)->force_compress)) | ||
1215 | ret = cow_file_range(inode, locked_page, start, end, | 1220 | ret = cow_file_range(inode, locked_page, start, end, |
1216 | page_started, nr_written, 1); | 1221 | page_started, nr_written, 1); |
1217 | else | 1222 | else |
@@ -1223,30 +1228,9 @@ static int run_delalloc_range(struct inode *inode, struct page *locked_page, | |||
1223 | static int btrfs_split_extent_hook(struct inode *inode, | 1228 | static int btrfs_split_extent_hook(struct inode *inode, |
1224 | struct extent_state *orig, u64 split) | 1229 | struct extent_state *orig, u64 split) |
1225 | { | 1230 | { |
1226 | struct btrfs_root *root = BTRFS_I(inode)->root; | ||
1227 | u64 size; | ||
1228 | |||
1229 | if (!(orig->state & EXTENT_DELALLOC)) | 1231 | if (!(orig->state & EXTENT_DELALLOC)) |
1230 | return 0; | 1232 | return 0; |
1231 | 1233 | ||
1232 | size = orig->end - orig->start + 1; | ||
1233 | if (size > root->fs_info->max_extent) { | ||
1234 | u64 num_extents; | ||
1235 | u64 new_size; | ||
1236 | |||
1237 | new_size = orig->end - split + 1; | ||
1238 | num_extents = div64_u64(size + root->fs_info->max_extent - 1, | ||
1239 | root->fs_info->max_extent); | ||
1240 | |||
1241 | /* | ||
1242 | * if we break a large extent up then leave oustanding_extents | ||
1243 | * be, since we've already accounted for the large extent. | ||
1244 | */ | ||
1245 | if (div64_u64(new_size + root->fs_info->max_extent - 1, | ||
1246 | root->fs_info->max_extent) < num_extents) | ||
1247 | return 0; | ||
1248 | } | ||
1249 | |||
1250 | spin_lock(&BTRFS_I(inode)->accounting_lock); | 1234 | spin_lock(&BTRFS_I(inode)->accounting_lock); |
1251 | BTRFS_I(inode)->outstanding_extents++; | 1235 | BTRFS_I(inode)->outstanding_extents++; |
1252 | spin_unlock(&BTRFS_I(inode)->accounting_lock); | 1236 | spin_unlock(&BTRFS_I(inode)->accounting_lock); |
@@ -1264,38 +1248,10 @@ static int btrfs_merge_extent_hook(struct inode *inode, | |||
1264 | struct extent_state *new, | 1248 | struct extent_state *new, |
1265 | struct extent_state *other) | 1249 | struct extent_state *other) |
1266 | { | 1250 | { |
1267 | struct btrfs_root *root = BTRFS_I(inode)->root; | ||
1268 | u64 new_size, old_size; | ||
1269 | u64 num_extents; | ||
1270 | |||
1271 | /* not delalloc, ignore it */ | 1251 | /* not delalloc, ignore it */ |
1272 | if (!(other->state & EXTENT_DELALLOC)) | 1252 | if (!(other->state & EXTENT_DELALLOC)) |
1273 | return 0; | 1253 | return 0; |
1274 | 1254 | ||
1275 | old_size = other->end - other->start + 1; | ||
1276 | if (new->start < other->start) | ||
1277 | new_size = other->end - new->start + 1; | ||
1278 | else | ||
1279 | new_size = new->end - other->start + 1; | ||
1280 | |||
1281 | /* we're not bigger than the max, unreserve the space and go */ | ||
1282 | if (new_size <= root->fs_info->max_extent) { | ||
1283 | spin_lock(&BTRFS_I(inode)->accounting_lock); | ||
1284 | BTRFS_I(inode)->outstanding_extents--; | ||
1285 | spin_unlock(&BTRFS_I(inode)->accounting_lock); | ||
1286 | return 0; | ||
1287 | } | ||
1288 | |||
1289 | /* | ||
1290 | * If we grew by another max_extent, just return, we want to keep that | ||
1291 | * reserved amount. | ||
1292 | */ | ||
1293 | num_extents = div64_u64(old_size + root->fs_info->max_extent - 1, | ||
1294 | root->fs_info->max_extent); | ||
1295 | if (div64_u64(new_size + root->fs_info->max_extent - 1, | ||
1296 | root->fs_info->max_extent) > num_extents) | ||
1297 | return 0; | ||
1298 | |||
1299 | spin_lock(&BTRFS_I(inode)->accounting_lock); | 1255 | spin_lock(&BTRFS_I(inode)->accounting_lock); |
1300 | BTRFS_I(inode)->outstanding_extents--; | 1256 | BTRFS_I(inode)->outstanding_extents--; |
1301 | spin_unlock(&BTRFS_I(inode)->accounting_lock); | 1257 | spin_unlock(&BTRFS_I(inode)->accounting_lock); |
@@ -1324,6 +1280,7 @@ static int btrfs_set_bit_hook(struct inode *inode, u64 start, u64 end, | |||
1324 | BTRFS_I(inode)->outstanding_extents++; | 1280 | BTRFS_I(inode)->outstanding_extents++; |
1325 | spin_unlock(&BTRFS_I(inode)->accounting_lock); | 1281 | spin_unlock(&BTRFS_I(inode)->accounting_lock); |
1326 | btrfs_delalloc_reserve_space(root, inode, end - start + 1); | 1282 | btrfs_delalloc_reserve_space(root, inode, end - start + 1); |
1283 | |||
1327 | spin_lock(&root->fs_info->delalloc_lock); | 1284 | spin_lock(&root->fs_info->delalloc_lock); |
1328 | BTRFS_I(inode)->delalloc_bytes += end - start + 1; | 1285 | BTRFS_I(inode)->delalloc_bytes += end - start + 1; |
1329 | root->fs_info->delalloc_bytes += end - start + 1; | 1286 | root->fs_info->delalloc_bytes += end - start + 1; |
@@ -1352,6 +1309,7 @@ static int btrfs_clear_bit_hook(struct inode *inode, | |||
1352 | 1309 | ||
1353 | if (bits & EXTENT_DO_ACCOUNTING) { | 1310 | if (bits & EXTENT_DO_ACCOUNTING) { |
1354 | spin_lock(&BTRFS_I(inode)->accounting_lock); | 1311 | spin_lock(&BTRFS_I(inode)->accounting_lock); |
1312 | WARN_ON(!BTRFS_I(inode)->outstanding_extents); | ||
1355 | BTRFS_I(inode)->outstanding_extents--; | 1313 | BTRFS_I(inode)->outstanding_extents--; |
1356 | spin_unlock(&BTRFS_I(inode)->accounting_lock); | 1314 | spin_unlock(&BTRFS_I(inode)->accounting_lock); |
1357 | btrfs_unreserve_metadata_for_delalloc(root, inode, 1); | 1315 | btrfs_unreserve_metadata_for_delalloc(root, inode, 1); |
@@ -1508,12 +1466,13 @@ static noinline int add_pending_csums(struct btrfs_trans_handle *trans, | |||
1508 | return 0; | 1466 | return 0; |
1509 | } | 1467 | } |
1510 | 1468 | ||
1511 | int btrfs_set_extent_delalloc(struct inode *inode, u64 start, u64 end) | 1469 | int btrfs_set_extent_delalloc(struct inode *inode, u64 start, u64 end, |
1470 | struct extent_state **cached_state) | ||
1512 | { | 1471 | { |
1513 | if ((end & (PAGE_CACHE_SIZE - 1)) == 0) | 1472 | if ((end & (PAGE_CACHE_SIZE - 1)) == 0) |
1514 | WARN_ON(1); | 1473 | WARN_ON(1); |
1515 | return set_extent_delalloc(&BTRFS_I(inode)->io_tree, start, end, | 1474 | return set_extent_delalloc(&BTRFS_I(inode)->io_tree, start, end, |
1516 | GFP_NOFS); | 1475 | cached_state, GFP_NOFS); |
1517 | } | 1476 | } |
1518 | 1477 | ||
1519 | /* see btrfs_writepage_start_hook for details on why this is required */ | 1478 | /* see btrfs_writepage_start_hook for details on why this is required */ |
@@ -1526,6 +1485,7 @@ static void btrfs_writepage_fixup_worker(struct btrfs_work *work) | |||
1526 | { | 1485 | { |
1527 | struct btrfs_writepage_fixup *fixup; | 1486 | struct btrfs_writepage_fixup *fixup; |
1528 | struct btrfs_ordered_extent *ordered; | 1487 | struct btrfs_ordered_extent *ordered; |
1488 | struct extent_state *cached_state = NULL; | ||
1529 | struct page *page; | 1489 | struct page *page; |
1530 | struct inode *inode; | 1490 | struct inode *inode; |
1531 | u64 page_start; | 1491 | u64 page_start; |
@@ -1544,7 +1504,8 @@ again: | |||
1544 | page_start = page_offset(page); | 1504 | page_start = page_offset(page); |
1545 | page_end = page_offset(page) + PAGE_CACHE_SIZE - 1; | 1505 | page_end = page_offset(page) + PAGE_CACHE_SIZE - 1; |
1546 | 1506 | ||
1547 | lock_extent(&BTRFS_I(inode)->io_tree, page_start, page_end, GFP_NOFS); | 1507 | lock_extent_bits(&BTRFS_I(inode)->io_tree, page_start, page_end, 0, |
1508 | &cached_state, GFP_NOFS); | ||
1548 | 1509 | ||
1549 | /* already ordered? We're done */ | 1510 | /* already ordered? We're done */ |
1550 | if (PagePrivate2(page)) | 1511 | if (PagePrivate2(page)) |
@@ -1552,17 +1513,18 @@ again: | |||
1552 | 1513 | ||
1553 | ordered = btrfs_lookup_ordered_extent(inode, page_start); | 1514 | ordered = btrfs_lookup_ordered_extent(inode, page_start); |
1554 | if (ordered) { | 1515 | if (ordered) { |
1555 | unlock_extent(&BTRFS_I(inode)->io_tree, page_start, | 1516 | unlock_extent_cached(&BTRFS_I(inode)->io_tree, page_start, |
1556 | page_end, GFP_NOFS); | 1517 | page_end, &cached_state, GFP_NOFS); |
1557 | unlock_page(page); | 1518 | unlock_page(page); |
1558 | btrfs_start_ordered_extent(inode, ordered, 1); | 1519 | btrfs_start_ordered_extent(inode, ordered, 1); |
1559 | goto again; | 1520 | goto again; |
1560 | } | 1521 | } |
1561 | 1522 | ||
1562 | btrfs_set_extent_delalloc(inode, page_start, page_end); | 1523 | btrfs_set_extent_delalloc(inode, page_start, page_end, &cached_state); |
1563 | ClearPageChecked(page); | 1524 | ClearPageChecked(page); |
1564 | out: | 1525 | out: |
1565 | unlock_extent(&BTRFS_I(inode)->io_tree, page_start, page_end, GFP_NOFS); | 1526 | unlock_extent_cached(&BTRFS_I(inode)->io_tree, page_start, page_end, |
1527 | &cached_state, GFP_NOFS); | ||
1566 | out_page: | 1528 | out_page: |
1567 | unlock_page(page); | 1529 | unlock_page(page); |
1568 | page_cache_release(page); | 1530 | page_cache_release(page); |
@@ -1691,14 +1653,14 @@ static int btrfs_finish_ordered_io(struct inode *inode, u64 start, u64 end) | |||
1691 | struct btrfs_trans_handle *trans; | 1653 | struct btrfs_trans_handle *trans; |
1692 | struct btrfs_ordered_extent *ordered_extent = NULL; | 1654 | struct btrfs_ordered_extent *ordered_extent = NULL; |
1693 | struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree; | 1655 | struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree; |
1656 | struct extent_state *cached_state = NULL; | ||
1694 | int compressed = 0; | 1657 | int compressed = 0; |
1695 | int ret; | 1658 | int ret; |
1696 | 1659 | ||
1697 | ret = btrfs_dec_test_ordered_pending(inode, start, end - start + 1); | 1660 | ret = btrfs_dec_test_ordered_pending(inode, &ordered_extent, start, |
1661 | end - start + 1); | ||
1698 | if (!ret) | 1662 | if (!ret) |
1699 | return 0; | 1663 | return 0; |
1700 | |||
1701 | ordered_extent = btrfs_lookup_ordered_extent(inode, start); | ||
1702 | BUG_ON(!ordered_extent); | 1664 | BUG_ON(!ordered_extent); |
1703 | 1665 | ||
1704 | if (test_bit(BTRFS_ORDERED_NOCOW, &ordered_extent->flags)) { | 1666 | if (test_bit(BTRFS_ORDERED_NOCOW, &ordered_extent->flags)) { |
@@ -1713,9 +1675,9 @@ static int btrfs_finish_ordered_io(struct inode *inode, u64 start, u64 end) | |||
1713 | goto out; | 1675 | goto out; |
1714 | } | 1676 | } |
1715 | 1677 | ||
1716 | lock_extent(io_tree, ordered_extent->file_offset, | 1678 | lock_extent_bits(io_tree, ordered_extent->file_offset, |
1717 | ordered_extent->file_offset + ordered_extent->len - 1, | 1679 | ordered_extent->file_offset + ordered_extent->len - 1, |
1718 | GFP_NOFS); | 1680 | 0, &cached_state, GFP_NOFS); |
1719 | 1681 | ||
1720 | trans = btrfs_join_transaction(root, 1); | 1682 | trans = btrfs_join_transaction(root, 1); |
1721 | 1683 | ||
@@ -1742,9 +1704,10 @@ static int btrfs_finish_ordered_io(struct inode *inode, u64 start, u64 end) | |||
1742 | ordered_extent->len); | 1704 | ordered_extent->len); |
1743 | BUG_ON(ret); | 1705 | BUG_ON(ret); |
1744 | } | 1706 | } |
1745 | unlock_extent(io_tree, ordered_extent->file_offset, | 1707 | unlock_extent_cached(io_tree, ordered_extent->file_offset, |
1746 | ordered_extent->file_offset + ordered_extent->len - 1, | 1708 | ordered_extent->file_offset + |
1747 | GFP_NOFS); | 1709 | ordered_extent->len - 1, &cached_state, GFP_NOFS); |
1710 | |||
1748 | add_pending_csums(trans, inode, ordered_extent->file_offset, | 1711 | add_pending_csums(trans, inode, ordered_extent->file_offset, |
1749 | &ordered_extent->list); | 1712 | &ordered_extent->list); |
1750 | 1713 | ||
@@ -2153,7 +2116,7 @@ void btrfs_orphan_cleanup(struct btrfs_root *root) | |||
2153 | found_key.objectid = found_key.offset; | 2116 | found_key.objectid = found_key.offset; |
2154 | found_key.type = BTRFS_INODE_ITEM_KEY; | 2117 | found_key.type = BTRFS_INODE_ITEM_KEY; |
2155 | found_key.offset = 0; | 2118 | found_key.offset = 0; |
2156 | inode = btrfs_iget(root->fs_info->sb, &found_key, root); | 2119 | inode = btrfs_iget(root->fs_info->sb, &found_key, root, NULL); |
2157 | if (IS_ERR(inode)) | 2120 | if (IS_ERR(inode)) |
2158 | break; | 2121 | break; |
2159 | 2122 | ||
@@ -3081,6 +3044,7 @@ static int btrfs_truncate_page(struct address_space *mapping, loff_t from) | |||
3081 | struct btrfs_root *root = BTRFS_I(inode)->root; | 3044 | struct btrfs_root *root = BTRFS_I(inode)->root; |
3082 | struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree; | 3045 | struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree; |
3083 | struct btrfs_ordered_extent *ordered; | 3046 | struct btrfs_ordered_extent *ordered; |
3047 | struct extent_state *cached_state = NULL; | ||
3084 | char *kaddr; | 3048 | char *kaddr; |
3085 | u32 blocksize = root->sectorsize; | 3049 | u32 blocksize = root->sectorsize; |
3086 | pgoff_t index = from >> PAGE_CACHE_SHIFT; | 3050 | pgoff_t index = from >> PAGE_CACHE_SHIFT; |
@@ -3127,12 +3091,14 @@ again: | |||
3127 | } | 3091 | } |
3128 | wait_on_page_writeback(page); | 3092 | wait_on_page_writeback(page); |
3129 | 3093 | ||
3130 | lock_extent(io_tree, page_start, page_end, GFP_NOFS); | 3094 | lock_extent_bits(io_tree, page_start, page_end, 0, &cached_state, |
3095 | GFP_NOFS); | ||
3131 | set_page_extent_mapped(page); | 3096 | set_page_extent_mapped(page); |
3132 | 3097 | ||
3133 | ordered = btrfs_lookup_ordered_extent(inode, page_start); | 3098 | ordered = btrfs_lookup_ordered_extent(inode, page_start); |
3134 | if (ordered) { | 3099 | if (ordered) { |
3135 | unlock_extent(io_tree, page_start, page_end, GFP_NOFS); | 3100 | unlock_extent_cached(io_tree, page_start, page_end, |
3101 | &cached_state, GFP_NOFS); | ||
3136 | unlock_page(page); | 3102 | unlock_page(page); |
3137 | page_cache_release(page); | 3103 | page_cache_release(page); |
3138 | btrfs_start_ordered_extent(inode, ordered, 1); | 3104 | btrfs_start_ordered_extent(inode, ordered, 1); |
@@ -3140,13 +3106,15 @@ again: | |||
3140 | goto again; | 3106 | goto again; |
3141 | } | 3107 | } |
3142 | 3108 | ||
3143 | clear_extent_bits(&BTRFS_I(inode)->io_tree, page_start, page_end, | 3109 | clear_extent_bit(&BTRFS_I(inode)->io_tree, page_start, page_end, |
3144 | EXTENT_DIRTY | EXTENT_DELALLOC | EXTENT_DO_ACCOUNTING, | 3110 | EXTENT_DIRTY | EXTENT_DELALLOC | EXTENT_DO_ACCOUNTING, |
3145 | GFP_NOFS); | 3111 | 0, 0, &cached_state, GFP_NOFS); |
3146 | 3112 | ||
3147 | ret = btrfs_set_extent_delalloc(inode, page_start, page_end); | 3113 | ret = btrfs_set_extent_delalloc(inode, page_start, page_end, |
3114 | &cached_state); | ||
3148 | if (ret) { | 3115 | if (ret) { |
3149 | unlock_extent(io_tree, page_start, page_end, GFP_NOFS); | 3116 | unlock_extent_cached(io_tree, page_start, page_end, |
3117 | &cached_state, GFP_NOFS); | ||
3150 | goto out_unlock; | 3118 | goto out_unlock; |
3151 | } | 3119 | } |
3152 | 3120 | ||
@@ -3159,7 +3127,8 @@ again: | |||
3159 | } | 3127 | } |
3160 | ClearPageChecked(page); | 3128 | ClearPageChecked(page); |
3161 | set_page_dirty(page); | 3129 | set_page_dirty(page); |
3162 | unlock_extent(io_tree, page_start, page_end, GFP_NOFS); | 3130 | unlock_extent_cached(io_tree, page_start, page_end, &cached_state, |
3131 | GFP_NOFS); | ||
3163 | 3132 | ||
3164 | out_unlock: | 3133 | out_unlock: |
3165 | if (ret) | 3134 | if (ret) |
@@ -3177,6 +3146,7 @@ int btrfs_cont_expand(struct inode *inode, loff_t size) | |||
3177 | struct btrfs_root *root = BTRFS_I(inode)->root; | 3146 | struct btrfs_root *root = BTRFS_I(inode)->root; |
3178 | struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree; | 3147 | struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree; |
3179 | struct extent_map *em; | 3148 | struct extent_map *em; |
3149 | struct extent_state *cached_state = NULL; | ||
3180 | u64 mask = root->sectorsize - 1; | 3150 | u64 mask = root->sectorsize - 1; |
3181 | u64 hole_start = (inode->i_size + mask) & ~mask; | 3151 | u64 hole_start = (inode->i_size + mask) & ~mask; |
3182 | u64 block_end = (size + mask) & ~mask; | 3152 | u64 block_end = (size + mask) & ~mask; |
@@ -3192,11 +3162,13 @@ int btrfs_cont_expand(struct inode *inode, loff_t size) | |||
3192 | struct btrfs_ordered_extent *ordered; | 3162 | struct btrfs_ordered_extent *ordered; |
3193 | btrfs_wait_ordered_range(inode, hole_start, | 3163 | btrfs_wait_ordered_range(inode, hole_start, |
3194 | block_end - hole_start); | 3164 | block_end - hole_start); |
3195 | lock_extent(io_tree, hole_start, block_end - 1, GFP_NOFS); | 3165 | lock_extent_bits(io_tree, hole_start, block_end - 1, 0, |
3166 | &cached_state, GFP_NOFS); | ||
3196 | ordered = btrfs_lookup_ordered_extent(inode, hole_start); | 3167 | ordered = btrfs_lookup_ordered_extent(inode, hole_start); |
3197 | if (!ordered) | 3168 | if (!ordered) |
3198 | break; | 3169 | break; |
3199 | unlock_extent(io_tree, hole_start, block_end - 1, GFP_NOFS); | 3170 | unlock_extent_cached(io_tree, hole_start, block_end - 1, |
3171 | &cached_state, GFP_NOFS); | ||
3200 | btrfs_put_ordered_extent(ordered); | 3172 | btrfs_put_ordered_extent(ordered); |
3201 | } | 3173 | } |
3202 | 3174 | ||
@@ -3241,7 +3213,8 @@ int btrfs_cont_expand(struct inode *inode, loff_t size) | |||
3241 | break; | 3213 | break; |
3242 | } | 3214 | } |
3243 | 3215 | ||
3244 | unlock_extent(io_tree, hole_start, block_end - 1, GFP_NOFS); | 3216 | unlock_extent_cached(io_tree, hole_start, block_end - 1, &cached_state, |
3217 | GFP_NOFS); | ||
3245 | return err; | 3218 | return err; |
3246 | } | 3219 | } |
3247 | 3220 | ||
@@ -3639,6 +3612,7 @@ static noinline void init_btrfs_i(struct inode *inode) | |||
3639 | bi->index_cnt = (u64)-1; | 3612 | bi->index_cnt = (u64)-1; |
3640 | bi->last_unlink_trans = 0; | 3613 | bi->last_unlink_trans = 0; |
3641 | bi->ordered_data_close = 0; | 3614 | bi->ordered_data_close = 0; |
3615 | bi->force_compress = 0; | ||
3642 | extent_map_tree_init(&BTRFS_I(inode)->extent_tree, GFP_NOFS); | 3616 | extent_map_tree_init(&BTRFS_I(inode)->extent_tree, GFP_NOFS); |
3643 | extent_io_tree_init(&BTRFS_I(inode)->io_tree, | 3617 | extent_io_tree_init(&BTRFS_I(inode)->io_tree, |
3644 | inode->i_mapping, GFP_NOFS); | 3618 | inode->i_mapping, GFP_NOFS); |
@@ -3687,7 +3661,7 @@ static struct inode *btrfs_iget_locked(struct super_block *s, | |||
3687 | * Returns in *is_new if the inode was read from disk | 3661 | * Returns in *is_new if the inode was read from disk |
3688 | */ | 3662 | */ |
3689 | struct inode *btrfs_iget(struct super_block *s, struct btrfs_key *location, | 3663 | struct inode *btrfs_iget(struct super_block *s, struct btrfs_key *location, |
3690 | struct btrfs_root *root) | 3664 | struct btrfs_root *root, int *new) |
3691 | { | 3665 | { |
3692 | struct inode *inode; | 3666 | struct inode *inode; |
3693 | 3667 | ||
@@ -3702,6 +3676,8 @@ struct inode *btrfs_iget(struct super_block *s, struct btrfs_key *location, | |||
3702 | 3676 | ||
3703 | inode_tree_add(inode); | 3677 | inode_tree_add(inode); |
3704 | unlock_new_inode(inode); | 3678 | unlock_new_inode(inode); |
3679 | if (new) | ||
3680 | *new = 1; | ||
3705 | } | 3681 | } |
3706 | 3682 | ||
3707 | return inode; | 3683 | return inode; |
@@ -3754,7 +3730,7 @@ struct inode *btrfs_lookup_dentry(struct inode *dir, struct dentry *dentry) | |||
3754 | return NULL; | 3730 | return NULL; |
3755 | 3731 | ||
3756 | if (location.type == BTRFS_INODE_ITEM_KEY) { | 3732 | if (location.type == BTRFS_INODE_ITEM_KEY) { |
3757 | inode = btrfs_iget(dir->i_sb, &location, root); | 3733 | inode = btrfs_iget(dir->i_sb, &location, root, NULL); |
3758 | return inode; | 3734 | return inode; |
3759 | } | 3735 | } |
3760 | 3736 | ||
@@ -3769,7 +3745,7 @@ struct inode *btrfs_lookup_dentry(struct inode *dir, struct dentry *dentry) | |||
3769 | else | 3745 | else |
3770 | inode = new_simple_dir(dir->i_sb, &location, sub_root); | 3746 | inode = new_simple_dir(dir->i_sb, &location, sub_root); |
3771 | } else { | 3747 | } else { |
3772 | inode = btrfs_iget(dir->i_sb, &location, sub_root); | 3748 | inode = btrfs_iget(dir->i_sb, &location, sub_root, NULL); |
3773 | } | 3749 | } |
3774 | srcu_read_unlock(&root->fs_info->subvol_srcu, index); | 3750 | srcu_read_unlock(&root->fs_info->subvol_srcu, index); |
3775 | 3751 | ||
@@ -4501,7 +4477,7 @@ static int btrfs_mkdir(struct inode *dir, struct dentry *dentry, int mode) | |||
4501 | err = btrfs_find_free_objectid(trans, root, dir->i_ino, &objectid); | 4477 | err = btrfs_find_free_objectid(trans, root, dir->i_ino, &objectid); |
4502 | if (err) { | 4478 | if (err) { |
4503 | err = -ENOSPC; | 4479 | err = -ENOSPC; |
4504 | goto out_unlock; | 4480 | goto out_fail; |
4505 | } | 4481 | } |
4506 | 4482 | ||
4507 | inode = btrfs_new_inode(trans, root, dir, dentry->d_name.name, | 4483 | inode = btrfs_new_inode(trans, root, dir, dentry->d_name.name, |
@@ -4979,6 +4955,7 @@ static void btrfs_invalidatepage(struct page *page, unsigned long offset) | |||
4979 | { | 4955 | { |
4980 | struct extent_io_tree *tree; | 4956 | struct extent_io_tree *tree; |
4981 | struct btrfs_ordered_extent *ordered; | 4957 | struct btrfs_ordered_extent *ordered; |
4958 | struct extent_state *cached_state = NULL; | ||
4982 | u64 page_start = page_offset(page); | 4959 | u64 page_start = page_offset(page); |
4983 | u64 page_end = page_start + PAGE_CACHE_SIZE - 1; | 4960 | u64 page_end = page_start + PAGE_CACHE_SIZE - 1; |
4984 | 4961 | ||
@@ -4997,7 +4974,8 @@ static void btrfs_invalidatepage(struct page *page, unsigned long offset) | |||
4997 | btrfs_releasepage(page, GFP_NOFS); | 4974 | btrfs_releasepage(page, GFP_NOFS); |
4998 | return; | 4975 | return; |
4999 | } | 4976 | } |
5000 | lock_extent(tree, page_start, page_end, GFP_NOFS); | 4977 | lock_extent_bits(tree, page_start, page_end, 0, &cached_state, |
4978 | GFP_NOFS); | ||
5001 | ordered = btrfs_lookup_ordered_extent(page->mapping->host, | 4979 | ordered = btrfs_lookup_ordered_extent(page->mapping->host, |
5002 | page_offset(page)); | 4980 | page_offset(page)); |
5003 | if (ordered) { | 4981 | if (ordered) { |
@@ -5008,7 +4986,7 @@ static void btrfs_invalidatepage(struct page *page, unsigned long offset) | |||
5008 | clear_extent_bit(tree, page_start, page_end, | 4986 | clear_extent_bit(tree, page_start, page_end, |
5009 | EXTENT_DIRTY | EXTENT_DELALLOC | | 4987 | EXTENT_DIRTY | EXTENT_DELALLOC | |
5010 | EXTENT_LOCKED | EXTENT_DO_ACCOUNTING, 1, 0, | 4988 | EXTENT_LOCKED | EXTENT_DO_ACCOUNTING, 1, 0, |
5011 | NULL, GFP_NOFS); | 4989 | &cached_state, GFP_NOFS); |
5012 | /* | 4990 | /* |
5013 | * whoever cleared the private bit is responsible | 4991 | * whoever cleared the private bit is responsible |
5014 | * for the finish_ordered_io | 4992 | * for the finish_ordered_io |
@@ -5018,11 +4996,13 @@ static void btrfs_invalidatepage(struct page *page, unsigned long offset) | |||
5018 | page_start, page_end); | 4996 | page_start, page_end); |
5019 | } | 4997 | } |
5020 | btrfs_put_ordered_extent(ordered); | 4998 | btrfs_put_ordered_extent(ordered); |
5021 | lock_extent(tree, page_start, page_end, GFP_NOFS); | 4999 | cached_state = NULL; |
5000 | lock_extent_bits(tree, page_start, page_end, 0, &cached_state, | ||
5001 | GFP_NOFS); | ||
5022 | } | 5002 | } |
5023 | clear_extent_bit(tree, page_start, page_end, | 5003 | clear_extent_bit(tree, page_start, page_end, |
5024 | EXTENT_LOCKED | EXTENT_DIRTY | EXTENT_DELALLOC | | 5004 | EXTENT_LOCKED | EXTENT_DIRTY | EXTENT_DELALLOC | |
5025 | EXTENT_DO_ACCOUNTING, 1, 1, NULL, GFP_NOFS); | 5005 | EXTENT_DO_ACCOUNTING, 1, 1, &cached_state, GFP_NOFS); |
5026 | __btrfs_releasepage(page, GFP_NOFS); | 5006 | __btrfs_releasepage(page, GFP_NOFS); |
5027 | 5007 | ||
5028 | ClearPageChecked(page); | 5008 | ClearPageChecked(page); |
@@ -5055,6 +5035,7 @@ int btrfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) | |||
5055 | struct btrfs_root *root = BTRFS_I(inode)->root; | 5035 | struct btrfs_root *root = BTRFS_I(inode)->root; |
5056 | struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree; | 5036 | struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree; |
5057 | struct btrfs_ordered_extent *ordered; | 5037 | struct btrfs_ordered_extent *ordered; |
5038 | struct extent_state *cached_state = NULL; | ||
5058 | char *kaddr; | 5039 | char *kaddr; |
5059 | unsigned long zero_start; | 5040 | unsigned long zero_start; |
5060 | loff_t size; | 5041 | loff_t size; |
@@ -5093,7 +5074,8 @@ again: | |||
5093 | } | 5074 | } |
5094 | wait_on_page_writeback(page); | 5075 | wait_on_page_writeback(page); |
5095 | 5076 | ||
5096 | lock_extent(io_tree, page_start, page_end, GFP_NOFS); | 5077 | lock_extent_bits(io_tree, page_start, page_end, 0, &cached_state, |
5078 | GFP_NOFS); | ||
5097 | set_page_extent_mapped(page); | 5079 | set_page_extent_mapped(page); |
5098 | 5080 | ||
5099 | /* | 5081 | /* |
@@ -5102,7 +5084,8 @@ again: | |||
5102 | */ | 5084 | */ |
5103 | ordered = btrfs_lookup_ordered_extent(inode, page_start); | 5085 | ordered = btrfs_lookup_ordered_extent(inode, page_start); |
5104 | if (ordered) { | 5086 | if (ordered) { |
5105 | unlock_extent(io_tree, page_start, page_end, GFP_NOFS); | 5087 | unlock_extent_cached(io_tree, page_start, page_end, |
5088 | &cached_state, GFP_NOFS); | ||
5106 | unlock_page(page); | 5089 | unlock_page(page); |
5107 | btrfs_start_ordered_extent(inode, ordered, 1); | 5090 | btrfs_start_ordered_extent(inode, ordered, 1); |
5108 | btrfs_put_ordered_extent(ordered); | 5091 | btrfs_put_ordered_extent(ordered); |
@@ -5116,13 +5099,15 @@ again: | |||
5116 | * is probably a better way to do this, but for now keep consistent with | 5099 | * is probably a better way to do this, but for now keep consistent with |
5117 | * prepare_pages in the normal write path. | 5100 | * prepare_pages in the normal write path. |
5118 | */ | 5101 | */ |
5119 | clear_extent_bits(&BTRFS_I(inode)->io_tree, page_start, page_end, | 5102 | clear_extent_bit(&BTRFS_I(inode)->io_tree, page_start, page_end, |
5120 | EXTENT_DIRTY | EXTENT_DELALLOC | EXTENT_DO_ACCOUNTING, | 5103 | EXTENT_DIRTY | EXTENT_DELALLOC | EXTENT_DO_ACCOUNTING, |
5121 | GFP_NOFS); | 5104 | 0, 0, &cached_state, GFP_NOFS); |
5122 | 5105 | ||
5123 | ret = btrfs_set_extent_delalloc(inode, page_start, page_end); | 5106 | ret = btrfs_set_extent_delalloc(inode, page_start, page_end, |
5107 | &cached_state); | ||
5124 | if (ret) { | 5108 | if (ret) { |
5125 | unlock_extent(io_tree, page_start, page_end, GFP_NOFS); | 5109 | unlock_extent_cached(io_tree, page_start, page_end, |
5110 | &cached_state, GFP_NOFS); | ||
5126 | ret = VM_FAULT_SIGBUS; | 5111 | ret = VM_FAULT_SIGBUS; |
5127 | btrfs_free_reserved_data_space(root, inode, PAGE_CACHE_SIZE); | 5112 | btrfs_free_reserved_data_space(root, inode, PAGE_CACHE_SIZE); |
5128 | goto out_unlock; | 5113 | goto out_unlock; |
@@ -5148,7 +5133,7 @@ again: | |||
5148 | BTRFS_I(inode)->last_trans = root->fs_info->generation; | 5133 | BTRFS_I(inode)->last_trans = root->fs_info->generation; |
5149 | BTRFS_I(inode)->last_sub_trans = BTRFS_I(inode)->root->log_transid; | 5134 | BTRFS_I(inode)->last_sub_trans = BTRFS_I(inode)->root->log_transid; |
5150 | 5135 | ||
5151 | unlock_extent(io_tree, page_start, page_end, GFP_NOFS); | 5136 | unlock_extent_cached(io_tree, page_start, page_end, &cached_state, GFP_NOFS); |
5152 | 5137 | ||
5153 | out_unlock: | 5138 | out_unlock: |
5154 | btrfs_unreserve_metadata_for_delalloc(root, inode, 1); | 5139 | btrfs_unreserve_metadata_for_delalloc(root, inode, 1); |
@@ -5353,7 +5338,6 @@ free: | |||
5353 | void btrfs_drop_inode(struct inode *inode) | 5338 | void btrfs_drop_inode(struct inode *inode) |
5354 | { | 5339 | { |
5355 | struct btrfs_root *root = BTRFS_I(inode)->root; | 5340 | struct btrfs_root *root = BTRFS_I(inode)->root; |
5356 | |||
5357 | if (inode->i_nlink > 0 && btrfs_root_refs(&root->root_item) == 0) | 5341 | if (inode->i_nlink > 0 && btrfs_root_refs(&root->root_item) == 0) |
5358 | generic_delete_inode(inode); | 5342 | generic_delete_inode(inode); |
5359 | else | 5343 | else |
@@ -5757,18 +5741,15 @@ static int prealloc_file_range(struct inode *inode, u64 start, u64 end, | |||
5757 | struct btrfs_trans_handle *trans; | 5741 | struct btrfs_trans_handle *trans; |
5758 | struct btrfs_root *root = BTRFS_I(inode)->root; | 5742 | struct btrfs_root *root = BTRFS_I(inode)->root; |
5759 | struct btrfs_key ins; | 5743 | struct btrfs_key ins; |
5760 | u64 alloc_size; | ||
5761 | u64 cur_offset = start; | 5744 | u64 cur_offset = start; |
5762 | u64 num_bytes = end - start; | 5745 | u64 num_bytes = end - start; |
5763 | int ret = 0; | 5746 | int ret = 0; |
5764 | u64 i_size; | 5747 | u64 i_size; |
5765 | 5748 | ||
5766 | while (num_bytes > 0) { | 5749 | while (num_bytes > 0) { |
5767 | alloc_size = min(num_bytes, root->fs_info->max_extent); | ||
5768 | |||
5769 | trans = btrfs_start_transaction(root, 1); | 5750 | trans = btrfs_start_transaction(root, 1); |
5770 | 5751 | ||
5771 | ret = btrfs_reserve_extent(trans, root, alloc_size, | 5752 | ret = btrfs_reserve_extent(trans, root, num_bytes, |
5772 | root->sectorsize, 0, alloc_hint, | 5753 | root->sectorsize, 0, alloc_hint, |
5773 | (u64)-1, &ins, 1); | 5754 | (u64)-1, &ins, 1); |
5774 | if (ret) { | 5755 | if (ret) { |
@@ -5827,6 +5808,7 @@ stop_trans: | |||
5827 | static long btrfs_fallocate(struct inode *inode, int mode, | 5808 | static long btrfs_fallocate(struct inode *inode, int mode, |
5828 | loff_t offset, loff_t len) | 5809 | loff_t offset, loff_t len) |
5829 | { | 5810 | { |
5811 | struct extent_state *cached_state = NULL; | ||
5830 | u64 cur_offset; | 5812 | u64 cur_offset; |
5831 | u64 last_byte; | 5813 | u64 last_byte; |
5832 | u64 alloc_start; | 5814 | u64 alloc_start; |
@@ -5865,16 +5847,17 @@ static long btrfs_fallocate(struct inode *inode, int mode, | |||
5865 | /* the extent lock is ordered inside the running | 5847 | /* the extent lock is ordered inside the running |
5866 | * transaction | 5848 | * transaction |
5867 | */ | 5849 | */ |
5868 | lock_extent(&BTRFS_I(inode)->io_tree, alloc_start, locked_end, | 5850 | lock_extent_bits(&BTRFS_I(inode)->io_tree, alloc_start, |
5869 | GFP_NOFS); | 5851 | locked_end, 0, &cached_state, GFP_NOFS); |
5870 | ordered = btrfs_lookup_first_ordered_extent(inode, | 5852 | ordered = btrfs_lookup_first_ordered_extent(inode, |
5871 | alloc_end - 1); | 5853 | alloc_end - 1); |
5872 | if (ordered && | 5854 | if (ordered && |
5873 | ordered->file_offset + ordered->len > alloc_start && | 5855 | ordered->file_offset + ordered->len > alloc_start && |
5874 | ordered->file_offset < alloc_end) { | 5856 | ordered->file_offset < alloc_end) { |
5875 | btrfs_put_ordered_extent(ordered); | 5857 | btrfs_put_ordered_extent(ordered); |
5876 | unlock_extent(&BTRFS_I(inode)->io_tree, | 5858 | unlock_extent_cached(&BTRFS_I(inode)->io_tree, |
5877 | alloc_start, locked_end, GFP_NOFS); | 5859 | alloc_start, locked_end, |
5860 | &cached_state, GFP_NOFS); | ||
5878 | /* | 5861 | /* |
5879 | * we can't wait on the range with the transaction | 5862 | * we can't wait on the range with the transaction |
5880 | * running or with the extent lock held | 5863 | * running or with the extent lock held |
@@ -5916,8 +5899,8 @@ static long btrfs_fallocate(struct inode *inode, int mode, | |||
5916 | break; | 5899 | break; |
5917 | } | 5900 | } |
5918 | } | 5901 | } |
5919 | unlock_extent(&BTRFS_I(inode)->io_tree, alloc_start, locked_end, | 5902 | unlock_extent_cached(&BTRFS_I(inode)->io_tree, alloc_start, locked_end, |
5920 | GFP_NOFS); | 5903 | &cached_state, GFP_NOFS); |
5921 | 5904 | ||
5922 | btrfs_free_reserved_data_space(BTRFS_I(inode)->root, inode, | 5905 | btrfs_free_reserved_data_space(BTRFS_I(inode)->root, inode, |
5923 | alloc_end - alloc_start); | 5906 | alloc_end - alloc_start); |