diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-05-27 13:43:44 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-05-27 13:43:44 -0400 |
commit | 105a048a4f35f7a74c7cc20b36dd83658b6ec232 (patch) | |
tree | 043b1110cda0042ba35d8aae59382bb094d0af3f /fs/btrfs/inode.c | |
parent | 00b9b0af5887fed54e899e3b7f5c2ccf5e739def (diff) | |
parent | 9aeead73782c4b8e2a91def36dbf95db28605c95 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable
* git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable: (27 commits)
Btrfs: add more error checking to btrfs_dirty_inode
Btrfs: allow unaligned DIO
Btrfs: drop verbose enospc printk
Btrfs: Fix block generation verification race
Btrfs: fix preallocation and nodatacow checks in O_DIRECT
Btrfs: avoid ENOSPC errors in btrfs_dirty_inode
Btrfs: move O_DIRECT space reservation to btrfs_direct_IO
Btrfs: rework O_DIRECT enospc handling
Btrfs: use async helpers for DIO write checksumming
Btrfs: don't walk around with task->state != TASK_RUNNING
Btrfs: do aio_write instead of write
Btrfs: add basic DIO read/write support
direct-io: do not merge logically non-contiguous requests
direct-io: add a hook for the fs to provide its own submit_bio function
fs: allow short direct-io reads to be completed via buffered IO
Btrfs: Metadata ENOSPC handling for balance
Btrfs: Pre-allocate space for data relocation
Btrfs: Metadata ENOSPC handling for tree log
Btrfs: Metadata reservation for orphan inodes
Btrfs: Introduce global metadata reservation
...
Diffstat (limited to 'fs/btrfs/inode.c')
-rw-r--r-- | fs/btrfs/inode.c | 1713 |
1 files changed, 1362 insertions, 351 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index d601629b85d1..fa6ccc1bfe2a 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c | |||
@@ -252,6 +252,7 @@ static noinline int cow_file_range_inline(struct btrfs_trans_handle *trans, | |||
252 | inline_len, compressed_size, | 252 | inline_len, compressed_size, |
253 | compressed_pages); | 253 | compressed_pages); |
254 | BUG_ON(ret); | 254 | BUG_ON(ret); |
255 | btrfs_delalloc_release_metadata(inode, end + 1 - start); | ||
255 | btrfs_drop_extent_cache(inode, start, aligned_end - 1, 0); | 256 | btrfs_drop_extent_cache(inode, start, aligned_end - 1, 0); |
256 | return 0; | 257 | return 0; |
257 | } | 258 | } |
@@ -414,6 +415,7 @@ again: | |||
414 | trans = btrfs_join_transaction(root, 1); | 415 | trans = btrfs_join_transaction(root, 1); |
415 | BUG_ON(!trans); | 416 | BUG_ON(!trans); |
416 | btrfs_set_trans_block_group(trans, inode); | 417 | btrfs_set_trans_block_group(trans, inode); |
418 | trans->block_rsv = &root->fs_info->delalloc_block_rsv; | ||
417 | 419 | ||
418 | /* lets try to make an inline extent */ | 420 | /* lets try to make an inline extent */ |
419 | if (ret || total_in < (actual_end - start)) { | 421 | if (ret || total_in < (actual_end - start)) { |
@@ -439,7 +441,6 @@ again: | |||
439 | start, end, NULL, | 441 | start, end, NULL, |
440 | EXTENT_CLEAR_UNLOCK_PAGE | EXTENT_CLEAR_DIRTY | | 442 | EXTENT_CLEAR_UNLOCK_PAGE | EXTENT_CLEAR_DIRTY | |
441 | EXTENT_CLEAR_DELALLOC | | 443 | EXTENT_CLEAR_DELALLOC | |
442 | EXTENT_CLEAR_ACCOUNTING | | ||
443 | EXTENT_SET_WRITEBACK | EXTENT_END_WRITEBACK); | 444 | EXTENT_SET_WRITEBACK | EXTENT_END_WRITEBACK); |
444 | 445 | ||
445 | btrfs_end_transaction(trans, root); | 446 | btrfs_end_transaction(trans, root); |
@@ -697,6 +698,38 @@ retry: | |||
697 | return 0; | 698 | return 0; |
698 | } | 699 | } |
699 | 700 | ||
701 | static u64 get_extent_allocation_hint(struct inode *inode, u64 start, | ||
702 | u64 num_bytes) | ||
703 | { | ||
704 | struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree; | ||
705 | struct extent_map *em; | ||
706 | u64 alloc_hint = 0; | ||
707 | |||
708 | read_lock(&em_tree->lock); | ||
709 | em = search_extent_mapping(em_tree, start, num_bytes); | ||
710 | if (em) { | ||
711 | /* | ||
712 | * if block start isn't an actual block number then find the | ||
713 | * first block in this inode and use that as a hint. If that | ||
714 | * block is also bogus then just don't worry about it. | ||
715 | */ | ||
716 | if (em->block_start >= EXTENT_MAP_LAST_BYTE) { | ||
717 | free_extent_map(em); | ||
718 | em = search_extent_mapping(em_tree, 0, 0); | ||
719 | if (em && em->block_start < EXTENT_MAP_LAST_BYTE) | ||
720 | alloc_hint = em->block_start; | ||
721 | if (em) | ||
722 | free_extent_map(em); | ||
723 | } else { | ||
724 | alloc_hint = em->block_start; | ||
725 | free_extent_map(em); | ||
726 | } | ||
727 | } | ||
728 | read_unlock(&em_tree->lock); | ||
729 | |||
730 | return alloc_hint; | ||
731 | } | ||
732 | |||
700 | /* | 733 | /* |
701 | * when extent_io.c finds a delayed allocation range in the file, | 734 | * when extent_io.c finds a delayed allocation range in the file, |
702 | * the call backs end up in this code. The basic idea is to | 735 | * the call backs end up in this code. The basic idea is to |
@@ -734,6 +767,7 @@ static noinline int cow_file_range(struct inode *inode, | |||
734 | trans = btrfs_join_transaction(root, 1); | 767 | trans = btrfs_join_transaction(root, 1); |
735 | BUG_ON(!trans); | 768 | BUG_ON(!trans); |
736 | btrfs_set_trans_block_group(trans, inode); | 769 | btrfs_set_trans_block_group(trans, inode); |
770 | trans->block_rsv = &root->fs_info->delalloc_block_rsv; | ||
737 | 771 | ||
738 | actual_end = min_t(u64, isize, end + 1); | 772 | actual_end = min_t(u64, isize, end + 1); |
739 | 773 | ||
@@ -753,7 +787,6 @@ static noinline int cow_file_range(struct inode *inode, | |||
753 | EXTENT_CLEAR_UNLOCK_PAGE | | 787 | EXTENT_CLEAR_UNLOCK_PAGE | |
754 | EXTENT_CLEAR_UNLOCK | | 788 | EXTENT_CLEAR_UNLOCK | |
755 | EXTENT_CLEAR_DELALLOC | | 789 | EXTENT_CLEAR_DELALLOC | |
756 | EXTENT_CLEAR_ACCOUNTING | | ||
757 | EXTENT_CLEAR_DIRTY | | 790 | EXTENT_CLEAR_DIRTY | |
758 | EXTENT_SET_WRITEBACK | | 791 | EXTENT_SET_WRITEBACK | |
759 | EXTENT_END_WRITEBACK); | 792 | EXTENT_END_WRITEBACK); |
@@ -769,29 +802,7 @@ static noinline int cow_file_range(struct inode *inode, | |||
769 | BUG_ON(disk_num_bytes > | 802 | BUG_ON(disk_num_bytes > |
770 | btrfs_super_total_bytes(&root->fs_info->super_copy)); | 803 | btrfs_super_total_bytes(&root->fs_info->super_copy)); |
771 | 804 | ||
772 | 805 | alloc_hint = get_extent_allocation_hint(inode, start, num_bytes); | |
773 | read_lock(&BTRFS_I(inode)->extent_tree.lock); | ||
774 | em = search_extent_mapping(&BTRFS_I(inode)->extent_tree, | ||
775 | start, num_bytes); | ||
776 | if (em) { | ||
777 | /* | ||
778 | * if block start isn't an actual block number then find the | ||
779 | * first block in this inode and use that as a hint. If that | ||
780 | * block is also bogus then just don't worry about it. | ||
781 | */ | ||
782 | if (em->block_start >= EXTENT_MAP_LAST_BYTE) { | ||
783 | free_extent_map(em); | ||
784 | em = search_extent_mapping(em_tree, 0, 0); | ||
785 | if (em && em->block_start < EXTENT_MAP_LAST_BYTE) | ||
786 | alloc_hint = em->block_start; | ||
787 | if (em) | ||
788 | free_extent_map(em); | ||
789 | } else { | ||
790 | alloc_hint = em->block_start; | ||
791 | free_extent_map(em); | ||
792 | } | ||
793 | } | ||
794 | read_unlock(&BTRFS_I(inode)->extent_tree.lock); | ||
795 | btrfs_drop_extent_cache(inode, start, start + num_bytes - 1, 0); | 806 | btrfs_drop_extent_cache(inode, start, start + num_bytes - 1, 0); |
796 | 807 | ||
797 | while (disk_num_bytes > 0) { | 808 | while (disk_num_bytes > 0) { |
@@ -1174,6 +1185,13 @@ out_check: | |||
1174 | num_bytes, num_bytes, type); | 1185 | num_bytes, num_bytes, type); |
1175 | BUG_ON(ret); | 1186 | BUG_ON(ret); |
1176 | 1187 | ||
1188 | if (root->root_key.objectid == | ||
1189 | BTRFS_DATA_RELOC_TREE_OBJECTID) { | ||
1190 | ret = btrfs_reloc_clone_csums(inode, cur_offset, | ||
1191 | num_bytes); | ||
1192 | BUG_ON(ret); | ||
1193 | } | ||
1194 | |||
1177 | extent_clear_unlock_delalloc(inode, &BTRFS_I(inode)->io_tree, | 1195 | extent_clear_unlock_delalloc(inode, &BTRFS_I(inode)->io_tree, |
1178 | cur_offset, cur_offset + num_bytes - 1, | 1196 | cur_offset, cur_offset + num_bytes - 1, |
1179 | locked_page, EXTENT_CLEAR_UNLOCK_PAGE | | 1197 | locked_page, EXTENT_CLEAR_UNLOCK_PAGE | |
@@ -1226,15 +1244,13 @@ static int run_delalloc_range(struct inode *inode, struct page *locked_page, | |||
1226 | } | 1244 | } |
1227 | 1245 | ||
1228 | static int btrfs_split_extent_hook(struct inode *inode, | 1246 | static int btrfs_split_extent_hook(struct inode *inode, |
1229 | struct extent_state *orig, u64 split) | 1247 | struct extent_state *orig, u64 split) |
1230 | { | 1248 | { |
1249 | /* not delalloc, ignore it */ | ||
1231 | if (!(orig->state & EXTENT_DELALLOC)) | 1250 | if (!(orig->state & EXTENT_DELALLOC)) |
1232 | return 0; | 1251 | return 0; |
1233 | 1252 | ||
1234 | spin_lock(&BTRFS_I(inode)->accounting_lock); | 1253 | atomic_inc(&BTRFS_I(inode)->outstanding_extents); |
1235 | BTRFS_I(inode)->outstanding_extents++; | ||
1236 | spin_unlock(&BTRFS_I(inode)->accounting_lock); | ||
1237 | |||
1238 | return 0; | 1254 | return 0; |
1239 | } | 1255 | } |
1240 | 1256 | ||
@@ -1252,10 +1268,7 @@ static int btrfs_merge_extent_hook(struct inode *inode, | |||
1252 | if (!(other->state & EXTENT_DELALLOC)) | 1268 | if (!(other->state & EXTENT_DELALLOC)) |
1253 | return 0; | 1269 | return 0; |
1254 | 1270 | ||
1255 | spin_lock(&BTRFS_I(inode)->accounting_lock); | 1271 | atomic_dec(&BTRFS_I(inode)->outstanding_extents); |
1256 | BTRFS_I(inode)->outstanding_extents--; | ||
1257 | spin_unlock(&BTRFS_I(inode)->accounting_lock); | ||
1258 | |||
1259 | return 0; | 1272 | return 0; |
1260 | } | 1273 | } |
1261 | 1274 | ||
@@ -1264,8 +1277,8 @@ static int btrfs_merge_extent_hook(struct inode *inode, | |||
1264 | * bytes in this file, and to maintain the list of inodes that | 1277 | * bytes in this file, and to maintain the list of inodes that |
1265 | * have pending delalloc work to be done. | 1278 | * have pending delalloc work to be done. |
1266 | */ | 1279 | */ |
1267 | static int btrfs_set_bit_hook(struct inode *inode, u64 start, u64 end, | 1280 | static int btrfs_set_bit_hook(struct inode *inode, |
1268 | unsigned long old, unsigned long bits) | 1281 | struct extent_state *state, int *bits) |
1269 | { | 1282 | { |
1270 | 1283 | ||
1271 | /* | 1284 | /* |
@@ -1273,17 +1286,18 @@ static int btrfs_set_bit_hook(struct inode *inode, u64 start, u64 end, | |||
1273 | * but in this case, we are only testeing for the DELALLOC | 1286 | * but in this case, we are only testeing for the DELALLOC |
1274 | * bit, which is only set or cleared with irqs on | 1287 | * bit, which is only set or cleared with irqs on |
1275 | */ | 1288 | */ |
1276 | if (!(old & EXTENT_DELALLOC) && (bits & EXTENT_DELALLOC)) { | 1289 | if (!(state->state & EXTENT_DELALLOC) && (*bits & EXTENT_DELALLOC)) { |
1277 | struct btrfs_root *root = BTRFS_I(inode)->root; | 1290 | struct btrfs_root *root = BTRFS_I(inode)->root; |
1291 | u64 len = state->end + 1 - state->start; | ||
1278 | 1292 | ||
1279 | spin_lock(&BTRFS_I(inode)->accounting_lock); | 1293 | if (*bits & EXTENT_FIRST_DELALLOC) |
1280 | BTRFS_I(inode)->outstanding_extents++; | 1294 | *bits &= ~EXTENT_FIRST_DELALLOC; |
1281 | spin_unlock(&BTRFS_I(inode)->accounting_lock); | 1295 | else |
1282 | btrfs_delalloc_reserve_space(root, inode, end - start + 1); | 1296 | atomic_inc(&BTRFS_I(inode)->outstanding_extents); |
1283 | 1297 | ||
1284 | spin_lock(&root->fs_info->delalloc_lock); | 1298 | spin_lock(&root->fs_info->delalloc_lock); |
1285 | BTRFS_I(inode)->delalloc_bytes += end - start + 1; | 1299 | BTRFS_I(inode)->delalloc_bytes += len; |
1286 | root->fs_info->delalloc_bytes += end - start + 1; | 1300 | root->fs_info->delalloc_bytes += len; |
1287 | if (list_empty(&BTRFS_I(inode)->delalloc_inodes)) { | 1301 | if (list_empty(&BTRFS_I(inode)->delalloc_inodes)) { |
1288 | list_add_tail(&BTRFS_I(inode)->delalloc_inodes, | 1302 | list_add_tail(&BTRFS_I(inode)->delalloc_inodes, |
1289 | &root->fs_info->delalloc_inodes); | 1303 | &root->fs_info->delalloc_inodes); |
@@ -1297,45 +1311,32 @@ static int btrfs_set_bit_hook(struct inode *inode, u64 start, u64 end, | |||
1297 | * extent_io.c clear_bit_hook, see set_bit_hook for why | 1311 | * extent_io.c clear_bit_hook, see set_bit_hook for why |
1298 | */ | 1312 | */ |
1299 | static int btrfs_clear_bit_hook(struct inode *inode, | 1313 | static int btrfs_clear_bit_hook(struct inode *inode, |
1300 | struct extent_state *state, unsigned long bits) | 1314 | struct extent_state *state, int *bits) |
1301 | { | 1315 | { |
1302 | /* | 1316 | /* |
1303 | * set_bit and clear bit hooks normally require _irqsave/restore | 1317 | * set_bit and clear bit hooks normally require _irqsave/restore |
1304 | * but in this case, we are only testeing for the DELALLOC | 1318 | * but in this case, we are only testeing for the DELALLOC |
1305 | * bit, which is only set or cleared with irqs on | 1319 | * bit, which is only set or cleared with irqs on |
1306 | */ | 1320 | */ |
1307 | if ((state->state & EXTENT_DELALLOC) && (bits & EXTENT_DELALLOC)) { | 1321 | if ((state->state & EXTENT_DELALLOC) && (*bits & EXTENT_DELALLOC)) { |
1308 | struct btrfs_root *root = BTRFS_I(inode)->root; | 1322 | struct btrfs_root *root = BTRFS_I(inode)->root; |
1323 | u64 len = state->end + 1 - state->start; | ||
1309 | 1324 | ||
1310 | if (bits & EXTENT_DO_ACCOUNTING) { | 1325 | if (*bits & EXTENT_FIRST_DELALLOC) |
1311 | spin_lock(&BTRFS_I(inode)->accounting_lock); | 1326 | *bits &= ~EXTENT_FIRST_DELALLOC; |
1312 | WARN_ON(!BTRFS_I(inode)->outstanding_extents); | 1327 | else if (!(*bits & EXTENT_DO_ACCOUNTING)) |
1313 | BTRFS_I(inode)->outstanding_extents--; | 1328 | atomic_dec(&BTRFS_I(inode)->outstanding_extents); |
1314 | spin_unlock(&BTRFS_I(inode)->accounting_lock); | 1329 | |
1315 | btrfs_unreserve_metadata_for_delalloc(root, inode, 1); | 1330 | if (*bits & EXTENT_DO_ACCOUNTING) |
1316 | } | 1331 | btrfs_delalloc_release_metadata(inode, len); |
1332 | |||
1333 | if (root->root_key.objectid != BTRFS_DATA_RELOC_TREE_OBJECTID) | ||
1334 | btrfs_free_reserved_data_space(inode, len); | ||
1317 | 1335 | ||
1318 | spin_lock(&root->fs_info->delalloc_lock); | 1336 | spin_lock(&root->fs_info->delalloc_lock); |
1319 | if (state->end - state->start + 1 > | 1337 | root->fs_info->delalloc_bytes -= len; |
1320 | root->fs_info->delalloc_bytes) { | 1338 | BTRFS_I(inode)->delalloc_bytes -= len; |
1321 | printk(KERN_INFO "btrfs warning: delalloc account " | 1339 | |
1322 | "%llu %llu\n", | ||
1323 | (unsigned long long) | ||
1324 | state->end - state->start + 1, | ||
1325 | (unsigned long long) | ||
1326 | root->fs_info->delalloc_bytes); | ||
1327 | btrfs_delalloc_free_space(root, inode, (u64)-1); | ||
1328 | root->fs_info->delalloc_bytes = 0; | ||
1329 | BTRFS_I(inode)->delalloc_bytes = 0; | ||
1330 | } else { | ||
1331 | btrfs_delalloc_free_space(root, inode, | ||
1332 | state->end - | ||
1333 | state->start + 1); | ||
1334 | root->fs_info->delalloc_bytes -= state->end - | ||
1335 | state->start + 1; | ||
1336 | BTRFS_I(inode)->delalloc_bytes -= state->end - | ||
1337 | state->start + 1; | ||
1338 | } | ||
1339 | if (BTRFS_I(inode)->delalloc_bytes == 0 && | 1340 | if (BTRFS_I(inode)->delalloc_bytes == 0 && |
1340 | !list_empty(&BTRFS_I(inode)->delalloc_inodes)) { | 1341 | !list_empty(&BTRFS_I(inode)->delalloc_inodes)) { |
1341 | list_del_init(&BTRFS_I(inode)->delalloc_inodes); | 1342 | list_del_init(&BTRFS_I(inode)->delalloc_inodes); |
@@ -1384,7 +1385,8 @@ int btrfs_merge_bio_hook(struct page *page, unsigned long offset, | |||
1384 | */ | 1385 | */ |
1385 | static int __btrfs_submit_bio_start(struct inode *inode, int rw, | 1386 | static int __btrfs_submit_bio_start(struct inode *inode, int rw, |
1386 | struct bio *bio, int mirror_num, | 1387 | struct bio *bio, int mirror_num, |
1387 | unsigned long bio_flags) | 1388 | unsigned long bio_flags, |
1389 | u64 bio_offset) | ||
1388 | { | 1390 | { |
1389 | struct btrfs_root *root = BTRFS_I(inode)->root; | 1391 | struct btrfs_root *root = BTRFS_I(inode)->root; |
1390 | int ret = 0; | 1392 | int ret = 0; |
@@ -1403,7 +1405,8 @@ static int __btrfs_submit_bio_start(struct inode *inode, int rw, | |||
1403 | * are inserted into the btree | 1405 | * are inserted into the btree |
1404 | */ | 1406 | */ |
1405 | static int __btrfs_submit_bio_done(struct inode *inode, int rw, struct bio *bio, | 1407 | static int __btrfs_submit_bio_done(struct inode *inode, int rw, struct bio *bio, |
1406 | int mirror_num, unsigned long bio_flags) | 1408 | int mirror_num, unsigned long bio_flags, |
1409 | u64 bio_offset) | ||
1407 | { | 1410 | { |
1408 | struct btrfs_root *root = BTRFS_I(inode)->root; | 1411 | struct btrfs_root *root = BTRFS_I(inode)->root; |
1409 | return btrfs_map_bio(root, rw, bio, mirror_num, 1); | 1412 | return btrfs_map_bio(root, rw, bio, mirror_num, 1); |
@@ -1414,7 +1417,8 @@ static int __btrfs_submit_bio_done(struct inode *inode, int rw, struct bio *bio, | |||
1414 | * on write, or reading the csums from the tree before a read | 1417 | * on write, or reading the csums from the tree before a read |
1415 | */ | 1418 | */ |
1416 | static int btrfs_submit_bio_hook(struct inode *inode, int rw, struct bio *bio, | 1419 | static int btrfs_submit_bio_hook(struct inode *inode, int rw, struct bio *bio, |
1417 | int mirror_num, unsigned long bio_flags) | 1420 | int mirror_num, unsigned long bio_flags, |
1421 | u64 bio_offset) | ||
1418 | { | 1422 | { |
1419 | struct btrfs_root *root = BTRFS_I(inode)->root; | 1423 | struct btrfs_root *root = BTRFS_I(inode)->root; |
1420 | int ret = 0; | 1424 | int ret = 0; |
@@ -1439,7 +1443,8 @@ static int btrfs_submit_bio_hook(struct inode *inode, int rw, struct bio *bio, | |||
1439 | /* we're doing a write, do the async checksumming */ | 1443 | /* we're doing a write, do the async checksumming */ |
1440 | return btrfs_wq_submit_bio(BTRFS_I(inode)->root->fs_info, | 1444 | return btrfs_wq_submit_bio(BTRFS_I(inode)->root->fs_info, |
1441 | inode, rw, bio, mirror_num, | 1445 | inode, rw, bio, mirror_num, |
1442 | bio_flags, __btrfs_submit_bio_start, | 1446 | bio_flags, bio_offset, |
1447 | __btrfs_submit_bio_start, | ||
1443 | __btrfs_submit_bio_done); | 1448 | __btrfs_submit_bio_done); |
1444 | } | 1449 | } |
1445 | 1450 | ||
@@ -1520,6 +1525,7 @@ again: | |||
1520 | goto again; | 1525 | goto again; |
1521 | } | 1526 | } |
1522 | 1527 | ||
1528 | BUG(); | ||
1523 | btrfs_set_extent_delalloc(inode, page_start, page_end, &cached_state); | 1529 | btrfs_set_extent_delalloc(inode, page_start, page_end, &cached_state); |
1524 | ClearPageChecked(page); | 1530 | ClearPageChecked(page); |
1525 | out: | 1531 | out: |
@@ -1650,7 +1656,7 @@ static int insert_reserved_file_extent(struct btrfs_trans_handle *trans, | |||
1650 | static int btrfs_finish_ordered_io(struct inode *inode, u64 start, u64 end) | 1656 | static int btrfs_finish_ordered_io(struct inode *inode, u64 start, u64 end) |
1651 | { | 1657 | { |
1652 | struct btrfs_root *root = BTRFS_I(inode)->root; | 1658 | struct btrfs_root *root = BTRFS_I(inode)->root; |
1653 | struct btrfs_trans_handle *trans; | 1659 | struct btrfs_trans_handle *trans = NULL; |
1654 | struct btrfs_ordered_extent *ordered_extent = NULL; | 1660 | struct btrfs_ordered_extent *ordered_extent = NULL; |
1655 | struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree; | 1661 | struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree; |
1656 | struct extent_state *cached_state = NULL; | 1662 | struct extent_state *cached_state = NULL; |
@@ -1668,9 +1674,10 @@ static int btrfs_finish_ordered_io(struct inode *inode, u64 start, u64 end) | |||
1668 | ret = btrfs_ordered_update_i_size(inode, 0, ordered_extent); | 1674 | ret = btrfs_ordered_update_i_size(inode, 0, ordered_extent); |
1669 | if (!ret) { | 1675 | if (!ret) { |
1670 | trans = btrfs_join_transaction(root, 1); | 1676 | trans = btrfs_join_transaction(root, 1); |
1677 | btrfs_set_trans_block_group(trans, inode); | ||
1678 | trans->block_rsv = &root->fs_info->delalloc_block_rsv; | ||
1671 | ret = btrfs_update_inode(trans, root, inode); | 1679 | ret = btrfs_update_inode(trans, root, inode); |
1672 | BUG_ON(ret); | 1680 | BUG_ON(ret); |
1673 | btrfs_end_transaction(trans, root); | ||
1674 | } | 1681 | } |
1675 | goto out; | 1682 | goto out; |
1676 | } | 1683 | } |
@@ -1680,6 +1687,8 @@ static int btrfs_finish_ordered_io(struct inode *inode, u64 start, u64 end) | |||
1680 | 0, &cached_state, GFP_NOFS); | 1687 | 0, &cached_state, GFP_NOFS); |
1681 | 1688 | ||
1682 | trans = btrfs_join_transaction(root, 1); | 1689 | trans = btrfs_join_transaction(root, 1); |
1690 | btrfs_set_trans_block_group(trans, inode); | ||
1691 | trans->block_rsv = &root->fs_info->delalloc_block_rsv; | ||
1683 | 1692 | ||
1684 | if (test_bit(BTRFS_ORDERED_COMPRESSED, &ordered_extent->flags)) | 1693 | if (test_bit(BTRFS_ORDERED_COMPRESSED, &ordered_extent->flags)) |
1685 | compressed = 1; | 1694 | compressed = 1; |
@@ -1711,12 +1720,13 @@ static int btrfs_finish_ordered_io(struct inode *inode, u64 start, u64 end) | |||
1711 | add_pending_csums(trans, inode, ordered_extent->file_offset, | 1720 | add_pending_csums(trans, inode, ordered_extent->file_offset, |
1712 | &ordered_extent->list); | 1721 | &ordered_extent->list); |
1713 | 1722 | ||
1714 | /* this also removes the ordered extent from the tree */ | ||
1715 | btrfs_ordered_update_i_size(inode, 0, ordered_extent); | 1723 | btrfs_ordered_update_i_size(inode, 0, ordered_extent); |
1716 | ret = btrfs_update_inode(trans, root, inode); | 1724 | ret = btrfs_update_inode(trans, root, inode); |
1717 | BUG_ON(ret); | 1725 | BUG_ON(ret); |
1718 | btrfs_end_transaction(trans, root); | ||
1719 | out: | 1726 | out: |
1727 | btrfs_delalloc_release_metadata(inode, ordered_extent->len); | ||
1728 | if (trans) | ||
1729 | btrfs_end_transaction(trans, root); | ||
1720 | /* once for us */ | 1730 | /* once for us */ |
1721 | btrfs_put_ordered_extent(ordered_extent); | 1731 | btrfs_put_ordered_extent(ordered_extent); |
1722 | /* once for the tree */ | 1732 | /* once for the tree */ |
@@ -1838,7 +1848,7 @@ static int btrfs_io_failed_hook(struct bio *failed_bio, | |||
1838 | 1848 | ||
1839 | BTRFS_I(inode)->io_tree.ops->submit_bio_hook(inode, rw, bio, | 1849 | BTRFS_I(inode)->io_tree.ops->submit_bio_hook(inode, rw, bio, |
1840 | failrec->last_mirror, | 1850 | failrec->last_mirror, |
1841 | failrec->bio_flags); | 1851 | failrec->bio_flags, 0); |
1842 | return 0; | 1852 | return 0; |
1843 | } | 1853 | } |
1844 | 1854 | ||
@@ -1993,32 +2003,196 @@ void btrfs_run_delayed_iputs(struct btrfs_root *root) | |||
1993 | } | 2003 | } |
1994 | 2004 | ||
1995 | /* | 2005 | /* |
2006 | * calculate extra metadata reservation when snapshotting a subvolume | ||
2007 | * contains orphan files. | ||
2008 | */ | ||
2009 | void btrfs_orphan_pre_snapshot(struct btrfs_trans_handle *trans, | ||
2010 | struct btrfs_pending_snapshot *pending, | ||
2011 | u64 *bytes_to_reserve) | ||
2012 | { | ||
2013 | struct btrfs_root *root; | ||
2014 | struct btrfs_block_rsv *block_rsv; | ||
2015 | u64 num_bytes; | ||
2016 | int index; | ||
2017 | |||
2018 | root = pending->root; | ||
2019 | if (!root->orphan_block_rsv || list_empty(&root->orphan_list)) | ||
2020 | return; | ||
2021 | |||
2022 | block_rsv = root->orphan_block_rsv; | ||
2023 | |||
2024 | /* orphan block reservation for the snapshot */ | ||
2025 | num_bytes = block_rsv->size; | ||
2026 | |||
2027 | /* | ||
2028 | * after the snapshot is created, COWing tree blocks may use more | ||
2029 | * space than it frees. So we should make sure there is enough | ||
2030 | * reserved space. | ||
2031 | */ | ||
2032 | index = trans->transid & 0x1; | ||
2033 | if (block_rsv->reserved + block_rsv->freed[index] < block_rsv->size) { | ||
2034 | num_bytes += block_rsv->size - | ||
2035 | (block_rsv->reserved + block_rsv->freed[index]); | ||
2036 | } | ||
2037 | |||
2038 | *bytes_to_reserve += num_bytes; | ||
2039 | } | ||
2040 | |||
2041 | void btrfs_orphan_post_snapshot(struct btrfs_trans_handle *trans, | ||
2042 | struct btrfs_pending_snapshot *pending) | ||
2043 | { | ||
2044 | struct btrfs_root *root = pending->root; | ||
2045 | struct btrfs_root *snap = pending->snap; | ||
2046 | struct btrfs_block_rsv *block_rsv; | ||
2047 | u64 num_bytes; | ||
2048 | int index; | ||
2049 | int ret; | ||
2050 | |||
2051 | if (!root->orphan_block_rsv || list_empty(&root->orphan_list)) | ||
2052 | return; | ||
2053 | |||
2054 | /* refill source subvolume's orphan block reservation */ | ||
2055 | block_rsv = root->orphan_block_rsv; | ||
2056 | index = trans->transid & 0x1; | ||
2057 | if (block_rsv->reserved + block_rsv->freed[index] < block_rsv->size) { | ||
2058 | num_bytes = block_rsv->size - | ||
2059 | (block_rsv->reserved + block_rsv->freed[index]); | ||
2060 | ret = btrfs_block_rsv_migrate(&pending->block_rsv, | ||
2061 | root->orphan_block_rsv, | ||
2062 | num_bytes); | ||
2063 | BUG_ON(ret); | ||
2064 | } | ||
2065 | |||
2066 | /* setup orphan block reservation for the snapshot */ | ||
2067 | block_rsv = btrfs_alloc_block_rsv(snap); | ||
2068 | BUG_ON(!block_rsv); | ||
2069 | |||
2070 | btrfs_add_durable_block_rsv(root->fs_info, block_rsv); | ||
2071 | snap->orphan_block_rsv = block_rsv; | ||
2072 | |||
2073 | num_bytes = root->orphan_block_rsv->size; | ||
2074 | ret = btrfs_block_rsv_migrate(&pending->block_rsv, | ||
2075 | block_rsv, num_bytes); | ||
2076 | BUG_ON(ret); | ||
2077 | |||
2078 | #if 0 | ||
2079 | /* insert orphan item for the snapshot */ | ||
2080 | WARN_ON(!root->orphan_item_inserted); | ||
2081 | ret = btrfs_insert_orphan_item(trans, root->fs_info->tree_root, | ||
2082 | snap->root_key.objectid); | ||
2083 | BUG_ON(ret); | ||
2084 | snap->orphan_item_inserted = 1; | ||
2085 | #endif | ||
2086 | } | ||
2087 | |||
2088 | enum btrfs_orphan_cleanup_state { | ||
2089 | ORPHAN_CLEANUP_STARTED = 1, | ||
2090 | ORPHAN_CLEANUP_DONE = 2, | ||
2091 | }; | ||
2092 | |||
2093 | /* | ||
2094 | * This is called in transaction commmit time. If there are no orphan | ||
2095 | * files in the subvolume, it removes orphan item and frees block_rsv | ||
2096 | * structure. | ||
2097 | */ | ||
2098 | void btrfs_orphan_commit_root(struct btrfs_trans_handle *trans, | ||
2099 | struct btrfs_root *root) | ||
2100 | { | ||
2101 | int ret; | ||
2102 | |||
2103 | if (!list_empty(&root->orphan_list) || | ||
2104 | root->orphan_cleanup_state != ORPHAN_CLEANUP_DONE) | ||
2105 | return; | ||
2106 | |||
2107 | if (root->orphan_item_inserted && | ||
2108 | btrfs_root_refs(&root->root_item) > 0) { | ||
2109 | ret = btrfs_del_orphan_item(trans, root->fs_info->tree_root, | ||
2110 | root->root_key.objectid); | ||
2111 | BUG_ON(ret); | ||
2112 | root->orphan_item_inserted = 0; | ||
2113 | } | ||
2114 | |||
2115 | if (root->orphan_block_rsv) { | ||
2116 | WARN_ON(root->orphan_block_rsv->size > 0); | ||
2117 | btrfs_free_block_rsv(root, root->orphan_block_rsv); | ||
2118 | root->orphan_block_rsv = NULL; | ||
2119 | } | ||
2120 | } | ||
2121 | |||
2122 | /* | ||
1996 | * This creates an orphan entry for the given inode in case something goes | 2123 | * This creates an orphan entry for the given inode in case something goes |
1997 | * wrong in the middle of an unlink/truncate. | 2124 | * wrong in the middle of an unlink/truncate. |
2125 | * | ||
2126 | * NOTE: caller of this function should reserve 5 units of metadata for | ||
2127 | * this function. | ||
1998 | */ | 2128 | */ |
1999 | int btrfs_orphan_add(struct btrfs_trans_handle *trans, struct inode *inode) | 2129 | int btrfs_orphan_add(struct btrfs_trans_handle *trans, struct inode *inode) |
2000 | { | 2130 | { |
2001 | struct btrfs_root *root = BTRFS_I(inode)->root; | 2131 | struct btrfs_root *root = BTRFS_I(inode)->root; |
2002 | int ret = 0; | 2132 | struct btrfs_block_rsv *block_rsv = NULL; |
2133 | int reserve = 0; | ||
2134 | int insert = 0; | ||
2135 | int ret; | ||
2003 | 2136 | ||
2004 | spin_lock(&root->list_lock); | 2137 | if (!root->orphan_block_rsv) { |
2138 | block_rsv = btrfs_alloc_block_rsv(root); | ||
2139 | BUG_ON(!block_rsv); | ||
2140 | } | ||
2005 | 2141 | ||
2006 | /* already on the orphan list, we're good */ | 2142 | spin_lock(&root->orphan_lock); |
2007 | if (!list_empty(&BTRFS_I(inode)->i_orphan)) { | 2143 | if (!root->orphan_block_rsv) { |
2008 | spin_unlock(&root->list_lock); | 2144 | root->orphan_block_rsv = block_rsv; |
2009 | return 0; | 2145 | } else if (block_rsv) { |
2146 | btrfs_free_block_rsv(root, block_rsv); | ||
2147 | block_rsv = NULL; | ||
2148 | } | ||
2149 | |||
2150 | if (list_empty(&BTRFS_I(inode)->i_orphan)) { | ||
2151 | list_add(&BTRFS_I(inode)->i_orphan, &root->orphan_list); | ||
2152 | #if 0 | ||
2153 | /* | ||
2154 | * For proper ENOSPC handling, we should do orphan | ||
2155 | * cleanup when mounting. But this introduces backward | ||
2156 | * compatibility issue. | ||
2157 | */ | ||
2158 | if (!xchg(&root->orphan_item_inserted, 1)) | ||
2159 | insert = 2; | ||
2160 | else | ||
2161 | insert = 1; | ||
2162 | #endif | ||
2163 | insert = 1; | ||
2164 | } else { | ||
2165 | WARN_ON(!BTRFS_I(inode)->orphan_meta_reserved); | ||
2010 | } | 2166 | } |
2011 | 2167 | ||
2012 | list_add(&BTRFS_I(inode)->i_orphan, &root->orphan_list); | 2168 | if (!BTRFS_I(inode)->orphan_meta_reserved) { |
2169 | BTRFS_I(inode)->orphan_meta_reserved = 1; | ||
2170 | reserve = 1; | ||
2171 | } | ||
2172 | spin_unlock(&root->orphan_lock); | ||
2013 | 2173 | ||
2014 | spin_unlock(&root->list_lock); | 2174 | if (block_rsv) |
2175 | btrfs_add_durable_block_rsv(root->fs_info, block_rsv); | ||
2015 | 2176 | ||
2016 | /* | 2177 | /* grab metadata reservation from transaction handle */ |
2017 | * insert an orphan item to track this unlinked/truncated file | 2178 | if (reserve) { |
2018 | */ | 2179 | ret = btrfs_orphan_reserve_metadata(trans, inode); |
2019 | ret = btrfs_insert_orphan_item(trans, root, inode->i_ino); | 2180 | BUG_ON(ret); |
2181 | } | ||
2020 | 2182 | ||
2021 | return ret; | 2183 | /* insert an orphan item to track this unlinked/truncated file */ |
2184 | if (insert >= 1) { | ||
2185 | ret = btrfs_insert_orphan_item(trans, root, inode->i_ino); | ||
2186 | BUG_ON(ret); | ||
2187 | } | ||
2188 | |||
2189 | /* insert an orphan item to track subvolume contains orphan files */ | ||
2190 | if (insert >= 2) { | ||
2191 | ret = btrfs_insert_orphan_item(trans, root->fs_info->tree_root, | ||
2192 | root->root_key.objectid); | ||
2193 | BUG_ON(ret); | ||
2194 | } | ||
2195 | return 0; | ||
2022 | } | 2196 | } |
2023 | 2197 | ||
2024 | /* | 2198 | /* |
@@ -2028,26 +2202,31 @@ int btrfs_orphan_add(struct btrfs_trans_handle *trans, struct inode *inode) | |||
2028 | int btrfs_orphan_del(struct btrfs_trans_handle *trans, struct inode *inode) | 2202 | int btrfs_orphan_del(struct btrfs_trans_handle *trans, struct inode *inode) |
2029 | { | 2203 | { |
2030 | struct btrfs_root *root = BTRFS_I(inode)->root; | 2204 | struct btrfs_root *root = BTRFS_I(inode)->root; |
2205 | int delete_item = 0; | ||
2206 | int release_rsv = 0; | ||
2031 | int ret = 0; | 2207 | int ret = 0; |
2032 | 2208 | ||
2033 | spin_lock(&root->list_lock); | 2209 | spin_lock(&root->orphan_lock); |
2034 | 2210 | if (!list_empty(&BTRFS_I(inode)->i_orphan)) { | |
2035 | if (list_empty(&BTRFS_I(inode)->i_orphan)) { | 2211 | list_del_init(&BTRFS_I(inode)->i_orphan); |
2036 | spin_unlock(&root->list_lock); | 2212 | delete_item = 1; |
2037 | return 0; | ||
2038 | } | 2213 | } |
2039 | 2214 | ||
2040 | list_del_init(&BTRFS_I(inode)->i_orphan); | 2215 | if (BTRFS_I(inode)->orphan_meta_reserved) { |
2041 | if (!trans) { | 2216 | BTRFS_I(inode)->orphan_meta_reserved = 0; |
2042 | spin_unlock(&root->list_lock); | 2217 | release_rsv = 1; |
2043 | return 0; | ||
2044 | } | 2218 | } |
2219 | spin_unlock(&root->orphan_lock); | ||
2045 | 2220 | ||
2046 | spin_unlock(&root->list_lock); | 2221 | if (trans && delete_item) { |
2222 | ret = btrfs_del_orphan_item(trans, root, inode->i_ino); | ||
2223 | BUG_ON(ret); | ||
2224 | } | ||
2047 | 2225 | ||
2048 | ret = btrfs_del_orphan_item(trans, root, inode->i_ino); | 2226 | if (release_rsv) |
2227 | btrfs_orphan_release_metadata(inode); | ||
2049 | 2228 | ||
2050 | return ret; | 2229 | return 0; |
2051 | } | 2230 | } |
2052 | 2231 | ||
2053 | /* | 2232 | /* |
@@ -2064,7 +2243,7 @@ void btrfs_orphan_cleanup(struct btrfs_root *root) | |||
2064 | struct inode *inode; | 2243 | struct inode *inode; |
2065 | int ret = 0, nr_unlink = 0, nr_truncate = 0; | 2244 | int ret = 0, nr_unlink = 0, nr_truncate = 0; |
2066 | 2245 | ||
2067 | if (!xchg(&root->clean_orphans, 0)) | 2246 | if (cmpxchg(&root->orphan_cleanup_state, 0, ORPHAN_CLEANUP_STARTED)) |
2068 | return; | 2247 | return; |
2069 | 2248 | ||
2070 | path = btrfs_alloc_path(); | 2249 | path = btrfs_alloc_path(); |
@@ -2117,16 +2296,15 @@ void btrfs_orphan_cleanup(struct btrfs_root *root) | |||
2117 | found_key.type = BTRFS_INODE_ITEM_KEY; | 2296 | found_key.type = BTRFS_INODE_ITEM_KEY; |
2118 | found_key.offset = 0; | 2297 | found_key.offset = 0; |
2119 | inode = btrfs_iget(root->fs_info->sb, &found_key, root, NULL); | 2298 | inode = btrfs_iget(root->fs_info->sb, &found_key, root, NULL); |
2120 | if (IS_ERR(inode)) | 2299 | BUG_ON(IS_ERR(inode)); |
2121 | break; | ||
2122 | 2300 | ||
2123 | /* | 2301 | /* |
2124 | * add this inode to the orphan list so btrfs_orphan_del does | 2302 | * add this inode to the orphan list so btrfs_orphan_del does |
2125 | * the proper thing when we hit it | 2303 | * the proper thing when we hit it |
2126 | */ | 2304 | */ |
2127 | spin_lock(&root->list_lock); | 2305 | spin_lock(&root->orphan_lock); |
2128 | list_add(&BTRFS_I(inode)->i_orphan, &root->orphan_list); | 2306 | list_add(&BTRFS_I(inode)->i_orphan, &root->orphan_list); |
2129 | spin_unlock(&root->list_lock); | 2307 | spin_unlock(&root->orphan_lock); |
2130 | 2308 | ||
2131 | /* | 2309 | /* |
2132 | * if this is a bad inode, means we actually succeeded in | 2310 | * if this is a bad inode, means we actually succeeded in |
@@ -2135,7 +2313,7 @@ void btrfs_orphan_cleanup(struct btrfs_root *root) | |||
2135 | * do a destroy_inode | 2313 | * do a destroy_inode |
2136 | */ | 2314 | */ |
2137 | if (is_bad_inode(inode)) { | 2315 | if (is_bad_inode(inode)) { |
2138 | trans = btrfs_start_transaction(root, 1); | 2316 | trans = btrfs_start_transaction(root, 0); |
2139 | btrfs_orphan_del(trans, inode); | 2317 | btrfs_orphan_del(trans, inode); |
2140 | btrfs_end_transaction(trans, root); | 2318 | btrfs_end_transaction(trans, root); |
2141 | iput(inode); | 2319 | iput(inode); |
@@ -2153,13 +2331,23 @@ void btrfs_orphan_cleanup(struct btrfs_root *root) | |||
2153 | /* this will do delete_inode and everything for us */ | 2331 | /* this will do delete_inode and everything for us */ |
2154 | iput(inode); | 2332 | iput(inode); |
2155 | } | 2333 | } |
2334 | btrfs_free_path(path); | ||
2335 | |||
2336 | root->orphan_cleanup_state = ORPHAN_CLEANUP_DONE; | ||
2337 | |||
2338 | if (root->orphan_block_rsv) | ||
2339 | btrfs_block_rsv_release(root, root->orphan_block_rsv, | ||
2340 | (u64)-1); | ||
2341 | |||
2342 | if (root->orphan_block_rsv || root->orphan_item_inserted) { | ||
2343 | trans = btrfs_join_transaction(root, 1); | ||
2344 | btrfs_end_transaction(trans, root); | ||
2345 | } | ||
2156 | 2346 | ||
2157 | if (nr_unlink) | 2347 | if (nr_unlink) |
2158 | printk(KERN_INFO "btrfs: unlinked %d orphans\n", nr_unlink); | 2348 | printk(KERN_INFO "btrfs: unlinked %d orphans\n", nr_unlink); |
2159 | if (nr_truncate) | 2349 | if (nr_truncate) |
2160 | printk(KERN_INFO "btrfs: truncated %d orphans\n", nr_truncate); | 2350 | printk(KERN_INFO "btrfs: truncated %d orphans\n", nr_truncate); |
2161 | |||
2162 | btrfs_free_path(path); | ||
2163 | } | 2351 | } |
2164 | 2352 | ||
2165 | /* | 2353 | /* |
@@ -2478,29 +2666,201 @@ out: | |||
2478 | return ret; | 2666 | return ret; |
2479 | } | 2667 | } |
2480 | 2668 | ||
2481 | static int btrfs_unlink(struct inode *dir, struct dentry *dentry) | 2669 | /* helper to check if there is any shared block in the path */ |
2670 | static int check_path_shared(struct btrfs_root *root, | ||
2671 | struct btrfs_path *path) | ||
2672 | { | ||
2673 | struct extent_buffer *eb; | ||
2674 | int level; | ||
2675 | int ret; | ||
2676 | u64 refs; | ||
2677 | |||
2678 | for (level = 0; level < BTRFS_MAX_LEVEL; level++) { | ||
2679 | if (!path->nodes[level]) | ||
2680 | break; | ||
2681 | eb = path->nodes[level]; | ||
2682 | if (!btrfs_block_can_be_shared(root, eb)) | ||
2683 | continue; | ||
2684 | ret = btrfs_lookup_extent_info(NULL, root, eb->start, eb->len, | ||
2685 | &refs, NULL); | ||
2686 | if (refs > 1) | ||
2687 | return 1; | ||
2688 | } | ||
2689 | return 0; | ||
2690 | } | ||
2691 | |||
2692 | /* | ||
2693 | * helper to start transaction for unlink and rmdir. | ||
2694 | * | ||
2695 | * unlink and rmdir are special in btrfs, they do not always free space. | ||
2696 | * so in enospc case, we should make sure they will free space before | ||
2697 | * allowing them to use the global metadata reservation. | ||
2698 | */ | ||
2699 | static struct btrfs_trans_handle *__unlink_start_trans(struct inode *dir, | ||
2700 | struct dentry *dentry) | ||
2482 | { | 2701 | { |
2483 | struct btrfs_root *root; | ||
2484 | struct btrfs_trans_handle *trans; | 2702 | struct btrfs_trans_handle *trans; |
2703 | struct btrfs_root *root = BTRFS_I(dir)->root; | ||
2704 | struct btrfs_path *path; | ||
2705 | struct btrfs_inode_ref *ref; | ||
2706 | struct btrfs_dir_item *di; | ||
2485 | struct inode *inode = dentry->d_inode; | 2707 | struct inode *inode = dentry->d_inode; |
2708 | u64 index; | ||
2709 | int check_link = 1; | ||
2710 | int err = -ENOSPC; | ||
2486 | int ret; | 2711 | int ret; |
2487 | unsigned long nr = 0; | ||
2488 | 2712 | ||
2489 | root = BTRFS_I(dir)->root; | 2713 | trans = btrfs_start_transaction(root, 10); |
2714 | if (!IS_ERR(trans) || PTR_ERR(trans) != -ENOSPC) | ||
2715 | return trans; | ||
2490 | 2716 | ||
2491 | /* | 2717 | if (inode->i_ino == BTRFS_EMPTY_SUBVOL_DIR_OBJECTID) |
2492 | * 5 items for unlink inode | 2718 | return ERR_PTR(-ENOSPC); |
2493 | * 1 for orphan | 2719 | |
2494 | */ | 2720 | /* check if there is someone else holds reference */ |
2495 | ret = btrfs_reserve_metadata_space(root, 6); | 2721 | if (S_ISDIR(inode->i_mode) && atomic_read(&inode->i_count) > 1) |
2496 | if (ret) | 2722 | return ERR_PTR(-ENOSPC); |
2497 | return ret; | 2723 | |
2724 | if (atomic_read(&inode->i_count) > 2) | ||
2725 | return ERR_PTR(-ENOSPC); | ||
2726 | |||
2727 | if (xchg(&root->fs_info->enospc_unlink, 1)) | ||
2728 | return ERR_PTR(-ENOSPC); | ||
2498 | 2729 | ||
2499 | trans = btrfs_start_transaction(root, 1); | 2730 | path = btrfs_alloc_path(); |
2731 | if (!path) { | ||
2732 | root->fs_info->enospc_unlink = 0; | ||
2733 | return ERR_PTR(-ENOMEM); | ||
2734 | } | ||
2735 | |||
2736 | trans = btrfs_start_transaction(root, 0); | ||
2500 | if (IS_ERR(trans)) { | 2737 | if (IS_ERR(trans)) { |
2501 | btrfs_unreserve_metadata_space(root, 6); | 2738 | btrfs_free_path(path); |
2502 | return PTR_ERR(trans); | 2739 | root->fs_info->enospc_unlink = 0; |
2740 | return trans; | ||
2741 | } | ||
2742 | |||
2743 | path->skip_locking = 1; | ||
2744 | path->search_commit_root = 1; | ||
2745 | |||
2746 | ret = btrfs_lookup_inode(trans, root, path, | ||
2747 | &BTRFS_I(dir)->location, 0); | ||
2748 | if (ret < 0) { | ||
2749 | err = ret; | ||
2750 | goto out; | ||
2751 | } | ||
2752 | if (ret == 0) { | ||
2753 | if (check_path_shared(root, path)) | ||
2754 | goto out; | ||
2755 | } else { | ||
2756 | check_link = 0; | ||
2757 | } | ||
2758 | btrfs_release_path(root, path); | ||
2759 | |||
2760 | ret = btrfs_lookup_inode(trans, root, path, | ||
2761 | &BTRFS_I(inode)->location, 0); | ||
2762 | if (ret < 0) { | ||
2763 | err = ret; | ||
2764 | goto out; | ||
2765 | } | ||
2766 | if (ret == 0) { | ||
2767 | if (check_path_shared(root, path)) | ||
2768 | goto out; | ||
2769 | } else { | ||
2770 | check_link = 0; | ||
2771 | } | ||
2772 | btrfs_release_path(root, path); | ||
2773 | |||
2774 | if (ret == 0 && S_ISREG(inode->i_mode)) { | ||
2775 | ret = btrfs_lookup_file_extent(trans, root, path, | ||
2776 | inode->i_ino, (u64)-1, 0); | ||
2777 | if (ret < 0) { | ||
2778 | err = ret; | ||
2779 | goto out; | ||
2780 | } | ||
2781 | BUG_ON(ret == 0); | ||
2782 | if (check_path_shared(root, path)) | ||
2783 | goto out; | ||
2784 | btrfs_release_path(root, path); | ||
2785 | } | ||
2786 | |||
2787 | if (!check_link) { | ||
2788 | err = 0; | ||
2789 | goto out; | ||
2790 | } | ||
2791 | |||
2792 | di = btrfs_lookup_dir_item(trans, root, path, dir->i_ino, | ||
2793 | dentry->d_name.name, dentry->d_name.len, 0); | ||
2794 | if (IS_ERR(di)) { | ||
2795 | err = PTR_ERR(di); | ||
2796 | goto out; | ||
2797 | } | ||
2798 | if (di) { | ||
2799 | if (check_path_shared(root, path)) | ||
2800 | goto out; | ||
2801 | } else { | ||
2802 | err = 0; | ||
2803 | goto out; | ||
2503 | } | 2804 | } |
2805 | btrfs_release_path(root, path); | ||
2806 | |||
2807 | ref = btrfs_lookup_inode_ref(trans, root, path, | ||
2808 | dentry->d_name.name, dentry->d_name.len, | ||
2809 | inode->i_ino, dir->i_ino, 0); | ||
2810 | if (IS_ERR(ref)) { | ||
2811 | err = PTR_ERR(ref); | ||
2812 | goto out; | ||
2813 | } | ||
2814 | BUG_ON(!ref); | ||
2815 | if (check_path_shared(root, path)) | ||
2816 | goto out; | ||
2817 | index = btrfs_inode_ref_index(path->nodes[0], ref); | ||
2818 | btrfs_release_path(root, path); | ||
2819 | |||
2820 | di = btrfs_lookup_dir_index_item(trans, root, path, dir->i_ino, index, | ||
2821 | dentry->d_name.name, dentry->d_name.len, 0); | ||
2822 | if (IS_ERR(di)) { | ||
2823 | err = PTR_ERR(di); | ||
2824 | goto out; | ||
2825 | } | ||
2826 | BUG_ON(ret == -ENOENT); | ||
2827 | if (check_path_shared(root, path)) | ||
2828 | goto out; | ||
2829 | |||
2830 | err = 0; | ||
2831 | out: | ||
2832 | btrfs_free_path(path); | ||
2833 | if (err) { | ||
2834 | btrfs_end_transaction(trans, root); | ||
2835 | root->fs_info->enospc_unlink = 0; | ||
2836 | return ERR_PTR(err); | ||
2837 | } | ||
2838 | |||
2839 | trans->block_rsv = &root->fs_info->global_block_rsv; | ||
2840 | return trans; | ||
2841 | } | ||
2842 | |||
2843 | static void __unlink_end_trans(struct btrfs_trans_handle *trans, | ||
2844 | struct btrfs_root *root) | ||
2845 | { | ||
2846 | if (trans->block_rsv == &root->fs_info->global_block_rsv) { | ||
2847 | BUG_ON(!root->fs_info->enospc_unlink); | ||
2848 | root->fs_info->enospc_unlink = 0; | ||
2849 | } | ||
2850 | btrfs_end_transaction_throttle(trans, root); | ||
2851 | } | ||
2852 | |||
2853 | static int btrfs_unlink(struct inode *dir, struct dentry *dentry) | ||
2854 | { | ||
2855 | struct btrfs_root *root = BTRFS_I(dir)->root; | ||
2856 | struct btrfs_trans_handle *trans; | ||
2857 | struct inode *inode = dentry->d_inode; | ||
2858 | int ret; | ||
2859 | unsigned long nr = 0; | ||
2860 | |||
2861 | trans = __unlink_start_trans(dir, dentry); | ||
2862 | if (IS_ERR(trans)) | ||
2863 | return PTR_ERR(trans); | ||
2504 | 2864 | ||
2505 | btrfs_set_trans_block_group(trans, dir); | 2865 | btrfs_set_trans_block_group(trans, dir); |
2506 | 2866 | ||
@@ -2508,14 +2868,15 @@ static int btrfs_unlink(struct inode *dir, struct dentry *dentry) | |||
2508 | 2868 | ||
2509 | ret = btrfs_unlink_inode(trans, root, dir, dentry->d_inode, | 2869 | ret = btrfs_unlink_inode(trans, root, dir, dentry->d_inode, |
2510 | dentry->d_name.name, dentry->d_name.len); | 2870 | dentry->d_name.name, dentry->d_name.len); |
2871 | BUG_ON(ret); | ||
2511 | 2872 | ||
2512 | if (inode->i_nlink == 0) | 2873 | if (inode->i_nlink == 0) { |
2513 | ret = btrfs_orphan_add(trans, inode); | 2874 | ret = btrfs_orphan_add(trans, inode); |
2875 | BUG_ON(ret); | ||
2876 | } | ||
2514 | 2877 | ||
2515 | nr = trans->blocks_used; | 2878 | nr = trans->blocks_used; |
2516 | 2879 | __unlink_end_trans(trans, root); | |
2517 | btrfs_end_transaction_throttle(trans, root); | ||
2518 | btrfs_unreserve_metadata_space(root, 6); | ||
2519 | btrfs_btree_balance_dirty(root, nr); | 2880 | btrfs_btree_balance_dirty(root, nr); |
2520 | return ret; | 2881 | return ret; |
2521 | } | 2882 | } |
@@ -2587,7 +2948,6 @@ static int btrfs_rmdir(struct inode *dir, struct dentry *dentry) | |||
2587 | { | 2948 | { |
2588 | struct inode *inode = dentry->d_inode; | 2949 | struct inode *inode = dentry->d_inode; |
2589 | int err = 0; | 2950 | int err = 0; |
2590 | int ret; | ||
2591 | struct btrfs_root *root = BTRFS_I(dir)->root; | 2951 | struct btrfs_root *root = BTRFS_I(dir)->root; |
2592 | struct btrfs_trans_handle *trans; | 2952 | struct btrfs_trans_handle *trans; |
2593 | unsigned long nr = 0; | 2953 | unsigned long nr = 0; |
@@ -2596,15 +2956,9 @@ static int btrfs_rmdir(struct inode *dir, struct dentry *dentry) | |||
2596 | inode->i_ino == BTRFS_FIRST_FREE_OBJECTID) | 2956 | inode->i_ino == BTRFS_FIRST_FREE_OBJECTID) |
2597 | return -ENOTEMPTY; | 2957 | return -ENOTEMPTY; |
2598 | 2958 | ||
2599 | ret = btrfs_reserve_metadata_space(root, 5); | 2959 | trans = __unlink_start_trans(dir, dentry); |
2600 | if (ret) | 2960 | if (IS_ERR(trans)) |
2601 | return ret; | ||
2602 | |||
2603 | trans = btrfs_start_transaction(root, 1); | ||
2604 | if (IS_ERR(trans)) { | ||
2605 | btrfs_unreserve_metadata_space(root, 5); | ||
2606 | return PTR_ERR(trans); | 2961 | return PTR_ERR(trans); |
2607 | } | ||
2608 | 2962 | ||
2609 | btrfs_set_trans_block_group(trans, dir); | 2963 | btrfs_set_trans_block_group(trans, dir); |
2610 | 2964 | ||
@@ -2627,12 +2981,9 @@ static int btrfs_rmdir(struct inode *dir, struct dentry *dentry) | |||
2627 | btrfs_i_size_write(inode, 0); | 2981 | btrfs_i_size_write(inode, 0); |
2628 | out: | 2982 | out: |
2629 | nr = trans->blocks_used; | 2983 | nr = trans->blocks_used; |
2630 | ret = btrfs_end_transaction_throttle(trans, root); | 2984 | __unlink_end_trans(trans, root); |
2631 | btrfs_unreserve_metadata_space(root, 5); | ||
2632 | btrfs_btree_balance_dirty(root, nr); | 2985 | btrfs_btree_balance_dirty(root, nr); |
2633 | 2986 | ||
2634 | if (ret && !err) | ||
2635 | err = ret; | ||
2636 | return err; | 2987 | return err; |
2637 | } | 2988 | } |
2638 | 2989 | ||
@@ -3029,6 +3380,7 @@ out: | |||
3029 | if (pending_del_nr) { | 3380 | if (pending_del_nr) { |
3030 | ret = btrfs_del_items(trans, root, path, pending_del_slot, | 3381 | ret = btrfs_del_items(trans, root, path, pending_del_slot, |
3031 | pending_del_nr); | 3382 | pending_del_nr); |
3383 | BUG_ON(ret); | ||
3032 | } | 3384 | } |
3033 | btrfs_free_path(path); | 3385 | btrfs_free_path(path); |
3034 | return err; | 3386 | return err; |
@@ -3056,11 +3408,7 @@ static int btrfs_truncate_page(struct address_space *mapping, loff_t from) | |||
3056 | 3408 | ||
3057 | if ((offset & (blocksize - 1)) == 0) | 3409 | if ((offset & (blocksize - 1)) == 0) |
3058 | goto out; | 3410 | goto out; |
3059 | ret = btrfs_check_data_free_space(root, inode, PAGE_CACHE_SIZE); | 3411 | ret = btrfs_delalloc_reserve_space(inode, PAGE_CACHE_SIZE); |
3060 | if (ret) | ||
3061 | goto out; | ||
3062 | |||
3063 | ret = btrfs_reserve_metadata_for_delalloc(root, inode, 1); | ||
3064 | if (ret) | 3412 | if (ret) |
3065 | goto out; | 3413 | goto out; |
3066 | 3414 | ||
@@ -3068,8 +3416,7 @@ static int btrfs_truncate_page(struct address_space *mapping, loff_t from) | |||
3068 | again: | 3416 | again: |
3069 | page = grab_cache_page(mapping, index); | 3417 | page = grab_cache_page(mapping, index); |
3070 | if (!page) { | 3418 | if (!page) { |
3071 | btrfs_free_reserved_data_space(root, inode, PAGE_CACHE_SIZE); | 3419 | btrfs_delalloc_release_space(inode, PAGE_CACHE_SIZE); |
3072 | btrfs_unreserve_metadata_for_delalloc(root, inode, 1); | ||
3073 | goto out; | 3420 | goto out; |
3074 | } | 3421 | } |
3075 | 3422 | ||
@@ -3132,8 +3479,7 @@ again: | |||
3132 | 3479 | ||
3133 | out_unlock: | 3480 | out_unlock: |
3134 | if (ret) | 3481 | if (ret) |
3135 | btrfs_free_reserved_data_space(root, inode, PAGE_CACHE_SIZE); | 3482 | btrfs_delalloc_release_space(inode, PAGE_CACHE_SIZE); |
3136 | btrfs_unreserve_metadata_for_delalloc(root, inode, 1); | ||
3137 | unlock_page(page); | 3483 | unlock_page(page); |
3138 | page_cache_release(page); | 3484 | page_cache_release(page); |
3139 | out: | 3485 | out: |
@@ -3145,7 +3491,7 @@ int btrfs_cont_expand(struct inode *inode, loff_t size) | |||
3145 | struct btrfs_trans_handle *trans; | 3491 | struct btrfs_trans_handle *trans; |
3146 | struct btrfs_root *root = BTRFS_I(inode)->root; | 3492 | struct btrfs_root *root = BTRFS_I(inode)->root; |
3147 | struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree; | 3493 | struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree; |
3148 | struct extent_map *em; | 3494 | struct extent_map *em = NULL; |
3149 | struct extent_state *cached_state = NULL; | 3495 | struct extent_state *cached_state = NULL; |
3150 | u64 mask = root->sectorsize - 1; | 3496 | u64 mask = root->sectorsize - 1; |
3151 | u64 hole_start = (inode->i_size + mask) & ~mask; | 3497 | u64 hole_start = (inode->i_size + mask) & ~mask; |
@@ -3183,11 +3529,11 @@ int btrfs_cont_expand(struct inode *inode, loff_t size) | |||
3183 | u64 hint_byte = 0; | 3529 | u64 hint_byte = 0; |
3184 | hole_size = last_byte - cur_offset; | 3530 | hole_size = last_byte - cur_offset; |
3185 | 3531 | ||
3186 | err = btrfs_reserve_metadata_space(root, 2); | 3532 | trans = btrfs_start_transaction(root, 2); |
3187 | if (err) | 3533 | if (IS_ERR(trans)) { |
3534 | err = PTR_ERR(trans); | ||
3188 | break; | 3535 | break; |
3189 | 3536 | } | |
3190 | trans = btrfs_start_transaction(root, 1); | ||
3191 | btrfs_set_trans_block_group(trans, inode); | 3537 | btrfs_set_trans_block_group(trans, inode); |
3192 | 3538 | ||
3193 | err = btrfs_drop_extents(trans, inode, cur_offset, | 3539 | err = btrfs_drop_extents(trans, inode, cur_offset, |
@@ -3205,14 +3551,15 @@ int btrfs_cont_expand(struct inode *inode, loff_t size) | |||
3205 | last_byte - 1, 0); | 3551 | last_byte - 1, 0); |
3206 | 3552 | ||
3207 | btrfs_end_transaction(trans, root); | 3553 | btrfs_end_transaction(trans, root); |
3208 | btrfs_unreserve_metadata_space(root, 2); | ||
3209 | } | 3554 | } |
3210 | free_extent_map(em); | 3555 | free_extent_map(em); |
3556 | em = NULL; | ||
3211 | cur_offset = last_byte; | 3557 | cur_offset = last_byte; |
3212 | if (cur_offset >= block_end) | 3558 | if (cur_offset >= block_end) |
3213 | break; | 3559 | break; |
3214 | } | 3560 | } |
3215 | 3561 | ||
3562 | free_extent_map(em); | ||
3216 | unlock_extent_cached(io_tree, hole_start, block_end - 1, &cached_state, | 3563 | unlock_extent_cached(io_tree, hole_start, block_end - 1, &cached_state, |
3217 | GFP_NOFS); | 3564 | GFP_NOFS); |
3218 | return err; | 3565 | return err; |
@@ -3239,11 +3586,10 @@ static int btrfs_setattr_size(struct inode *inode, struct iattr *attr) | |||
3239 | } | 3586 | } |
3240 | } | 3587 | } |
3241 | 3588 | ||
3242 | ret = btrfs_reserve_metadata_space(root, 1); | 3589 | trans = btrfs_start_transaction(root, 5); |
3243 | if (ret) | 3590 | if (IS_ERR(trans)) |
3244 | return ret; | 3591 | return PTR_ERR(trans); |
3245 | 3592 | ||
3246 | trans = btrfs_start_transaction(root, 1); | ||
3247 | btrfs_set_trans_block_group(trans, inode); | 3593 | btrfs_set_trans_block_group(trans, inode); |
3248 | 3594 | ||
3249 | ret = btrfs_orphan_add(trans, inode); | 3595 | ret = btrfs_orphan_add(trans, inode); |
@@ -3251,7 +3597,6 @@ static int btrfs_setattr_size(struct inode *inode, struct iattr *attr) | |||
3251 | 3597 | ||
3252 | nr = trans->blocks_used; | 3598 | nr = trans->blocks_used; |
3253 | btrfs_end_transaction(trans, root); | 3599 | btrfs_end_transaction(trans, root); |
3254 | btrfs_unreserve_metadata_space(root, 1); | ||
3255 | btrfs_btree_balance_dirty(root, nr); | 3600 | btrfs_btree_balance_dirty(root, nr); |
3256 | 3601 | ||
3257 | if (attr->ia_size > inode->i_size) { | 3602 | if (attr->ia_size > inode->i_size) { |
@@ -3264,8 +3609,11 @@ static int btrfs_setattr_size(struct inode *inode, struct iattr *attr) | |||
3264 | i_size_write(inode, attr->ia_size); | 3609 | i_size_write(inode, attr->ia_size); |
3265 | btrfs_ordered_update_i_size(inode, inode->i_size, NULL); | 3610 | btrfs_ordered_update_i_size(inode, inode->i_size, NULL); |
3266 | 3611 | ||
3267 | trans = btrfs_start_transaction(root, 1); | 3612 | trans = btrfs_start_transaction(root, 0); |
3613 | BUG_ON(IS_ERR(trans)); | ||
3268 | btrfs_set_trans_block_group(trans, inode); | 3614 | btrfs_set_trans_block_group(trans, inode); |
3615 | trans->block_rsv = root->orphan_block_rsv; | ||
3616 | BUG_ON(!trans->block_rsv); | ||
3269 | 3617 | ||
3270 | ret = btrfs_update_inode(trans, root, inode); | 3618 | ret = btrfs_update_inode(trans, root, inode); |
3271 | BUG_ON(ret); | 3619 | BUG_ON(ret); |
@@ -3345,10 +3693,21 @@ void btrfs_delete_inode(struct inode *inode) | |||
3345 | btrfs_i_size_write(inode, 0); | 3693 | btrfs_i_size_write(inode, 0); |
3346 | 3694 | ||
3347 | while (1) { | 3695 | while (1) { |
3348 | trans = btrfs_start_transaction(root, 1); | 3696 | trans = btrfs_start_transaction(root, 0); |
3697 | BUG_ON(IS_ERR(trans)); | ||
3349 | btrfs_set_trans_block_group(trans, inode); | 3698 | btrfs_set_trans_block_group(trans, inode); |
3350 | ret = btrfs_truncate_inode_items(trans, root, inode, 0, 0); | 3699 | trans->block_rsv = root->orphan_block_rsv; |
3700 | |||
3701 | ret = btrfs_block_rsv_check(trans, root, | ||
3702 | root->orphan_block_rsv, 0, 5); | ||
3703 | if (ret) { | ||
3704 | BUG_ON(ret != -EAGAIN); | ||
3705 | ret = btrfs_commit_transaction(trans, root); | ||
3706 | BUG_ON(ret); | ||
3707 | continue; | ||
3708 | } | ||
3351 | 3709 | ||
3710 | ret = btrfs_truncate_inode_items(trans, root, inode, 0, 0); | ||
3352 | if (ret != -EAGAIN) | 3711 | if (ret != -EAGAIN) |
3353 | break; | 3712 | break; |
3354 | 3713 | ||
@@ -3356,6 +3715,7 @@ void btrfs_delete_inode(struct inode *inode) | |||
3356 | btrfs_end_transaction(trans, root); | 3715 | btrfs_end_transaction(trans, root); |
3357 | trans = NULL; | 3716 | trans = NULL; |
3358 | btrfs_btree_balance_dirty(root, nr); | 3717 | btrfs_btree_balance_dirty(root, nr); |
3718 | |||
3359 | } | 3719 | } |
3360 | 3720 | ||
3361 | if (ret == 0) { | 3721 | if (ret == 0) { |
@@ -3596,40 +3956,10 @@ again: | |||
3596 | return 0; | 3956 | return 0; |
3597 | } | 3957 | } |
3598 | 3958 | ||
3599 | static noinline void init_btrfs_i(struct inode *inode) | ||
3600 | { | ||
3601 | struct btrfs_inode *bi = BTRFS_I(inode); | ||
3602 | |||
3603 | bi->generation = 0; | ||
3604 | bi->sequence = 0; | ||
3605 | bi->last_trans = 0; | ||
3606 | bi->last_sub_trans = 0; | ||
3607 | bi->logged_trans = 0; | ||
3608 | bi->delalloc_bytes = 0; | ||
3609 | bi->reserved_bytes = 0; | ||
3610 | bi->disk_i_size = 0; | ||
3611 | bi->flags = 0; | ||
3612 | bi->index_cnt = (u64)-1; | ||
3613 | bi->last_unlink_trans = 0; | ||
3614 | bi->ordered_data_close = 0; | ||
3615 | bi->force_compress = 0; | ||
3616 | extent_map_tree_init(&BTRFS_I(inode)->extent_tree, GFP_NOFS); | ||
3617 | extent_io_tree_init(&BTRFS_I(inode)->io_tree, | ||
3618 | inode->i_mapping, GFP_NOFS); | ||
3619 | extent_io_tree_init(&BTRFS_I(inode)->io_failure_tree, | ||
3620 | inode->i_mapping, GFP_NOFS); | ||
3621 | INIT_LIST_HEAD(&BTRFS_I(inode)->delalloc_inodes); | ||
3622 | INIT_LIST_HEAD(&BTRFS_I(inode)->ordered_operations); | ||
3623 | RB_CLEAR_NODE(&BTRFS_I(inode)->rb_node); | ||
3624 | btrfs_ordered_inode_tree_init(&BTRFS_I(inode)->ordered_tree); | ||
3625 | mutex_init(&BTRFS_I(inode)->log_mutex); | ||
3626 | } | ||
3627 | |||
3628 | static int btrfs_init_locked_inode(struct inode *inode, void *p) | 3959 | static int btrfs_init_locked_inode(struct inode *inode, void *p) |
3629 | { | 3960 | { |
3630 | struct btrfs_iget_args *args = p; | 3961 | struct btrfs_iget_args *args = p; |
3631 | inode->i_ino = args->ino; | 3962 | inode->i_ino = args->ino; |
3632 | init_btrfs_i(inode); | ||
3633 | BTRFS_I(inode)->root = args->root; | 3963 | BTRFS_I(inode)->root = args->root; |
3634 | btrfs_set_inode_space_info(args->root, inode); | 3964 | btrfs_set_inode_space_info(args->root, inode); |
3635 | return 0; | 3965 | return 0; |
@@ -3692,8 +4022,6 @@ static struct inode *new_simple_dir(struct super_block *s, | |||
3692 | if (!inode) | 4022 | if (!inode) |
3693 | return ERR_PTR(-ENOMEM); | 4023 | return ERR_PTR(-ENOMEM); |
3694 | 4024 | ||
3695 | init_btrfs_i(inode); | ||
3696 | |||
3697 | BTRFS_I(inode)->root = root; | 4025 | BTRFS_I(inode)->root = root; |
3698 | memcpy(&BTRFS_I(inode)->location, key, sizeof(*key)); | 4026 | memcpy(&BTRFS_I(inode)->location, key, sizeof(*key)); |
3699 | BTRFS_I(inode)->dummy_inode = 1; | 4027 | BTRFS_I(inode)->dummy_inode = 1; |
@@ -3950,7 +4278,7 @@ int btrfs_write_inode(struct inode *inode, struct writeback_control *wbc) | |||
3950 | struct btrfs_trans_handle *trans; | 4278 | struct btrfs_trans_handle *trans; |
3951 | int ret = 0; | 4279 | int ret = 0; |
3952 | 4280 | ||
3953 | if (root->fs_info->btree_inode == inode) | 4281 | if (BTRFS_I(inode)->dummy_inode) |
3954 | return 0; | 4282 | return 0; |
3955 | 4283 | ||
3956 | if (wbc->sync_mode == WB_SYNC_ALL) { | 4284 | if (wbc->sync_mode == WB_SYNC_ALL) { |
@@ -3971,10 +4299,38 @@ void btrfs_dirty_inode(struct inode *inode) | |||
3971 | { | 4299 | { |
3972 | struct btrfs_root *root = BTRFS_I(inode)->root; | 4300 | struct btrfs_root *root = BTRFS_I(inode)->root; |
3973 | struct btrfs_trans_handle *trans; | 4301 | struct btrfs_trans_handle *trans; |
4302 | int ret; | ||
4303 | |||
4304 | if (BTRFS_I(inode)->dummy_inode) | ||
4305 | return; | ||
3974 | 4306 | ||
3975 | trans = btrfs_join_transaction(root, 1); | 4307 | trans = btrfs_join_transaction(root, 1); |
3976 | btrfs_set_trans_block_group(trans, inode); | 4308 | btrfs_set_trans_block_group(trans, inode); |
3977 | btrfs_update_inode(trans, root, inode); | 4309 | |
4310 | ret = btrfs_update_inode(trans, root, inode); | ||
4311 | if (ret && ret == -ENOSPC) { | ||
4312 | /* whoops, lets try again with the full transaction */ | ||
4313 | btrfs_end_transaction(trans, root); | ||
4314 | trans = btrfs_start_transaction(root, 1); | ||
4315 | if (IS_ERR(trans)) { | ||
4316 | if (printk_ratelimit()) { | ||
4317 | printk(KERN_ERR "btrfs: fail to " | ||
4318 | "dirty inode %lu error %ld\n", | ||
4319 | inode->i_ino, PTR_ERR(trans)); | ||
4320 | } | ||
4321 | return; | ||
4322 | } | ||
4323 | btrfs_set_trans_block_group(trans, inode); | ||
4324 | |||
4325 | ret = btrfs_update_inode(trans, root, inode); | ||
4326 | if (ret) { | ||
4327 | if (printk_ratelimit()) { | ||
4328 | printk(KERN_ERR "btrfs: fail to " | ||
4329 | "dirty inode %lu error %d\n", | ||
4330 | inode->i_ino, ret); | ||
4331 | } | ||
4332 | } | ||
4333 | } | ||
3978 | btrfs_end_transaction(trans, root); | 4334 | btrfs_end_transaction(trans, root); |
3979 | } | 4335 | } |
3980 | 4336 | ||
@@ -4092,7 +4448,6 @@ static struct inode *btrfs_new_inode(struct btrfs_trans_handle *trans, | |||
4092 | * btrfs_get_inode_index_count has an explanation for the magic | 4448 | * btrfs_get_inode_index_count has an explanation for the magic |
4093 | * number | 4449 | * number |
4094 | */ | 4450 | */ |
4095 | init_btrfs_i(inode); | ||
4096 | BTRFS_I(inode)->index_cnt = 2; | 4451 | BTRFS_I(inode)->index_cnt = 2; |
4097 | BTRFS_I(inode)->root = root; | 4452 | BTRFS_I(inode)->root = root; |
4098 | BTRFS_I(inode)->generation = trans->transid; | 4453 | BTRFS_I(inode)->generation = trans->transid; |
@@ -4247,26 +4602,21 @@ static int btrfs_mknod(struct inode *dir, struct dentry *dentry, | |||
4247 | if (!new_valid_dev(rdev)) | 4602 | if (!new_valid_dev(rdev)) |
4248 | return -EINVAL; | 4603 | return -EINVAL; |
4249 | 4604 | ||
4605 | err = btrfs_find_free_objectid(NULL, root, dir->i_ino, &objectid); | ||
4606 | if (err) | ||
4607 | return err; | ||
4608 | |||
4250 | /* | 4609 | /* |
4251 | * 2 for inode item and ref | 4610 | * 2 for inode item and ref |
4252 | * 2 for dir items | 4611 | * 2 for dir items |
4253 | * 1 for xattr if selinux is on | 4612 | * 1 for xattr if selinux is on |
4254 | */ | 4613 | */ |
4255 | err = btrfs_reserve_metadata_space(root, 5); | 4614 | trans = btrfs_start_transaction(root, 5); |
4256 | if (err) | 4615 | if (IS_ERR(trans)) |
4257 | return err; | 4616 | return PTR_ERR(trans); |
4258 | 4617 | ||
4259 | trans = btrfs_start_transaction(root, 1); | ||
4260 | if (!trans) | ||
4261 | goto fail; | ||
4262 | btrfs_set_trans_block_group(trans, dir); | 4618 | btrfs_set_trans_block_group(trans, dir); |
4263 | 4619 | ||
4264 | err = btrfs_find_free_objectid(trans, root, dir->i_ino, &objectid); | ||
4265 | if (err) { | ||
4266 | err = -ENOSPC; | ||
4267 | goto out_unlock; | ||
4268 | } | ||
4269 | |||
4270 | inode = btrfs_new_inode(trans, root, dir, dentry->d_name.name, | 4620 | inode = btrfs_new_inode(trans, root, dir, dentry->d_name.name, |
4271 | dentry->d_name.len, | 4621 | dentry->d_name.len, |
4272 | dentry->d_parent->d_inode->i_ino, objectid, | 4622 | dentry->d_parent->d_inode->i_ino, objectid, |
@@ -4295,13 +4645,11 @@ static int btrfs_mknod(struct inode *dir, struct dentry *dentry, | |||
4295 | out_unlock: | 4645 | out_unlock: |
4296 | nr = trans->blocks_used; | 4646 | nr = trans->blocks_used; |
4297 | btrfs_end_transaction_throttle(trans, root); | 4647 | btrfs_end_transaction_throttle(trans, root); |
4298 | fail: | 4648 | btrfs_btree_balance_dirty(root, nr); |
4299 | btrfs_unreserve_metadata_space(root, 5); | ||
4300 | if (drop_inode) { | 4649 | if (drop_inode) { |
4301 | inode_dec_link_count(inode); | 4650 | inode_dec_link_count(inode); |
4302 | iput(inode); | 4651 | iput(inode); |
4303 | } | 4652 | } |
4304 | btrfs_btree_balance_dirty(root, nr); | ||
4305 | return err; | 4653 | return err; |
4306 | } | 4654 | } |
4307 | 4655 | ||
@@ -4311,32 +4659,26 @@ static int btrfs_create(struct inode *dir, struct dentry *dentry, | |||
4311 | struct btrfs_trans_handle *trans; | 4659 | struct btrfs_trans_handle *trans; |
4312 | struct btrfs_root *root = BTRFS_I(dir)->root; | 4660 | struct btrfs_root *root = BTRFS_I(dir)->root; |
4313 | struct inode *inode = NULL; | 4661 | struct inode *inode = NULL; |
4314 | int err; | ||
4315 | int drop_inode = 0; | 4662 | int drop_inode = 0; |
4663 | int err; | ||
4316 | unsigned long nr = 0; | 4664 | unsigned long nr = 0; |
4317 | u64 objectid; | 4665 | u64 objectid; |
4318 | u64 index = 0; | 4666 | u64 index = 0; |
4319 | 4667 | ||
4668 | err = btrfs_find_free_objectid(NULL, root, dir->i_ino, &objectid); | ||
4669 | if (err) | ||
4670 | return err; | ||
4320 | /* | 4671 | /* |
4321 | * 2 for inode item and ref | 4672 | * 2 for inode item and ref |
4322 | * 2 for dir items | 4673 | * 2 for dir items |
4323 | * 1 for xattr if selinux is on | 4674 | * 1 for xattr if selinux is on |
4324 | */ | 4675 | */ |
4325 | err = btrfs_reserve_metadata_space(root, 5); | 4676 | trans = btrfs_start_transaction(root, 5); |
4326 | if (err) | 4677 | if (IS_ERR(trans)) |
4327 | return err; | 4678 | return PTR_ERR(trans); |
4328 | 4679 | ||
4329 | trans = btrfs_start_transaction(root, 1); | ||
4330 | if (!trans) | ||
4331 | goto fail; | ||
4332 | btrfs_set_trans_block_group(trans, dir); | 4680 | btrfs_set_trans_block_group(trans, dir); |
4333 | 4681 | ||
4334 | err = btrfs_find_free_objectid(trans, root, dir->i_ino, &objectid); | ||
4335 | if (err) { | ||
4336 | err = -ENOSPC; | ||
4337 | goto out_unlock; | ||
4338 | } | ||
4339 | |||
4340 | inode = btrfs_new_inode(trans, root, dir, dentry->d_name.name, | 4682 | inode = btrfs_new_inode(trans, root, dir, dentry->d_name.name, |
4341 | dentry->d_name.len, | 4683 | dentry->d_name.len, |
4342 | dentry->d_parent->d_inode->i_ino, | 4684 | dentry->d_parent->d_inode->i_ino, |
@@ -4368,8 +4710,6 @@ static int btrfs_create(struct inode *dir, struct dentry *dentry, | |||
4368 | out_unlock: | 4710 | out_unlock: |
4369 | nr = trans->blocks_used; | 4711 | nr = trans->blocks_used; |
4370 | btrfs_end_transaction_throttle(trans, root); | 4712 | btrfs_end_transaction_throttle(trans, root); |
4371 | fail: | ||
4372 | btrfs_unreserve_metadata_space(root, 5); | ||
4373 | if (drop_inode) { | 4713 | if (drop_inode) { |
4374 | inode_dec_link_count(inode); | 4714 | inode_dec_link_count(inode); |
4375 | iput(inode); | 4715 | iput(inode); |
@@ -4396,21 +4736,21 @@ static int btrfs_link(struct dentry *old_dentry, struct inode *dir, | |||
4396 | if (root->objectid != BTRFS_I(inode)->root->objectid) | 4736 | if (root->objectid != BTRFS_I(inode)->root->objectid) |
4397 | return -EPERM; | 4737 | return -EPERM; |
4398 | 4738 | ||
4399 | /* | ||
4400 | * 1 item for inode ref | ||
4401 | * 2 items for dir items | ||
4402 | */ | ||
4403 | err = btrfs_reserve_metadata_space(root, 3); | ||
4404 | if (err) | ||
4405 | return err; | ||
4406 | |||
4407 | btrfs_inc_nlink(inode); | 4739 | btrfs_inc_nlink(inode); |
4408 | 4740 | ||
4409 | err = btrfs_set_inode_index(dir, &index); | 4741 | err = btrfs_set_inode_index(dir, &index); |
4410 | if (err) | 4742 | if (err) |
4411 | goto fail; | 4743 | goto fail; |
4412 | 4744 | ||
4413 | trans = btrfs_start_transaction(root, 1); | 4745 | /* |
4746 | * 1 item for inode ref | ||
4747 | * 2 items for dir items | ||
4748 | */ | ||
4749 | trans = btrfs_start_transaction(root, 3); | ||
4750 | if (IS_ERR(trans)) { | ||
4751 | err = PTR_ERR(trans); | ||
4752 | goto fail; | ||
4753 | } | ||
4414 | 4754 | ||
4415 | btrfs_set_trans_block_group(trans, dir); | 4755 | btrfs_set_trans_block_group(trans, dir); |
4416 | atomic_inc(&inode->i_count); | 4756 | atomic_inc(&inode->i_count); |
@@ -4429,7 +4769,6 @@ static int btrfs_link(struct dentry *old_dentry, struct inode *dir, | |||
4429 | nr = trans->blocks_used; | 4769 | nr = trans->blocks_used; |
4430 | btrfs_end_transaction_throttle(trans, root); | 4770 | btrfs_end_transaction_throttle(trans, root); |
4431 | fail: | 4771 | fail: |
4432 | btrfs_unreserve_metadata_space(root, 3); | ||
4433 | if (drop_inode) { | 4772 | if (drop_inode) { |
4434 | inode_dec_link_count(inode); | 4773 | inode_dec_link_count(inode); |
4435 | iput(inode); | 4774 | iput(inode); |
@@ -4449,28 +4788,20 @@ static int btrfs_mkdir(struct inode *dir, struct dentry *dentry, int mode) | |||
4449 | u64 index = 0; | 4788 | u64 index = 0; |
4450 | unsigned long nr = 1; | 4789 | unsigned long nr = 1; |
4451 | 4790 | ||
4791 | err = btrfs_find_free_objectid(NULL, root, dir->i_ino, &objectid); | ||
4792 | if (err) | ||
4793 | return err; | ||
4794 | |||
4452 | /* | 4795 | /* |
4453 | * 2 items for inode and ref | 4796 | * 2 items for inode and ref |
4454 | * 2 items for dir items | 4797 | * 2 items for dir items |
4455 | * 1 for xattr if selinux is on | 4798 | * 1 for xattr if selinux is on |
4456 | */ | 4799 | */ |
4457 | err = btrfs_reserve_metadata_space(root, 5); | 4800 | trans = btrfs_start_transaction(root, 5); |
4458 | if (err) | 4801 | if (IS_ERR(trans)) |
4459 | return err; | 4802 | return PTR_ERR(trans); |
4460 | |||
4461 | trans = btrfs_start_transaction(root, 1); | ||
4462 | if (!trans) { | ||
4463 | err = -ENOMEM; | ||
4464 | goto out_unlock; | ||
4465 | } | ||
4466 | btrfs_set_trans_block_group(trans, dir); | 4803 | btrfs_set_trans_block_group(trans, dir); |
4467 | 4804 | ||
4468 | err = btrfs_find_free_objectid(trans, root, dir->i_ino, &objectid); | ||
4469 | if (err) { | ||
4470 | err = -ENOSPC; | ||
4471 | goto out_fail; | ||
4472 | } | ||
4473 | |||
4474 | inode = btrfs_new_inode(trans, root, dir, dentry->d_name.name, | 4805 | inode = btrfs_new_inode(trans, root, dir, dentry->d_name.name, |
4475 | dentry->d_name.len, | 4806 | dentry->d_name.len, |
4476 | dentry->d_parent->d_inode->i_ino, objectid, | 4807 | dentry->d_parent->d_inode->i_ino, objectid, |
@@ -4510,9 +4841,6 @@ static int btrfs_mkdir(struct inode *dir, struct dentry *dentry, int mode) | |||
4510 | out_fail: | 4841 | out_fail: |
4511 | nr = trans->blocks_used; | 4842 | nr = trans->blocks_used; |
4512 | btrfs_end_transaction_throttle(trans, root); | 4843 | btrfs_end_transaction_throttle(trans, root); |
4513 | |||
4514 | out_unlock: | ||
4515 | btrfs_unreserve_metadata_space(root, 5); | ||
4516 | if (drop_on_err) | 4844 | if (drop_on_err) |
4517 | iput(inode); | 4845 | iput(inode); |
4518 | btrfs_btree_balance_dirty(root, nr); | 4846 | btrfs_btree_balance_dirty(root, nr); |
@@ -4770,6 +5098,7 @@ again: | |||
4770 | } | 5098 | } |
4771 | flush_dcache_page(page); | 5099 | flush_dcache_page(page); |
4772 | } else if (create && PageUptodate(page)) { | 5100 | } else if (create && PageUptodate(page)) { |
5101 | WARN_ON(1); | ||
4773 | if (!trans) { | 5102 | if (!trans) { |
4774 | kunmap(page); | 5103 | kunmap(page); |
4775 | free_extent_map(em); | 5104 | free_extent_map(em); |
@@ -4866,11 +5195,651 @@ out: | |||
4866 | return em; | 5195 | return em; |
4867 | } | 5196 | } |
4868 | 5197 | ||
5198 | static struct extent_map *btrfs_new_extent_direct(struct inode *inode, | ||
5199 | u64 start, u64 len) | ||
5200 | { | ||
5201 | struct btrfs_root *root = BTRFS_I(inode)->root; | ||
5202 | struct btrfs_trans_handle *trans; | ||
5203 | struct extent_map *em; | ||
5204 | struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree; | ||
5205 | struct btrfs_key ins; | ||
5206 | u64 alloc_hint; | ||
5207 | int ret; | ||
5208 | |||
5209 | btrfs_drop_extent_cache(inode, start, start + len - 1, 0); | ||
5210 | |||
5211 | trans = btrfs_join_transaction(root, 0); | ||
5212 | if (!trans) | ||
5213 | return ERR_PTR(-ENOMEM); | ||
5214 | |||
5215 | trans->block_rsv = &root->fs_info->delalloc_block_rsv; | ||
5216 | |||
5217 | alloc_hint = get_extent_allocation_hint(inode, start, len); | ||
5218 | ret = btrfs_reserve_extent(trans, root, len, root->sectorsize, 0, | ||
5219 | alloc_hint, (u64)-1, &ins, 1); | ||
5220 | if (ret) { | ||
5221 | em = ERR_PTR(ret); | ||
5222 | goto out; | ||
5223 | } | ||
5224 | |||
5225 | em = alloc_extent_map(GFP_NOFS); | ||
5226 | if (!em) { | ||
5227 | em = ERR_PTR(-ENOMEM); | ||
5228 | goto out; | ||
5229 | } | ||
5230 | |||
5231 | em->start = start; | ||
5232 | em->orig_start = em->start; | ||
5233 | em->len = ins.offset; | ||
5234 | |||
5235 | em->block_start = ins.objectid; | ||
5236 | em->block_len = ins.offset; | ||
5237 | em->bdev = root->fs_info->fs_devices->latest_bdev; | ||
5238 | set_bit(EXTENT_FLAG_PINNED, &em->flags); | ||
5239 | |||
5240 | while (1) { | ||
5241 | write_lock(&em_tree->lock); | ||
5242 | ret = add_extent_mapping(em_tree, em); | ||
5243 | write_unlock(&em_tree->lock); | ||
5244 | if (ret != -EEXIST) | ||
5245 | break; | ||
5246 | btrfs_drop_extent_cache(inode, start, start + em->len - 1, 0); | ||
5247 | } | ||
5248 | |||
5249 | ret = btrfs_add_ordered_extent_dio(inode, start, ins.objectid, | ||
5250 | ins.offset, ins.offset, 0); | ||
5251 | if (ret) { | ||
5252 | btrfs_free_reserved_extent(root, ins.objectid, ins.offset); | ||
5253 | em = ERR_PTR(ret); | ||
5254 | } | ||
5255 | out: | ||
5256 | btrfs_end_transaction(trans, root); | ||
5257 | return em; | ||
5258 | } | ||
5259 | |||
5260 | /* | ||
5261 | * returns 1 when the nocow is safe, < 1 on error, 0 if the | ||
5262 | * block must be cow'd | ||
5263 | */ | ||
5264 | static noinline int can_nocow_odirect(struct btrfs_trans_handle *trans, | ||
5265 | struct inode *inode, u64 offset, u64 len) | ||
5266 | { | ||
5267 | struct btrfs_path *path; | ||
5268 | int ret; | ||
5269 | struct extent_buffer *leaf; | ||
5270 | struct btrfs_root *root = BTRFS_I(inode)->root; | ||
5271 | struct btrfs_file_extent_item *fi; | ||
5272 | struct btrfs_key key; | ||
5273 | u64 disk_bytenr; | ||
5274 | u64 backref_offset; | ||
5275 | u64 extent_end; | ||
5276 | u64 num_bytes; | ||
5277 | int slot; | ||
5278 | int found_type; | ||
5279 | |||
5280 | path = btrfs_alloc_path(); | ||
5281 | if (!path) | ||
5282 | return -ENOMEM; | ||
5283 | |||
5284 | ret = btrfs_lookup_file_extent(trans, root, path, inode->i_ino, | ||
5285 | offset, 0); | ||
5286 | if (ret < 0) | ||
5287 | goto out; | ||
5288 | |||
5289 | slot = path->slots[0]; | ||
5290 | if (ret == 1) { | ||
5291 | if (slot == 0) { | ||
5292 | /* can't find the item, must cow */ | ||
5293 | ret = 0; | ||
5294 | goto out; | ||
5295 | } | ||
5296 | slot--; | ||
5297 | } | ||
5298 | ret = 0; | ||
5299 | leaf = path->nodes[0]; | ||
5300 | btrfs_item_key_to_cpu(leaf, &key, slot); | ||
5301 | if (key.objectid != inode->i_ino || | ||
5302 | key.type != BTRFS_EXTENT_DATA_KEY) { | ||
5303 | /* not our file or wrong item type, must cow */ | ||
5304 | goto out; | ||
5305 | } | ||
5306 | |||
5307 | if (key.offset > offset) { | ||
5308 | /* Wrong offset, must cow */ | ||
5309 | goto out; | ||
5310 | } | ||
5311 | |||
5312 | fi = btrfs_item_ptr(leaf, slot, struct btrfs_file_extent_item); | ||
5313 | found_type = btrfs_file_extent_type(leaf, fi); | ||
5314 | if (found_type != BTRFS_FILE_EXTENT_REG && | ||
5315 | found_type != BTRFS_FILE_EXTENT_PREALLOC) { | ||
5316 | /* not a regular extent, must cow */ | ||
5317 | goto out; | ||
5318 | } | ||
5319 | disk_bytenr = btrfs_file_extent_disk_bytenr(leaf, fi); | ||
5320 | backref_offset = btrfs_file_extent_offset(leaf, fi); | ||
5321 | |||
5322 | extent_end = key.offset + btrfs_file_extent_num_bytes(leaf, fi); | ||
5323 | if (extent_end < offset + len) { | ||
5324 | /* extent doesn't include our full range, must cow */ | ||
5325 | goto out; | ||
5326 | } | ||
5327 | |||
5328 | if (btrfs_extent_readonly(root, disk_bytenr)) | ||
5329 | goto out; | ||
5330 | |||
5331 | /* | ||
5332 | * look for other files referencing this extent, if we | ||
5333 | * find any we must cow | ||
5334 | */ | ||
5335 | if (btrfs_cross_ref_exist(trans, root, inode->i_ino, | ||
5336 | key.offset - backref_offset, disk_bytenr)) | ||
5337 | goto out; | ||
5338 | |||
5339 | /* | ||
5340 | * adjust disk_bytenr and num_bytes to cover just the bytes | ||
5341 | * in this extent we are about to write. If there | ||
5342 | * are any csums in that range we have to cow in order | ||
5343 | * to keep the csums correct | ||
5344 | */ | ||
5345 | disk_bytenr += backref_offset; | ||
5346 | disk_bytenr += offset - key.offset; | ||
5347 | num_bytes = min(offset + len, extent_end) - offset; | ||
5348 | if (csum_exist_in_range(root, disk_bytenr, num_bytes)) | ||
5349 | goto out; | ||
5350 | /* | ||
5351 | * all of the above have passed, it is safe to overwrite this extent | ||
5352 | * without cow | ||
5353 | */ | ||
5354 | ret = 1; | ||
5355 | out: | ||
5356 | btrfs_free_path(path); | ||
5357 | return ret; | ||
5358 | } | ||
5359 | |||
5360 | static int btrfs_get_blocks_direct(struct inode *inode, sector_t iblock, | ||
5361 | struct buffer_head *bh_result, int create) | ||
5362 | { | ||
5363 | struct extent_map *em; | ||
5364 | struct btrfs_root *root = BTRFS_I(inode)->root; | ||
5365 | u64 start = iblock << inode->i_blkbits; | ||
5366 | u64 len = bh_result->b_size; | ||
5367 | struct btrfs_trans_handle *trans; | ||
5368 | |||
5369 | em = btrfs_get_extent(inode, NULL, 0, start, len, 0); | ||
5370 | if (IS_ERR(em)) | ||
5371 | return PTR_ERR(em); | ||
5372 | |||
5373 | /* | ||
5374 | * Ok for INLINE and COMPRESSED extents we need to fallback on buffered | ||
5375 | * io. INLINE is special, and we could probably kludge it in here, but | ||
5376 | * it's still buffered so for safety lets just fall back to the generic | ||
5377 | * buffered path. | ||
5378 | * | ||
5379 | * For COMPRESSED we _have_ to read the entire extent in so we can | ||
5380 | * decompress it, so there will be buffering required no matter what we | ||
5381 | * do, so go ahead and fallback to buffered. | ||
5382 | * | ||
5383 | * We return -ENOTBLK because thats what makes DIO go ahead and go back | ||
5384 | * to buffered IO. Don't blame me, this is the price we pay for using | ||
5385 | * the generic code. | ||
5386 | */ | ||
5387 | if (test_bit(EXTENT_FLAG_COMPRESSED, &em->flags) || | ||
5388 | em->block_start == EXTENT_MAP_INLINE) { | ||
5389 | free_extent_map(em); | ||
5390 | return -ENOTBLK; | ||
5391 | } | ||
5392 | |||
5393 | /* Just a good old fashioned hole, return */ | ||
5394 | if (!create && (em->block_start == EXTENT_MAP_HOLE || | ||
5395 | test_bit(EXTENT_FLAG_PREALLOC, &em->flags))) { | ||
5396 | free_extent_map(em); | ||
5397 | /* DIO will do one hole at a time, so just unlock a sector */ | ||
5398 | unlock_extent(&BTRFS_I(inode)->io_tree, start, | ||
5399 | start + root->sectorsize - 1, GFP_NOFS); | ||
5400 | return 0; | ||
5401 | } | ||
5402 | |||
5403 | /* | ||
5404 | * We don't allocate a new extent in the following cases | ||
5405 | * | ||
5406 | * 1) The inode is marked as NODATACOW. In this case we'll just use the | ||
5407 | * existing extent. | ||
5408 | * 2) The extent is marked as PREALLOC. We're good to go here and can | ||
5409 | * just use the extent. | ||
5410 | * | ||
5411 | */ | ||
5412 | if (!create) { | ||
5413 | len = em->len - (start - em->start); | ||
5414 | goto map; | ||
5415 | } | ||
5416 | |||
5417 | if (test_bit(EXTENT_FLAG_PREALLOC, &em->flags) || | ||
5418 | ((BTRFS_I(inode)->flags & BTRFS_INODE_NODATACOW) && | ||
5419 | em->block_start != EXTENT_MAP_HOLE)) { | ||
5420 | int type; | ||
5421 | int ret; | ||
5422 | u64 block_start; | ||
5423 | |||
5424 | if (test_bit(EXTENT_FLAG_PREALLOC, &em->flags)) | ||
5425 | type = BTRFS_ORDERED_PREALLOC; | ||
5426 | else | ||
5427 | type = BTRFS_ORDERED_NOCOW; | ||
5428 | len = min(len, em->len - (start - em->start)); | ||
5429 | block_start = em->block_start + (start - em->start); | ||
5430 | |||
5431 | /* | ||
5432 | * we're not going to log anything, but we do need | ||
5433 | * to make sure the current transaction stays open | ||
5434 | * while we look for nocow cross refs | ||
5435 | */ | ||
5436 | trans = btrfs_join_transaction(root, 0); | ||
5437 | if (!trans) | ||
5438 | goto must_cow; | ||
5439 | |||
5440 | if (can_nocow_odirect(trans, inode, start, len) == 1) { | ||
5441 | ret = btrfs_add_ordered_extent_dio(inode, start, | ||
5442 | block_start, len, len, type); | ||
5443 | btrfs_end_transaction(trans, root); | ||
5444 | if (ret) { | ||
5445 | free_extent_map(em); | ||
5446 | return ret; | ||
5447 | } | ||
5448 | goto unlock; | ||
5449 | } | ||
5450 | btrfs_end_transaction(trans, root); | ||
5451 | } | ||
5452 | must_cow: | ||
5453 | /* | ||
5454 | * this will cow the extent, reset the len in case we changed | ||
5455 | * it above | ||
5456 | */ | ||
5457 | len = bh_result->b_size; | ||
5458 | free_extent_map(em); | ||
5459 | em = btrfs_new_extent_direct(inode, start, len); | ||
5460 | if (IS_ERR(em)) | ||
5461 | return PTR_ERR(em); | ||
5462 | len = min(len, em->len - (start - em->start)); | ||
5463 | unlock: | ||
5464 | clear_extent_bit(&BTRFS_I(inode)->io_tree, start, start + len - 1, | ||
5465 | EXTENT_LOCKED | EXTENT_DELALLOC | EXTENT_DIRTY, 1, | ||
5466 | 0, NULL, GFP_NOFS); | ||
5467 | map: | ||
5468 | bh_result->b_blocknr = (em->block_start + (start - em->start)) >> | ||
5469 | inode->i_blkbits; | ||
5470 | bh_result->b_size = len; | ||
5471 | bh_result->b_bdev = em->bdev; | ||
5472 | set_buffer_mapped(bh_result); | ||
5473 | if (create && !test_bit(EXTENT_FLAG_PREALLOC, &em->flags)) | ||
5474 | set_buffer_new(bh_result); | ||
5475 | |||
5476 | free_extent_map(em); | ||
5477 | |||
5478 | return 0; | ||
5479 | } | ||
5480 | |||
5481 | struct btrfs_dio_private { | ||
5482 | struct inode *inode; | ||
5483 | u64 logical_offset; | ||
5484 | u64 disk_bytenr; | ||
5485 | u64 bytes; | ||
5486 | u32 *csums; | ||
5487 | void *private; | ||
5488 | }; | ||
5489 | |||
5490 | static void btrfs_endio_direct_read(struct bio *bio, int err) | ||
5491 | { | ||
5492 | struct bio_vec *bvec_end = bio->bi_io_vec + bio->bi_vcnt - 1; | ||
5493 | struct bio_vec *bvec = bio->bi_io_vec; | ||
5494 | struct btrfs_dio_private *dip = bio->bi_private; | ||
5495 | struct inode *inode = dip->inode; | ||
5496 | struct btrfs_root *root = BTRFS_I(inode)->root; | ||
5497 | u64 start; | ||
5498 | u32 *private = dip->csums; | ||
5499 | |||
5500 | start = dip->logical_offset; | ||
5501 | do { | ||
5502 | if (!(BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM)) { | ||
5503 | struct page *page = bvec->bv_page; | ||
5504 | char *kaddr; | ||
5505 | u32 csum = ~(u32)0; | ||
5506 | unsigned long flags; | ||
5507 | |||
5508 | local_irq_save(flags); | ||
5509 | kaddr = kmap_atomic(page, KM_IRQ0); | ||
5510 | csum = btrfs_csum_data(root, kaddr + bvec->bv_offset, | ||
5511 | csum, bvec->bv_len); | ||
5512 | btrfs_csum_final(csum, (char *)&csum); | ||
5513 | kunmap_atomic(kaddr, KM_IRQ0); | ||
5514 | local_irq_restore(flags); | ||
5515 | |||
5516 | flush_dcache_page(bvec->bv_page); | ||
5517 | if (csum != *private) { | ||
5518 | printk(KERN_ERR "btrfs csum failed ino %lu off" | ||
5519 | " %llu csum %u private %u\n", | ||
5520 | inode->i_ino, (unsigned long long)start, | ||
5521 | csum, *private); | ||
5522 | err = -EIO; | ||
5523 | } | ||
5524 | } | ||
5525 | |||
5526 | start += bvec->bv_len; | ||
5527 | private++; | ||
5528 | bvec++; | ||
5529 | } while (bvec <= bvec_end); | ||
5530 | |||
5531 | unlock_extent(&BTRFS_I(inode)->io_tree, dip->logical_offset, | ||
5532 | dip->logical_offset + dip->bytes - 1, GFP_NOFS); | ||
5533 | bio->bi_private = dip->private; | ||
5534 | |||
5535 | kfree(dip->csums); | ||
5536 | kfree(dip); | ||
5537 | dio_end_io(bio, err); | ||
5538 | } | ||
5539 | |||
5540 | static void btrfs_endio_direct_write(struct bio *bio, int err) | ||
5541 | { | ||
5542 | struct btrfs_dio_private *dip = bio->bi_private; | ||
5543 | struct inode *inode = dip->inode; | ||
5544 | struct btrfs_root *root = BTRFS_I(inode)->root; | ||
5545 | struct btrfs_trans_handle *trans; | ||
5546 | struct btrfs_ordered_extent *ordered = NULL; | ||
5547 | struct extent_state *cached_state = NULL; | ||
5548 | int ret; | ||
5549 | |||
5550 | if (err) | ||
5551 | goto out_done; | ||
5552 | |||
5553 | ret = btrfs_dec_test_ordered_pending(inode, &ordered, | ||
5554 | dip->logical_offset, dip->bytes); | ||
5555 | if (!ret) | ||
5556 | goto out_done; | ||
5557 | |||
5558 | BUG_ON(!ordered); | ||
5559 | |||
5560 | trans = btrfs_join_transaction(root, 1); | ||
5561 | if (!trans) { | ||
5562 | err = -ENOMEM; | ||
5563 | goto out; | ||
5564 | } | ||
5565 | trans->block_rsv = &root->fs_info->delalloc_block_rsv; | ||
5566 | |||
5567 | if (test_bit(BTRFS_ORDERED_NOCOW, &ordered->flags)) { | ||
5568 | ret = btrfs_ordered_update_i_size(inode, 0, ordered); | ||
5569 | if (!ret) | ||
5570 | ret = btrfs_update_inode(trans, root, inode); | ||
5571 | err = ret; | ||
5572 | goto out; | ||
5573 | } | ||
5574 | |||
5575 | lock_extent_bits(&BTRFS_I(inode)->io_tree, ordered->file_offset, | ||
5576 | ordered->file_offset + ordered->len - 1, 0, | ||
5577 | &cached_state, GFP_NOFS); | ||
5578 | |||
5579 | if (test_bit(BTRFS_ORDERED_PREALLOC, &ordered->flags)) { | ||
5580 | ret = btrfs_mark_extent_written(trans, inode, | ||
5581 | ordered->file_offset, | ||
5582 | ordered->file_offset + | ||
5583 | ordered->len); | ||
5584 | if (ret) { | ||
5585 | err = ret; | ||
5586 | goto out_unlock; | ||
5587 | } | ||
5588 | } else { | ||
5589 | ret = insert_reserved_file_extent(trans, inode, | ||
5590 | ordered->file_offset, | ||
5591 | ordered->start, | ||
5592 | ordered->disk_len, | ||
5593 | ordered->len, | ||
5594 | ordered->len, | ||
5595 | 0, 0, 0, | ||
5596 | BTRFS_FILE_EXTENT_REG); | ||
5597 | unpin_extent_cache(&BTRFS_I(inode)->extent_tree, | ||
5598 | ordered->file_offset, ordered->len); | ||
5599 | if (ret) { | ||
5600 | err = ret; | ||
5601 | WARN_ON(1); | ||
5602 | goto out_unlock; | ||
5603 | } | ||
5604 | } | ||
5605 | |||
5606 | add_pending_csums(trans, inode, ordered->file_offset, &ordered->list); | ||
5607 | btrfs_ordered_update_i_size(inode, 0, ordered); | ||
5608 | btrfs_update_inode(trans, root, inode); | ||
5609 | out_unlock: | ||
5610 | unlock_extent_cached(&BTRFS_I(inode)->io_tree, ordered->file_offset, | ||
5611 | ordered->file_offset + ordered->len - 1, | ||
5612 | &cached_state, GFP_NOFS); | ||
5613 | out: | ||
5614 | btrfs_delalloc_release_metadata(inode, ordered->len); | ||
5615 | btrfs_end_transaction(trans, root); | ||
5616 | btrfs_put_ordered_extent(ordered); | ||
5617 | btrfs_put_ordered_extent(ordered); | ||
5618 | out_done: | ||
5619 | bio->bi_private = dip->private; | ||
5620 | |||
5621 | kfree(dip->csums); | ||
5622 | kfree(dip); | ||
5623 | dio_end_io(bio, err); | ||
5624 | } | ||
5625 | |||
5626 | static int __btrfs_submit_bio_start_direct_io(struct inode *inode, int rw, | ||
5627 | struct bio *bio, int mirror_num, | ||
5628 | unsigned long bio_flags, u64 offset) | ||
5629 | { | ||
5630 | int ret; | ||
5631 | struct btrfs_root *root = BTRFS_I(inode)->root; | ||
5632 | ret = btrfs_csum_one_bio(root, inode, bio, offset, 1); | ||
5633 | BUG_ON(ret); | ||
5634 | return 0; | ||
5635 | } | ||
5636 | |||
5637 | static void btrfs_submit_direct(int rw, struct bio *bio, struct inode *inode, | ||
5638 | loff_t file_offset) | ||
5639 | { | ||
5640 | struct btrfs_root *root = BTRFS_I(inode)->root; | ||
5641 | struct btrfs_dio_private *dip; | ||
5642 | struct bio_vec *bvec = bio->bi_io_vec; | ||
5643 | u64 start; | ||
5644 | int skip_sum; | ||
5645 | int write = rw & (1 << BIO_RW); | ||
5646 | int ret = 0; | ||
5647 | |||
5648 | skip_sum = BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM; | ||
5649 | |||
5650 | dip = kmalloc(sizeof(*dip), GFP_NOFS); | ||
5651 | if (!dip) { | ||
5652 | ret = -ENOMEM; | ||
5653 | goto free_ordered; | ||
5654 | } | ||
5655 | dip->csums = NULL; | ||
5656 | |||
5657 | if (!skip_sum) { | ||
5658 | dip->csums = kmalloc(sizeof(u32) * bio->bi_vcnt, GFP_NOFS); | ||
5659 | if (!dip->csums) { | ||
5660 | ret = -ENOMEM; | ||
5661 | goto free_ordered; | ||
5662 | } | ||
5663 | } | ||
5664 | |||
5665 | dip->private = bio->bi_private; | ||
5666 | dip->inode = inode; | ||
5667 | dip->logical_offset = file_offset; | ||
5668 | |||
5669 | start = dip->logical_offset; | ||
5670 | dip->bytes = 0; | ||
5671 | do { | ||
5672 | dip->bytes += bvec->bv_len; | ||
5673 | bvec++; | ||
5674 | } while (bvec <= (bio->bi_io_vec + bio->bi_vcnt - 1)); | ||
5675 | |||
5676 | dip->disk_bytenr = (u64)bio->bi_sector << 9; | ||
5677 | bio->bi_private = dip; | ||
5678 | |||
5679 | if (write) | ||
5680 | bio->bi_end_io = btrfs_endio_direct_write; | ||
5681 | else | ||
5682 | bio->bi_end_io = btrfs_endio_direct_read; | ||
5683 | |||
5684 | ret = btrfs_bio_wq_end_io(root->fs_info, bio, 0); | ||
5685 | if (ret) | ||
5686 | goto out_err; | ||
5687 | |||
5688 | if (write && !skip_sum) { | ||
5689 | ret = btrfs_wq_submit_bio(BTRFS_I(inode)->root->fs_info, | ||
5690 | inode, rw, bio, 0, 0, | ||
5691 | dip->logical_offset, | ||
5692 | __btrfs_submit_bio_start_direct_io, | ||
5693 | __btrfs_submit_bio_done); | ||
5694 | if (ret) | ||
5695 | goto out_err; | ||
5696 | return; | ||
5697 | } else if (!skip_sum) | ||
5698 | btrfs_lookup_bio_sums_dio(root, inode, bio, | ||
5699 | dip->logical_offset, dip->csums); | ||
5700 | |||
5701 | ret = btrfs_map_bio(root, rw, bio, 0, 1); | ||
5702 | if (ret) | ||
5703 | goto out_err; | ||
5704 | return; | ||
5705 | out_err: | ||
5706 | kfree(dip->csums); | ||
5707 | kfree(dip); | ||
5708 | free_ordered: | ||
5709 | /* | ||
5710 | * If this is a write, we need to clean up the reserved space and kill | ||
5711 | * the ordered extent. | ||
5712 | */ | ||
5713 | if (write) { | ||
5714 | struct btrfs_ordered_extent *ordered; | ||
5715 | ordered = btrfs_lookup_ordered_extent(inode, | ||
5716 | dip->logical_offset); | ||
5717 | if (!test_bit(BTRFS_ORDERED_PREALLOC, &ordered->flags) && | ||
5718 | !test_bit(BTRFS_ORDERED_NOCOW, &ordered->flags)) | ||
5719 | btrfs_free_reserved_extent(root, ordered->start, | ||
5720 | ordered->disk_len); | ||
5721 | btrfs_put_ordered_extent(ordered); | ||
5722 | btrfs_put_ordered_extent(ordered); | ||
5723 | } | ||
5724 | bio_endio(bio, ret); | ||
5725 | } | ||
5726 | |||
5727 | static ssize_t check_direct_IO(struct btrfs_root *root, int rw, struct kiocb *iocb, | ||
5728 | const struct iovec *iov, loff_t offset, | ||
5729 | unsigned long nr_segs) | ||
5730 | { | ||
5731 | int seg; | ||
5732 | size_t size; | ||
5733 | unsigned long addr; | ||
5734 | unsigned blocksize_mask = root->sectorsize - 1; | ||
5735 | ssize_t retval = -EINVAL; | ||
5736 | loff_t end = offset; | ||
5737 | |||
5738 | if (offset & blocksize_mask) | ||
5739 | goto out; | ||
5740 | |||
5741 | /* Check the memory alignment. Blocks cannot straddle pages */ | ||
5742 | for (seg = 0; seg < nr_segs; seg++) { | ||
5743 | addr = (unsigned long)iov[seg].iov_base; | ||
5744 | size = iov[seg].iov_len; | ||
5745 | end += size; | ||
5746 | if ((addr & blocksize_mask) || (size & blocksize_mask)) | ||
5747 | goto out; | ||
5748 | } | ||
5749 | retval = 0; | ||
5750 | out: | ||
5751 | return retval; | ||
5752 | } | ||
4869 | static ssize_t btrfs_direct_IO(int rw, struct kiocb *iocb, | 5753 | static ssize_t btrfs_direct_IO(int rw, struct kiocb *iocb, |
4870 | const struct iovec *iov, loff_t offset, | 5754 | const struct iovec *iov, loff_t offset, |
4871 | unsigned long nr_segs) | 5755 | unsigned long nr_segs) |
4872 | { | 5756 | { |
4873 | return -EINVAL; | 5757 | struct file *file = iocb->ki_filp; |
5758 | struct inode *inode = file->f_mapping->host; | ||
5759 | struct btrfs_ordered_extent *ordered; | ||
5760 | struct extent_state *cached_state = NULL; | ||
5761 | u64 lockstart, lockend; | ||
5762 | ssize_t ret; | ||
5763 | int writing = rw & WRITE; | ||
5764 | int write_bits = 0; | ||
5765 | size_t count = iov_length(iov, nr_segs); | ||
5766 | |||
5767 | if (check_direct_IO(BTRFS_I(inode)->root, rw, iocb, iov, | ||
5768 | offset, nr_segs)) { | ||
5769 | return 0; | ||
5770 | } | ||
5771 | |||
5772 | lockstart = offset; | ||
5773 | lockend = offset + count - 1; | ||
5774 | |||
5775 | if (writing) { | ||
5776 | ret = btrfs_delalloc_reserve_space(inode, count); | ||
5777 | if (ret) | ||
5778 | goto out; | ||
5779 | } | ||
5780 | |||
5781 | while (1) { | ||
5782 | lock_extent_bits(&BTRFS_I(inode)->io_tree, lockstart, lockend, | ||
5783 | 0, &cached_state, GFP_NOFS); | ||
5784 | /* | ||
5785 | * We're concerned with the entire range that we're going to be | ||
5786 | * doing DIO to, so we need to make sure theres no ordered | ||
5787 | * extents in this range. | ||
5788 | */ | ||
5789 | ordered = btrfs_lookup_ordered_range(inode, lockstart, | ||
5790 | lockend - lockstart + 1); | ||
5791 | if (!ordered) | ||
5792 | break; | ||
5793 | unlock_extent_cached(&BTRFS_I(inode)->io_tree, lockstart, lockend, | ||
5794 | &cached_state, GFP_NOFS); | ||
5795 | btrfs_start_ordered_extent(inode, ordered, 1); | ||
5796 | btrfs_put_ordered_extent(ordered); | ||
5797 | cond_resched(); | ||
5798 | } | ||
5799 | |||
5800 | /* | ||
5801 | * we don't use btrfs_set_extent_delalloc because we don't want | ||
5802 | * the dirty or uptodate bits | ||
5803 | */ | ||
5804 | if (writing) { | ||
5805 | write_bits = EXTENT_DELALLOC | EXTENT_DO_ACCOUNTING; | ||
5806 | ret = set_extent_bit(&BTRFS_I(inode)->io_tree, lockstart, lockend, | ||
5807 | EXTENT_DELALLOC, 0, NULL, &cached_state, | ||
5808 | GFP_NOFS); | ||
5809 | if (ret) { | ||
5810 | clear_extent_bit(&BTRFS_I(inode)->io_tree, lockstart, | ||
5811 | lockend, EXTENT_LOCKED | write_bits, | ||
5812 | 1, 0, &cached_state, GFP_NOFS); | ||
5813 | goto out; | ||
5814 | } | ||
5815 | } | ||
5816 | |||
5817 | free_extent_state(cached_state); | ||
5818 | cached_state = NULL; | ||
5819 | |||
5820 | ret = __blockdev_direct_IO(rw, iocb, inode, | ||
5821 | BTRFS_I(inode)->root->fs_info->fs_devices->latest_bdev, | ||
5822 | iov, offset, nr_segs, btrfs_get_blocks_direct, NULL, | ||
5823 | btrfs_submit_direct, 0); | ||
5824 | |||
5825 | if (ret < 0 && ret != -EIOCBQUEUED) { | ||
5826 | clear_extent_bit(&BTRFS_I(inode)->io_tree, offset, | ||
5827 | offset + iov_length(iov, nr_segs) - 1, | ||
5828 | EXTENT_LOCKED | write_bits, 1, 0, | ||
5829 | &cached_state, GFP_NOFS); | ||
5830 | } else if (ret >= 0 && ret < iov_length(iov, nr_segs)) { | ||
5831 | /* | ||
5832 | * We're falling back to buffered, unlock the section we didn't | ||
5833 | * do IO on. | ||
5834 | */ | ||
5835 | clear_extent_bit(&BTRFS_I(inode)->io_tree, offset + ret, | ||
5836 | offset + iov_length(iov, nr_segs) - 1, | ||
5837 | EXTENT_LOCKED | write_bits, 1, 0, | ||
5838 | &cached_state, GFP_NOFS); | ||
5839 | } | ||
5840 | out: | ||
5841 | free_extent_state(cached_state); | ||
5842 | return ret; | ||
4874 | } | 5843 | } |
4875 | 5844 | ||
4876 | static int btrfs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, | 5845 | static int btrfs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, |
@@ -5034,7 +6003,7 @@ int btrfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) | |||
5034 | u64 page_start; | 6003 | u64 page_start; |
5035 | u64 page_end; | 6004 | u64 page_end; |
5036 | 6005 | ||
5037 | ret = btrfs_check_data_free_space(root, inode, PAGE_CACHE_SIZE); | 6006 | ret = btrfs_delalloc_reserve_space(inode, PAGE_CACHE_SIZE); |
5038 | if (ret) { | 6007 | if (ret) { |
5039 | if (ret == -ENOMEM) | 6008 | if (ret == -ENOMEM) |
5040 | ret = VM_FAULT_OOM; | 6009 | ret = VM_FAULT_OOM; |
@@ -5043,13 +6012,6 @@ int btrfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) | |||
5043 | goto out; | 6012 | goto out; |
5044 | } | 6013 | } |
5045 | 6014 | ||
5046 | ret = btrfs_reserve_metadata_for_delalloc(root, inode, 1); | ||
5047 | if (ret) { | ||
5048 | btrfs_free_reserved_data_space(root, inode, PAGE_CACHE_SIZE); | ||
5049 | ret = VM_FAULT_SIGBUS; | ||
5050 | goto out; | ||
5051 | } | ||
5052 | |||
5053 | ret = VM_FAULT_NOPAGE; /* make the VM retry the fault */ | 6015 | ret = VM_FAULT_NOPAGE; /* make the VM retry the fault */ |
5054 | again: | 6016 | again: |
5055 | lock_page(page); | 6017 | lock_page(page); |
@@ -5059,7 +6021,6 @@ again: | |||
5059 | 6021 | ||
5060 | if ((page->mapping != inode->i_mapping) || | 6022 | if ((page->mapping != inode->i_mapping) || |
5061 | (page_start >= size)) { | 6023 | (page_start >= size)) { |
5062 | btrfs_free_reserved_data_space(root, inode, PAGE_CACHE_SIZE); | ||
5063 | /* page got truncated out from underneath us */ | 6024 | /* page got truncated out from underneath us */ |
5064 | goto out_unlock; | 6025 | goto out_unlock; |
5065 | } | 6026 | } |
@@ -5100,7 +6061,6 @@ again: | |||
5100 | unlock_extent_cached(io_tree, page_start, page_end, | 6061 | unlock_extent_cached(io_tree, page_start, page_end, |
5101 | &cached_state, GFP_NOFS); | 6062 | &cached_state, GFP_NOFS); |
5102 | ret = VM_FAULT_SIGBUS; | 6063 | ret = VM_FAULT_SIGBUS; |
5103 | btrfs_free_reserved_data_space(root, inode, PAGE_CACHE_SIZE); | ||
5104 | goto out_unlock; | 6064 | goto out_unlock; |
5105 | } | 6065 | } |
5106 | ret = 0; | 6066 | ret = 0; |
@@ -5127,10 +6087,10 @@ again: | |||
5127 | unlock_extent_cached(io_tree, page_start, page_end, &cached_state, GFP_NOFS); | 6087 | unlock_extent_cached(io_tree, page_start, page_end, &cached_state, GFP_NOFS); |
5128 | 6088 | ||
5129 | out_unlock: | 6089 | out_unlock: |
5130 | btrfs_unreserve_metadata_for_delalloc(root, inode, 1); | ||
5131 | if (!ret) | 6090 | if (!ret) |
5132 | return VM_FAULT_LOCKED; | 6091 | return VM_FAULT_LOCKED; |
5133 | unlock_page(page); | 6092 | unlock_page(page); |
6093 | btrfs_delalloc_release_space(inode, PAGE_CACHE_SIZE); | ||
5134 | out: | 6094 | out: |
5135 | return ret; | 6095 | return ret; |
5136 | } | 6096 | } |
@@ -5155,8 +6115,10 @@ static void btrfs_truncate(struct inode *inode) | |||
5155 | btrfs_wait_ordered_range(inode, inode->i_size & (~mask), (u64)-1); | 6115 | btrfs_wait_ordered_range(inode, inode->i_size & (~mask), (u64)-1); |
5156 | btrfs_ordered_update_i_size(inode, inode->i_size, NULL); | 6116 | btrfs_ordered_update_i_size(inode, inode->i_size, NULL); |
5157 | 6117 | ||
5158 | trans = btrfs_start_transaction(root, 1); | 6118 | trans = btrfs_start_transaction(root, 0); |
6119 | BUG_ON(IS_ERR(trans)); | ||
5159 | btrfs_set_trans_block_group(trans, inode); | 6120 | btrfs_set_trans_block_group(trans, inode); |
6121 | trans->block_rsv = root->orphan_block_rsv; | ||
5160 | 6122 | ||
5161 | /* | 6123 | /* |
5162 | * setattr is responsible for setting the ordered_data_close flag, | 6124 | * setattr is responsible for setting the ordered_data_close flag, |
@@ -5179,6 +6141,23 @@ static void btrfs_truncate(struct inode *inode) | |||
5179 | btrfs_add_ordered_operation(trans, root, inode); | 6141 | btrfs_add_ordered_operation(trans, root, inode); |
5180 | 6142 | ||
5181 | while (1) { | 6143 | while (1) { |
6144 | if (!trans) { | ||
6145 | trans = btrfs_start_transaction(root, 0); | ||
6146 | BUG_ON(IS_ERR(trans)); | ||
6147 | btrfs_set_trans_block_group(trans, inode); | ||
6148 | trans->block_rsv = root->orphan_block_rsv; | ||
6149 | } | ||
6150 | |||
6151 | ret = btrfs_block_rsv_check(trans, root, | ||
6152 | root->orphan_block_rsv, 0, 5); | ||
6153 | if (ret) { | ||
6154 | BUG_ON(ret != -EAGAIN); | ||
6155 | ret = btrfs_commit_transaction(trans, root); | ||
6156 | BUG_ON(ret); | ||
6157 | trans = NULL; | ||
6158 | continue; | ||
6159 | } | ||
6160 | |||
5182 | ret = btrfs_truncate_inode_items(trans, root, inode, | 6161 | ret = btrfs_truncate_inode_items(trans, root, inode, |
5183 | inode->i_size, | 6162 | inode->i_size, |
5184 | BTRFS_EXTENT_DATA_KEY); | 6163 | BTRFS_EXTENT_DATA_KEY); |
@@ -5190,10 +6169,8 @@ static void btrfs_truncate(struct inode *inode) | |||
5190 | 6169 | ||
5191 | nr = trans->blocks_used; | 6170 | nr = trans->blocks_used; |
5192 | btrfs_end_transaction(trans, root); | 6171 | btrfs_end_transaction(trans, root); |
6172 | trans = NULL; | ||
5193 | btrfs_btree_balance_dirty(root, nr); | 6173 | btrfs_btree_balance_dirty(root, nr); |
5194 | |||
5195 | trans = btrfs_start_transaction(root, 1); | ||
5196 | btrfs_set_trans_block_group(trans, inode); | ||
5197 | } | 6174 | } |
5198 | 6175 | ||
5199 | if (ret == 0 && inode->i_nlink > 0) { | 6176 | if (ret == 0 && inode->i_nlink > 0) { |
@@ -5254,21 +6231,47 @@ unsigned long btrfs_force_ra(struct address_space *mapping, | |||
5254 | struct inode *btrfs_alloc_inode(struct super_block *sb) | 6231 | struct inode *btrfs_alloc_inode(struct super_block *sb) |
5255 | { | 6232 | { |
5256 | struct btrfs_inode *ei; | 6233 | struct btrfs_inode *ei; |
6234 | struct inode *inode; | ||
5257 | 6235 | ||
5258 | ei = kmem_cache_alloc(btrfs_inode_cachep, GFP_NOFS); | 6236 | ei = kmem_cache_alloc(btrfs_inode_cachep, GFP_NOFS); |
5259 | if (!ei) | 6237 | if (!ei) |
5260 | return NULL; | 6238 | return NULL; |
6239 | |||
6240 | ei->root = NULL; | ||
6241 | ei->space_info = NULL; | ||
6242 | ei->generation = 0; | ||
6243 | ei->sequence = 0; | ||
5261 | ei->last_trans = 0; | 6244 | ei->last_trans = 0; |
5262 | ei->last_sub_trans = 0; | 6245 | ei->last_sub_trans = 0; |
5263 | ei->logged_trans = 0; | 6246 | ei->logged_trans = 0; |
5264 | ei->outstanding_extents = 0; | 6247 | ei->delalloc_bytes = 0; |
5265 | ei->reserved_extents = 0; | 6248 | ei->reserved_bytes = 0; |
5266 | ei->root = NULL; | 6249 | ei->disk_i_size = 0; |
6250 | ei->flags = 0; | ||
6251 | ei->index_cnt = (u64)-1; | ||
6252 | ei->last_unlink_trans = 0; | ||
6253 | |||
5267 | spin_lock_init(&ei->accounting_lock); | 6254 | spin_lock_init(&ei->accounting_lock); |
6255 | atomic_set(&ei->outstanding_extents, 0); | ||
6256 | ei->reserved_extents = 0; | ||
6257 | |||
6258 | ei->ordered_data_close = 0; | ||
6259 | ei->orphan_meta_reserved = 0; | ||
6260 | ei->dummy_inode = 0; | ||
6261 | ei->force_compress = 0; | ||
6262 | |||
6263 | inode = &ei->vfs_inode; | ||
6264 | extent_map_tree_init(&ei->extent_tree, GFP_NOFS); | ||
6265 | extent_io_tree_init(&ei->io_tree, &inode->i_data, GFP_NOFS); | ||
6266 | extent_io_tree_init(&ei->io_failure_tree, &inode->i_data, GFP_NOFS); | ||
6267 | mutex_init(&ei->log_mutex); | ||
5268 | btrfs_ordered_inode_tree_init(&ei->ordered_tree); | 6268 | btrfs_ordered_inode_tree_init(&ei->ordered_tree); |
5269 | INIT_LIST_HEAD(&ei->i_orphan); | 6269 | INIT_LIST_HEAD(&ei->i_orphan); |
6270 | INIT_LIST_HEAD(&ei->delalloc_inodes); | ||
5270 | INIT_LIST_HEAD(&ei->ordered_operations); | 6271 | INIT_LIST_HEAD(&ei->ordered_operations); |
5271 | return &ei->vfs_inode; | 6272 | RB_CLEAR_NODE(&ei->rb_node); |
6273 | |||
6274 | return inode; | ||
5272 | } | 6275 | } |
5273 | 6276 | ||
5274 | void btrfs_destroy_inode(struct inode *inode) | 6277 | void btrfs_destroy_inode(struct inode *inode) |
@@ -5278,6 +6281,8 @@ void btrfs_destroy_inode(struct inode *inode) | |||
5278 | 6281 | ||
5279 | WARN_ON(!list_empty(&inode->i_dentry)); | 6282 | WARN_ON(!list_empty(&inode->i_dentry)); |
5280 | WARN_ON(inode->i_data.nrpages); | 6283 | WARN_ON(inode->i_data.nrpages); |
6284 | WARN_ON(atomic_read(&BTRFS_I(inode)->outstanding_extents)); | ||
6285 | WARN_ON(BTRFS_I(inode)->reserved_extents); | ||
5281 | 6286 | ||
5282 | /* | 6287 | /* |
5283 | * This can happen where we create an inode, but somebody else also | 6288 | * This can happen where we create an inode, but somebody else also |
@@ -5298,13 +6303,13 @@ void btrfs_destroy_inode(struct inode *inode) | |||
5298 | spin_unlock(&root->fs_info->ordered_extent_lock); | 6303 | spin_unlock(&root->fs_info->ordered_extent_lock); |
5299 | } | 6304 | } |
5300 | 6305 | ||
5301 | spin_lock(&root->list_lock); | 6306 | spin_lock(&root->orphan_lock); |
5302 | if (!list_empty(&BTRFS_I(inode)->i_orphan)) { | 6307 | if (!list_empty(&BTRFS_I(inode)->i_orphan)) { |
5303 | printk(KERN_INFO "BTRFS: inode %lu still on the orphan list\n", | 6308 | printk(KERN_INFO "BTRFS: inode %lu still on the orphan list\n", |
5304 | inode->i_ino); | 6309 | inode->i_ino); |
5305 | list_del_init(&BTRFS_I(inode)->i_orphan); | 6310 | list_del_init(&BTRFS_I(inode)->i_orphan); |
5306 | } | 6311 | } |
5307 | spin_unlock(&root->list_lock); | 6312 | spin_unlock(&root->orphan_lock); |
5308 | 6313 | ||
5309 | while (1) { | 6314 | while (1) { |
5310 | ordered = btrfs_lookup_first_ordered_extent(inode, (u64)-1); | 6315 | ordered = btrfs_lookup_first_ordered_extent(inode, (u64)-1); |
@@ -5425,19 +6430,6 @@ static int btrfs_rename(struct inode *old_dir, struct dentry *old_dentry, | |||
5425 | if (S_ISDIR(old_inode->i_mode) && new_inode && | 6430 | if (S_ISDIR(old_inode->i_mode) && new_inode && |
5426 | new_inode->i_size > BTRFS_EMPTY_DIR_SIZE) | 6431 | new_inode->i_size > BTRFS_EMPTY_DIR_SIZE) |
5427 | return -ENOTEMPTY; | 6432 | return -ENOTEMPTY; |
5428 | |||
5429 | /* | ||
5430 | * We want to reserve the absolute worst case amount of items. So if | ||
5431 | * both inodes are subvols and we need to unlink them then that would | ||
5432 | * require 4 item modifications, but if they are both normal inodes it | ||
5433 | * would require 5 item modifications, so we'll assume their normal | ||
5434 | * inodes. So 5 * 2 is 10, plus 1 for the new link, so 11 total items | ||
5435 | * should cover the worst case number of items we'll modify. | ||
5436 | */ | ||
5437 | ret = btrfs_reserve_metadata_space(root, 11); | ||
5438 | if (ret) | ||
5439 | return ret; | ||
5440 | |||
5441 | /* | 6433 | /* |
5442 | * we're using rename to replace one file with another. | 6434 | * we're using rename to replace one file with another. |
5443 | * and the replacement file is large. Start IO on it now so | 6435 | * and the replacement file is large. Start IO on it now so |
@@ -5450,8 +6442,18 @@ static int btrfs_rename(struct inode *old_dir, struct dentry *old_dentry, | |||
5450 | /* close the racy window with snapshot create/destroy ioctl */ | 6442 | /* close the racy window with snapshot create/destroy ioctl */ |
5451 | if (old_inode->i_ino == BTRFS_FIRST_FREE_OBJECTID) | 6443 | if (old_inode->i_ino == BTRFS_FIRST_FREE_OBJECTID) |
5452 | down_read(&root->fs_info->subvol_sem); | 6444 | down_read(&root->fs_info->subvol_sem); |
6445 | /* | ||
6446 | * We want to reserve the absolute worst case amount of items. So if | ||
6447 | * both inodes are subvols and we need to unlink them then that would | ||
6448 | * require 4 item modifications, but if they are both normal inodes it | ||
6449 | * would require 5 item modifications, so we'll assume their normal | ||
6450 | * inodes. So 5 * 2 is 10, plus 1 for the new link, so 11 total items | ||
6451 | * should cover the worst case number of items we'll modify. | ||
6452 | */ | ||
6453 | trans = btrfs_start_transaction(root, 20); | ||
6454 | if (IS_ERR(trans)) | ||
6455 | return PTR_ERR(trans); | ||
5453 | 6456 | ||
5454 | trans = btrfs_start_transaction(root, 1); | ||
5455 | btrfs_set_trans_block_group(trans, new_dir); | 6457 | btrfs_set_trans_block_group(trans, new_dir); |
5456 | 6458 | ||
5457 | if (dest != root) | 6459 | if (dest != root) |
@@ -5550,7 +6552,6 @@ out_fail: | |||
5550 | if (old_inode->i_ino == BTRFS_FIRST_FREE_OBJECTID) | 6552 | if (old_inode->i_ino == BTRFS_FIRST_FREE_OBJECTID) |
5551 | up_read(&root->fs_info->subvol_sem); | 6553 | up_read(&root->fs_info->subvol_sem); |
5552 | 6554 | ||
5553 | btrfs_unreserve_metadata_space(root, 11); | ||
5554 | return ret; | 6555 | return ret; |
5555 | } | 6556 | } |
5556 | 6557 | ||
@@ -5602,6 +6603,38 @@ int btrfs_start_delalloc_inodes(struct btrfs_root *root, int delay_iput) | |||
5602 | return 0; | 6603 | return 0; |
5603 | } | 6604 | } |
5604 | 6605 | ||
6606 | int btrfs_start_one_delalloc_inode(struct btrfs_root *root, int delay_iput) | ||
6607 | { | ||
6608 | struct btrfs_inode *binode; | ||
6609 | struct inode *inode = NULL; | ||
6610 | |||
6611 | spin_lock(&root->fs_info->delalloc_lock); | ||
6612 | while (!list_empty(&root->fs_info->delalloc_inodes)) { | ||
6613 | binode = list_entry(root->fs_info->delalloc_inodes.next, | ||
6614 | struct btrfs_inode, delalloc_inodes); | ||
6615 | inode = igrab(&binode->vfs_inode); | ||
6616 | if (inode) { | ||
6617 | list_move_tail(&binode->delalloc_inodes, | ||
6618 | &root->fs_info->delalloc_inodes); | ||
6619 | break; | ||
6620 | } | ||
6621 | |||
6622 | list_del_init(&binode->delalloc_inodes); | ||
6623 | cond_resched_lock(&root->fs_info->delalloc_lock); | ||
6624 | } | ||
6625 | spin_unlock(&root->fs_info->delalloc_lock); | ||
6626 | |||
6627 | if (inode) { | ||
6628 | write_inode_now(inode, 0); | ||
6629 | if (delay_iput) | ||
6630 | btrfs_add_delayed_iput(inode); | ||
6631 | else | ||
6632 | iput(inode); | ||
6633 | return 1; | ||
6634 | } | ||
6635 | return 0; | ||
6636 | } | ||
6637 | |||
5605 | static int btrfs_symlink(struct inode *dir, struct dentry *dentry, | 6638 | static int btrfs_symlink(struct inode *dir, struct dentry *dentry, |
5606 | const char *symname) | 6639 | const char *symname) |
5607 | { | 6640 | { |
@@ -5625,26 +6658,20 @@ static int btrfs_symlink(struct inode *dir, struct dentry *dentry, | |||
5625 | if (name_len > BTRFS_MAX_INLINE_DATA_SIZE(root)) | 6658 | if (name_len > BTRFS_MAX_INLINE_DATA_SIZE(root)) |
5626 | return -ENAMETOOLONG; | 6659 | return -ENAMETOOLONG; |
5627 | 6660 | ||
6661 | err = btrfs_find_free_objectid(NULL, root, dir->i_ino, &objectid); | ||
6662 | if (err) | ||
6663 | return err; | ||
5628 | /* | 6664 | /* |
5629 | * 2 items for inode item and ref | 6665 | * 2 items for inode item and ref |
5630 | * 2 items for dir items | 6666 | * 2 items for dir items |
5631 | * 1 item for xattr if selinux is on | 6667 | * 1 item for xattr if selinux is on |
5632 | */ | 6668 | */ |
5633 | err = btrfs_reserve_metadata_space(root, 5); | 6669 | trans = btrfs_start_transaction(root, 5); |
5634 | if (err) | 6670 | if (IS_ERR(trans)) |
5635 | return err; | 6671 | return PTR_ERR(trans); |
5636 | 6672 | ||
5637 | trans = btrfs_start_transaction(root, 1); | ||
5638 | if (!trans) | ||
5639 | goto out_fail; | ||
5640 | btrfs_set_trans_block_group(trans, dir); | 6673 | btrfs_set_trans_block_group(trans, dir); |
5641 | 6674 | ||
5642 | err = btrfs_find_free_objectid(trans, root, dir->i_ino, &objectid); | ||
5643 | if (err) { | ||
5644 | err = -ENOSPC; | ||
5645 | goto out_unlock; | ||
5646 | } | ||
5647 | |||
5648 | inode = btrfs_new_inode(trans, root, dir, dentry->d_name.name, | 6675 | inode = btrfs_new_inode(trans, root, dir, dentry->d_name.name, |
5649 | dentry->d_name.len, | 6676 | dentry->d_name.len, |
5650 | dentry->d_parent->d_inode->i_ino, objectid, | 6677 | dentry->d_parent->d_inode->i_ino, objectid, |
@@ -5716,8 +6743,6 @@ static int btrfs_symlink(struct inode *dir, struct dentry *dentry, | |||
5716 | out_unlock: | 6743 | out_unlock: |
5717 | nr = trans->blocks_used; | 6744 | nr = trans->blocks_used; |
5718 | btrfs_end_transaction_throttle(trans, root); | 6745 | btrfs_end_transaction_throttle(trans, root); |
5719 | out_fail: | ||
5720 | btrfs_unreserve_metadata_space(root, 5); | ||
5721 | if (drop_inode) { | 6746 | if (drop_inode) { |
5722 | inode_dec_link_count(inode); | 6747 | inode_dec_link_count(inode); |
5723 | iput(inode); | 6748 | iput(inode); |
@@ -5726,33 +6751,28 @@ out_fail: | |||
5726 | return err; | 6751 | return err; |
5727 | } | 6752 | } |
5728 | 6753 | ||
5729 | static int prealloc_file_range(struct inode *inode, u64 start, u64 end, | 6754 | int btrfs_prealloc_file_range(struct inode *inode, int mode, |
5730 | u64 alloc_hint, int mode, loff_t actual_len) | 6755 | u64 start, u64 num_bytes, u64 min_size, |
6756 | loff_t actual_len, u64 *alloc_hint) | ||
5731 | { | 6757 | { |
5732 | struct btrfs_trans_handle *trans; | 6758 | struct btrfs_trans_handle *trans; |
5733 | struct btrfs_root *root = BTRFS_I(inode)->root; | 6759 | struct btrfs_root *root = BTRFS_I(inode)->root; |
5734 | struct btrfs_key ins; | 6760 | struct btrfs_key ins; |
5735 | u64 cur_offset = start; | 6761 | u64 cur_offset = start; |
5736 | u64 num_bytes = end - start; | ||
5737 | int ret = 0; | 6762 | int ret = 0; |
5738 | u64 i_size; | ||
5739 | 6763 | ||
5740 | while (num_bytes > 0) { | 6764 | while (num_bytes > 0) { |
5741 | trans = btrfs_start_transaction(root, 1); | 6765 | trans = btrfs_start_transaction(root, 3); |
5742 | 6766 | if (IS_ERR(trans)) { | |
5743 | ret = btrfs_reserve_extent(trans, root, num_bytes, | 6767 | ret = PTR_ERR(trans); |
5744 | root->sectorsize, 0, alloc_hint, | 6768 | break; |
5745 | (u64)-1, &ins, 1); | ||
5746 | if (ret) { | ||
5747 | WARN_ON(1); | ||
5748 | goto stop_trans; | ||
5749 | } | 6769 | } |
5750 | 6770 | ||
5751 | ret = btrfs_reserve_metadata_space(root, 3); | 6771 | ret = btrfs_reserve_extent(trans, root, num_bytes, min_size, |
6772 | 0, *alloc_hint, (u64)-1, &ins, 1); | ||
5752 | if (ret) { | 6773 | if (ret) { |
5753 | btrfs_free_reserved_extent(root, ins.objectid, | 6774 | btrfs_end_transaction(trans, root); |
5754 | ins.offset); | 6775 | break; |
5755 | goto stop_trans; | ||
5756 | } | 6776 | } |
5757 | 6777 | ||
5758 | ret = insert_reserved_file_extent(trans, inode, | 6778 | ret = insert_reserved_file_extent(trans, inode, |
@@ -5766,34 +6786,27 @@ static int prealloc_file_range(struct inode *inode, u64 start, u64 end, | |||
5766 | 6786 | ||
5767 | num_bytes -= ins.offset; | 6787 | num_bytes -= ins.offset; |
5768 | cur_offset += ins.offset; | 6788 | cur_offset += ins.offset; |
5769 | alloc_hint = ins.objectid + ins.offset; | 6789 | *alloc_hint = ins.objectid + ins.offset; |
5770 | 6790 | ||
5771 | inode->i_ctime = CURRENT_TIME; | 6791 | inode->i_ctime = CURRENT_TIME; |
5772 | BTRFS_I(inode)->flags |= BTRFS_INODE_PREALLOC; | 6792 | BTRFS_I(inode)->flags |= BTRFS_INODE_PREALLOC; |
5773 | if (!(mode & FALLOC_FL_KEEP_SIZE) && | 6793 | if (!(mode & FALLOC_FL_KEEP_SIZE) && |
5774 | (actual_len > inode->i_size) && | 6794 | (actual_len > inode->i_size) && |
5775 | (cur_offset > inode->i_size)) { | 6795 | (cur_offset > inode->i_size)) { |
5776 | |||
5777 | if (cur_offset > actual_len) | 6796 | if (cur_offset > actual_len) |
5778 | i_size = actual_len; | 6797 | i_size_write(inode, actual_len); |
5779 | else | 6798 | else |
5780 | i_size = cur_offset; | 6799 | i_size_write(inode, cur_offset); |
5781 | i_size_write(inode, i_size); | 6800 | i_size_write(inode, cur_offset); |
5782 | btrfs_ordered_update_i_size(inode, i_size, NULL); | 6801 | btrfs_ordered_update_i_size(inode, cur_offset, NULL); |
5783 | } | 6802 | } |
5784 | 6803 | ||
5785 | ret = btrfs_update_inode(trans, root, inode); | 6804 | ret = btrfs_update_inode(trans, root, inode); |
5786 | BUG_ON(ret); | 6805 | BUG_ON(ret); |
5787 | 6806 | ||
5788 | btrfs_end_transaction(trans, root); | 6807 | btrfs_end_transaction(trans, root); |
5789 | btrfs_unreserve_metadata_space(root, 3); | ||
5790 | } | 6808 | } |
5791 | return ret; | 6809 | return ret; |
5792 | |||
5793 | stop_trans: | ||
5794 | btrfs_end_transaction(trans, root); | ||
5795 | return ret; | ||
5796 | |||
5797 | } | 6810 | } |
5798 | 6811 | ||
5799 | static long btrfs_fallocate(struct inode *inode, int mode, | 6812 | static long btrfs_fallocate(struct inode *inode, int mode, |
@@ -5826,8 +6839,7 @@ static long btrfs_fallocate(struct inode *inode, int mode, | |||
5826 | goto out; | 6839 | goto out; |
5827 | } | 6840 | } |
5828 | 6841 | ||
5829 | ret = btrfs_check_data_free_space(BTRFS_I(inode)->root, inode, | 6842 | ret = btrfs_check_data_free_space(inode, alloc_end - alloc_start); |
5830 | alloc_end - alloc_start); | ||
5831 | if (ret) | 6843 | if (ret) |
5832 | goto out; | 6844 | goto out; |
5833 | 6845 | ||
@@ -5872,16 +6884,16 @@ static long btrfs_fallocate(struct inode *inode, int mode, | |||
5872 | if (em->block_start == EXTENT_MAP_HOLE || | 6884 | if (em->block_start == EXTENT_MAP_HOLE || |
5873 | (cur_offset >= inode->i_size && | 6885 | (cur_offset >= inode->i_size && |
5874 | !test_bit(EXTENT_FLAG_PREALLOC, &em->flags))) { | 6886 | !test_bit(EXTENT_FLAG_PREALLOC, &em->flags))) { |
5875 | ret = prealloc_file_range(inode, | 6887 | ret = btrfs_prealloc_file_range(inode, 0, cur_offset, |
5876 | cur_offset, last_byte, | 6888 | last_byte - cur_offset, |
5877 | alloc_hint, mode, offset+len); | 6889 | 1 << inode->i_blkbits, |
6890 | offset + len, | ||
6891 | &alloc_hint); | ||
5878 | if (ret < 0) { | 6892 | if (ret < 0) { |
5879 | free_extent_map(em); | 6893 | free_extent_map(em); |
5880 | break; | 6894 | break; |
5881 | } | 6895 | } |
5882 | } | 6896 | } |
5883 | if (em->block_start <= EXTENT_MAP_LAST_BYTE) | ||
5884 | alloc_hint = em->block_start; | ||
5885 | free_extent_map(em); | 6897 | free_extent_map(em); |
5886 | 6898 | ||
5887 | cur_offset = last_byte; | 6899 | cur_offset = last_byte; |
@@ -5893,8 +6905,7 @@ static long btrfs_fallocate(struct inode *inode, int mode, | |||
5893 | unlock_extent_cached(&BTRFS_I(inode)->io_tree, alloc_start, locked_end, | 6905 | unlock_extent_cached(&BTRFS_I(inode)->io_tree, alloc_start, locked_end, |
5894 | &cached_state, GFP_NOFS); | 6906 | &cached_state, GFP_NOFS); |
5895 | 6907 | ||
5896 | btrfs_free_reserved_data_space(BTRFS_I(inode)->root, inode, | 6908 | btrfs_free_reserved_data_space(inode, alloc_end - alloc_start); |
5897 | alloc_end - alloc_start); | ||
5898 | out: | 6909 | out: |
5899 | mutex_unlock(&inode->i_mutex); | 6910 | mutex_unlock(&inode->i_mutex); |
5900 | return ret; | 6911 | return ret; |