diff options
Diffstat (limited to 'fs/btrfs/tree-log.c')
-rw-r--r-- | fs/btrfs/tree-log.c | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c index ba2f15109dac..b561e7a4007d 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c | |||
@@ -3495,21 +3495,27 @@ static int log_one_extent(struct btrfs_trans_handle *trans, | |||
3495 | int ret; | 3495 | int ret; |
3496 | int index = log->log_transid % 2; | 3496 | int index = log->log_transid % 2; |
3497 | bool skip_csum = BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM; | 3497 | bool skip_csum = BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM; |
3498 | 3498 | int extent_inserted = 0; | |
3499 | ret = __btrfs_drop_extents(trans, log, inode, path, em->start, | ||
3500 | em->start + em->len, NULL, 0); | ||
3501 | if (ret) | ||
3502 | return ret; | ||
3503 | 3499 | ||
3504 | INIT_LIST_HEAD(&ordered_sums); | 3500 | INIT_LIST_HEAD(&ordered_sums); |
3505 | btrfs_init_map_token(&token); | 3501 | btrfs_init_map_token(&token); |
3506 | key.objectid = btrfs_ino(inode); | ||
3507 | key.type = BTRFS_EXTENT_DATA_KEY; | ||
3508 | key.offset = em->start; | ||
3509 | 3502 | ||
3510 | ret = btrfs_insert_empty_item(trans, log, path, &key, sizeof(*fi)); | 3503 | ret = __btrfs_drop_extents(trans, log, inode, path, em->start, |
3504 | em->start + em->len, NULL, 0, 1, | ||
3505 | sizeof(*fi), &extent_inserted); | ||
3511 | if (ret) | 3506 | if (ret) |
3512 | return ret; | 3507 | return ret; |
3508 | |||
3509 | if (!extent_inserted) { | ||
3510 | key.objectid = btrfs_ino(inode); | ||
3511 | key.type = BTRFS_EXTENT_DATA_KEY; | ||
3512 | key.offset = em->start; | ||
3513 | |||
3514 | ret = btrfs_insert_empty_item(trans, log, path, &key, | ||
3515 | sizeof(*fi)); | ||
3516 | if (ret) | ||
3517 | return ret; | ||
3518 | } | ||
3513 | leaf = path->nodes[0]; | 3519 | leaf = path->nodes[0]; |
3514 | fi = btrfs_item_ptr(leaf, path->slots[0], | 3520 | fi = btrfs_item_ptr(leaf, path->slots[0], |
3515 | struct btrfs_file_extent_item); | 3521 | struct btrfs_file_extent_item); |