aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/ext4/ext4_extents.h3
-rw-r--r--fs/ext4/extents.c31
2 files changed, 23 insertions, 11 deletions
diff --git a/fs/ext4/ext4_extents.h b/fs/ext4/ext4_extents.h
index 20a84105a10b..9538633879d7 100644
--- a/fs/ext4/ext4_extents.h
+++ b/fs/ext4/ext4_extents.h
@@ -43,8 +43,7 @@
43#define CHECK_BINSEARCH__ 43#define CHECK_BINSEARCH__
44 44
45/* 45/*
46 * If EXT_DEBUG is defined you can use the 'extdebug' mount option 46 * Turn on EXT_DEBUG to get lots of info about extents operations.
47 * to get lots of info about what's going on.
48 */ 47 */
49#define EXT_DEBUG__ 48#define EXT_DEBUG__
50#ifdef EXT_DEBUG 49#ifdef EXT_DEBUG
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
index c583ebd1e41f..13db43408533 100644
--- a/fs/ext4/extents.c
+++ b/fs/ext4/extents.c
@@ -437,8 +437,9 @@ static void ext4_ext_show_path(struct inode *inode, struct ext4_ext_path *path)
437 ext_debug(" %d->%llu", le32_to_cpu(path->p_idx->ei_block), 437 ext_debug(" %d->%llu", le32_to_cpu(path->p_idx->ei_block),
438 idx_pblock(path->p_idx)); 438 idx_pblock(path->p_idx));
439 } else if (path->p_ext) { 439 } else if (path->p_ext) {
440 ext_debug(" %d:%d:%llu ", 440 ext_debug(" %d:[%d]%d:%llu ",
441 le32_to_cpu(path->p_ext->ee_block), 441 le32_to_cpu(path->p_ext->ee_block),
442 ext4_ext_is_uninitialized(path->p_ext),
442 ext4_ext_get_actual_len(path->p_ext), 443 ext4_ext_get_actual_len(path->p_ext),
443 ext_pblock(path->p_ext)); 444 ext_pblock(path->p_ext));
444 } else 445 } else
@@ -460,8 +461,11 @@ static void ext4_ext_show_leaf(struct inode *inode, struct ext4_ext_path *path)
460 eh = path[depth].p_hdr; 461 eh = path[depth].p_hdr;
461 ex = EXT_FIRST_EXTENT(eh); 462 ex = EXT_FIRST_EXTENT(eh);
462 463
464 ext_debug("Displaying leaf extents for inode %lu\n", inode->i_ino);
465
463 for (i = 0; i < le16_to_cpu(eh->eh_entries); i++, ex++) { 466 for (i = 0; i < le16_to_cpu(eh->eh_entries); i++, ex++) {
464 ext_debug("%d:%d:%llu ", le32_to_cpu(ex->ee_block), 467 ext_debug("%d:[%d]%d:%llu ", le32_to_cpu(ex->ee_block),
468 ext4_ext_is_uninitialized(ex),
465 ext4_ext_get_actual_len(ex), ext_pblock(ex)); 469 ext4_ext_get_actual_len(ex), ext_pblock(ex));
466 } 470 }
467 ext_debug("\n"); 471 ext_debug("\n");
@@ -580,9 +584,10 @@ ext4_ext_binsearch(struct inode *inode,
580 } 584 }
581 585
582 path->p_ext = l - 1; 586 path->p_ext = l - 1;
583 ext_debug(" -> %d:%llu:%d ", 587 ext_debug(" -> %d:%llu:[%d]%d ",
584 le32_to_cpu(path->p_ext->ee_block), 588 le32_to_cpu(path->p_ext->ee_block),
585 ext_pblock(path->p_ext), 589 ext_pblock(path->p_ext),
590 ext4_ext_is_uninitialized(path->p_ext),
586 ext4_ext_get_actual_len(path->p_ext)); 591 ext4_ext_get_actual_len(path->p_ext));
587 592
588#ifdef CHECK_BINSEARCH 593#ifdef CHECK_BINSEARCH
@@ -850,9 +855,10 @@ static int ext4_ext_split(handle_t *handle, struct inode *inode,
850 path[depth].p_ext++; 855 path[depth].p_ext++;
851 while (path[depth].p_ext <= 856 while (path[depth].p_ext <=
852 EXT_MAX_EXTENT(path[depth].p_hdr)) { 857 EXT_MAX_EXTENT(path[depth].p_hdr)) {
853 ext_debug("move %d:%llu:%d in new leaf %llu\n", 858 ext_debug("move %d:%llu:[%d]%d in new leaf %llu\n",
854 le32_to_cpu(path[depth].p_ext->ee_block), 859 le32_to_cpu(path[depth].p_ext->ee_block),
855 ext_pblock(path[depth].p_ext), 860 ext_pblock(path[depth].p_ext),
861 ext4_ext_is_uninitialized(path[depth].p_ext),
856 ext4_ext_get_actual_len(path[depth].p_ext), 862 ext4_ext_get_actual_len(path[depth].p_ext),
857 newblock); 863 newblock);
858 /*memmove(ex++, path[depth].p_ext++, 864 /*memmove(ex++, path[depth].p_ext++,
@@ -1580,9 +1586,11 @@ int ext4_ext_insert_extent(handle_t *handle, struct inode *inode,
1580 1586
1581 /* try to insert block into found extent and return */ 1587 /* try to insert block into found extent and return */
1582 if (ex && ext4_can_extents_be_merged(inode, ex, newext)) { 1588 if (ex && ext4_can_extents_be_merged(inode, ex, newext)) {
1583 ext_debug("append %d block to %d:%d (from %llu)\n", 1589 ext_debug("append [%d]%d block to %d:[%d]%d (from %llu)\n",
1590 ext4_ext_is_uninitialized(newext),
1584 ext4_ext_get_actual_len(newext), 1591 ext4_ext_get_actual_len(newext),
1585 le32_to_cpu(ex->ee_block), 1592 le32_to_cpu(ex->ee_block),
1593 ext4_ext_is_uninitialized(ex),
1586 ext4_ext_get_actual_len(ex), ext_pblock(ex)); 1594 ext4_ext_get_actual_len(ex), ext_pblock(ex));
1587 err = ext4_ext_get_access(handle, inode, path + depth); 1595 err = ext4_ext_get_access(handle, inode, path + depth);
1588 if (err) 1596 if (err)
@@ -1651,9 +1659,10 @@ has_space:
1651 1659
1652 if (!nearex) { 1660 if (!nearex) {
1653 /* there is no extent in this leaf, create first one */ 1661 /* there is no extent in this leaf, create first one */
1654 ext_debug("first extent in the leaf: %d:%llu:%d\n", 1662 ext_debug("first extent in the leaf: %d:%llu:[%d]%d\n",
1655 le32_to_cpu(newext->ee_block), 1663 le32_to_cpu(newext->ee_block),
1656 ext_pblock(newext), 1664 ext_pblock(newext),
1665 ext4_ext_is_uninitialized(newext),
1657 ext4_ext_get_actual_len(newext)); 1666 ext4_ext_get_actual_len(newext));
1658 path[depth].p_ext = EXT_FIRST_EXTENT(eh); 1667 path[depth].p_ext = EXT_FIRST_EXTENT(eh);
1659 } else if (le32_to_cpu(newext->ee_block) 1668 } else if (le32_to_cpu(newext->ee_block)
@@ -1663,10 +1672,11 @@ has_space:
1663 len = EXT_MAX_EXTENT(eh) - nearex; 1672 len = EXT_MAX_EXTENT(eh) - nearex;
1664 len = (len - 1) * sizeof(struct ext4_extent); 1673 len = (len - 1) * sizeof(struct ext4_extent);
1665 len = len < 0 ? 0 : len; 1674 len = len < 0 ? 0 : len;
1666 ext_debug("insert %d:%llu:%d after: nearest 0x%p, " 1675 ext_debug("insert %d:%llu:[%d]%d after: nearest 0x%p, "
1667 "move %d from 0x%p to 0x%p\n", 1676 "move %d from 0x%p to 0x%p\n",
1668 le32_to_cpu(newext->ee_block), 1677 le32_to_cpu(newext->ee_block),
1669 ext_pblock(newext), 1678 ext_pblock(newext),
1679 ext4_ext_is_uninitialized(newext),
1670 ext4_ext_get_actual_len(newext), 1680 ext4_ext_get_actual_len(newext),
1671 nearex, len, nearex + 1, nearex + 2); 1681 nearex, len, nearex + 1, nearex + 2);
1672 memmove(nearex + 2, nearex + 1, len); 1682 memmove(nearex + 2, nearex + 1, len);
@@ -1676,10 +1686,11 @@ has_space:
1676 BUG_ON(newext->ee_block == nearex->ee_block); 1686 BUG_ON(newext->ee_block == nearex->ee_block);
1677 len = (EXT_MAX_EXTENT(eh) - nearex) * sizeof(struct ext4_extent); 1687 len = (EXT_MAX_EXTENT(eh) - nearex) * sizeof(struct ext4_extent);
1678 len = len < 0 ? 0 : len; 1688 len = len < 0 ? 0 : len;
1679 ext_debug("insert %d:%llu:%d before: nearest 0x%p, " 1689 ext_debug("insert %d:%llu:[%d]%d before: nearest 0x%p, "
1680 "move %d from 0x%p to 0x%p\n", 1690 "move %d from 0x%p to 0x%p\n",
1681 le32_to_cpu(newext->ee_block), 1691 le32_to_cpu(newext->ee_block),
1682 ext_pblock(newext), 1692 ext_pblock(newext),
1693 ext4_ext_is_uninitialized(newext),
1683 ext4_ext_get_actual_len(newext), 1694 ext4_ext_get_actual_len(newext),
1684 nearex, len, nearex + 1, nearex + 2); 1695 nearex, len, nearex + 1, nearex + 2);
1685 memmove(nearex + 1, nearex, len); 1696 memmove(nearex + 1, nearex, len);
@@ -2094,7 +2105,8 @@ ext4_ext_rm_leaf(handle_t *handle, struct inode *inode,
2094 else 2105 else
2095 uninitialized = 0; 2106 uninitialized = 0;
2096 2107
2097 ext_debug("remove ext %u:%d\n", ex_ee_block, ex_ee_len); 2108 ext_debug("remove ext %u:[%d]%d\n", ex_ee_block,
2109 uninitialized, ex_ee_len);
2098 path[depth].p_ext = ex; 2110 path[depth].p_ext = ex;
2099 2111
2100 a = ex_ee_block > start ? ex_ee_block : start; 2112 a = ex_ee_block > start ? ex_ee_block : start;
@@ -2743,6 +2755,7 @@ insert:
2743 } else if (err) 2755 } else if (err)
2744 goto fix_extent_len; 2756 goto fix_extent_len;
2745out: 2757out:
2758 ext4_ext_show_leaf(inode, path);
2746 return err ? err : allocated; 2759 return err ? err : allocated;
2747 2760
2748fix_extent_len: 2761fix_extent_len: