a->fileaddr = addr + i;
a->physaddr = 0;
a->cnt = 1;
- LAFS_BUG(!test_bit(B_Dirty, &ib->b.flags) &&
- !test_bit(B_Realloc, &ib->b.flags), &ib->b);
ib->uninc_table.pending_cnt++;
} else {
spin_unlock(&fs->lock);
goto out;
}
- if (ib->b.fileaddr < trunc_next) {
+ if (ib->b.fileaddr < trunc_next &&
+ lafs_leaf_next(ib, 0) < trunc_next) {
/* We only want to truncate part of this index block.
* So we copy addresses into uninc_table and then
* call lafs_incorporate.
*/
if (ib->uninc_table.pending_cnt == 0 &&
ib->uninc == NULL) {
- lafs_dirty_iblock(ib);
lafs_walk_leaf_index(ib, prune_some, ib);
+ if (ib->uninc_table.pending_cnt)
+ lafs_dirty_iblock(ib);
}
if (test_bit(B_Dirty, &ib->b.flags))
lafs_incorporate(fs, ib);