]> git.neil.brown.name Git - LaFS.git/commitdiff
truncate: fixes for pruning addresses.
authorNeilBrown <neilb@suse.de>
Tue, 8 Jun 2010 08:10:37 +0000 (18:10 +1000)
committerNeilBrown <neilb@suse.de>
Tue, 8 Jun 2010 08:10:37 +0000 (18:10 +1000)
1/ after pruning addresses, we need to clear the index block
2/ InoIdx blocks don't follow the rule that physaddr==0 means empty.

Signed-off-by: NeilBrown <neilb@suse.de>
inode.c

diff --git a/inode.c b/inode.c
index 44fb73f7feb0fe29e3eb84c600c2c0d17b64c332..e1ce2f270c54d8b695172861132397eecf256dcb 100644 (file)
--- a/inode.c
+++ b/inode.c
@@ -797,10 +797,12 @@ void lafs_inode_handle_orphan(struct datablock *b)
                LAFS_BUG(!test_bit(B_Dirty, &ib->b.flags), &ib->b);
                lafs_incorporate(fs, ib);
        }
-       if (!test_bit(B_PhysValid, &ib->b.flags) ||
+       if (test_bit(B_InoIdx, &ib->b.flags) ||
+           !test_bit(B_PhysValid, &ib->b.flags) ||
            ib->b.physaddr != 0) {
                lafs_dirty_iblock(ib);
                lafs_walk_leaf_index(ib, prune, ib);
+               lafs_clear_index(ib);
        }
        if (test_bit(B_Dirty, &ib->b.flags))
                lafs_incorporate(fs, ib);