From 55cadff7346f643487340cecd21b9f4da5a47907 Mon Sep 17 00:00:00 2001 From: alex Date: Sat, 7 Aug 2004 14:04:54 +0000 Subject: [PATCH] b=4048 - landed on HEAD --- lustre/lvfs/fsfilt_ext3.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/lustre/lvfs/fsfilt_ext3.c b/lustre/lvfs/fsfilt_ext3.c index 35ab5ef..be023a8 100644 --- a/lustre/lvfs/fsfilt_ext3.c +++ b/lustre/lvfs/fsfilt_ext3.c @@ -671,6 +671,7 @@ struct bpointers { unsigned long start; int num; int init_num; + int create; }; static int ext3_ext_new_extent_cb(struct ext3_extents_tree *tree, @@ -695,6 +696,25 @@ static int ext3_ext_new_extent_cb(struct ext3_extents_tree *tree, goto map; } + if (bp->create == 0) { + i = 0; + if (newex->e_block < bp->start) + i = bp->start - newex->e_block; + if (i >= newex->e_num) + CERROR("nothing to do?! i = %d, e_num = %u\n", + i, newex->e_num); + for (; i < newex->e_num && bp->num; i++) { + *(bp->created) = 0; + bp->created++; + *(bp->blocks) = 0; + bp->blocks++; + bp->num--; + bp->start++; + } + + return EXT_CONTINUE; + } + tgen = EXT_GENERATION(tree); count = ext3_ext_calc_credits_for_insert(tree, path); up_write(&EXT3_I(inode)->truncate_sem); @@ -784,6 +804,7 @@ int fsfilt_map_nblocks(struct inode *inode, unsigned long block, bp.created = created; bp.start = block; bp.init_num = bp.num = num; + bp.create = create; down_write(&EXT3_I(inode)->truncate_sem); err = ext3_ext_walk_space(&tree, block, num, ext3_ext_new_extent_cb); -- 1.8.3.1