block_t old_sum_blkaddr = get_sb(ssa_blkaddr);
block_t new_sum_blkaddr = get_newsb(ssa_blkaddr);
block_t end_sum_blkaddr = get_newsb(main_blkaddr);
+ block_t expand_sum_blkaddr = new_sum_blkaddr +
+ TOTAL_SEGS(sbi) - offset;
block_t blkaddr;
+ int ret;
void *zero_block = calloc(BLOCK_SZ, 1);
-
ASSERT(zero_block);
if (offset && new_sum_blkaddr < old_sum_blkaddr + offset) {
blkaddr = new_sum_blkaddr;
while (blkaddr < end_sum_blkaddr) {
- if (blkaddr - new_sum_blkaddr < TOTAL_SEGS(sbi))
- move_ssa(sbi, offset, blkaddr);
- else
- dev_write_block(zero_block, blkaddr);
- offset++;
- blkaddr++;
+ if (blkaddr < expand_sum_blkaddr) {
+ move_ssa(sbi, offset++, blkaddr++);
+ } else {
+ ret = dev_write_block(zero_block, blkaddr++);
+ ASSERT(ret >=0);
+ }
}
} else {
blkaddr = end_sum_blkaddr - 1;
offset = TOTAL_SEGS(sbi) - 1;
while (blkaddr >= new_sum_blkaddr) {
- if (blkaddr >= TOTAL_SEGS(sbi) + new_sum_blkaddr)
- dev_write_block(zero_block, blkaddr);
- else
- move_ssa(sbi, offset--, blkaddr);
- blkaddr--;
+ if (blkaddr >= expand_sum_blkaddr) {
+ ret = dev_write_block(zero_block, blkaddr--);
+ ASSERT(ret >=0);
+ } else {
+ move_ssa(sbi, offset--, blkaddr--);
+ }
}
}