2012/12/7 Ashish Sangwan <ashishsangwan2@xxxxxxxxx>: > On Thu, Dec 6, 2012 at 8:06 PM, Forrest Liu <forrestl@xxxxxxxxxxxx> wrote: >> Hi Ashish, >> >> There have a chance to do a trivial update, and this case will be >> covered in ext4_ext_remove_space. >> >> + if (err == 0 && eh->eh_entries == 0 && path[depth].p_bh != NULL) { >> err = ext4_ext_rm_idx(handle, inode, path + depth); >> + /* If this was the first extent index in node, >> + * propagates the ei_block updation info to top */ >> + if(!err) { >> + --depth; >> + path = path + depth; >> + while (--depth >= 0) { >> + if (path->p_idx != EXT_FIRST_INDEX(path->p_hdr)) >> + break; >> + path--; >> + err = ext4_ext_get_access(handle, inode, path); >> + if (err) >> + break; >> >> trivial update, when (path + 1)->p_idx->eh_entries == 0 >> >> + path->p_idx->ei_block =(path + >> 1)->p_idx->ei_block ; >> + err = ext4_ext_dirty(handle, inode, path); >> + if (err) >> + break; >> + } >> + } >> + } >> + >> >> I will trying to reproduce the problem tomorrow. > I think it will work fine atleast till depth = 2. > It would be great if you could check with depth > 2. > If still having this problem, we can think more. Hi Ashish, First, create a file lager than 4GB, and then punch out every even blocks; Use ex command in debugfs to dump extents, belowing is the result. Level Entries Logical Physical Length Flags 0/ 3 1/ 1 1 - 1048575 40013 1048575 1/ 3 1/ 5 1 - 231160 40012 231160 2/ 3 1/340 1 - 680 40011 680 3/ 3 1/340 1 - 1 2228225 - 2228225 1 3/ 3 2/340 3 - 3 2228227 - 2228227 1 3/ 3 3/340 5 - 5 2228229 - 2228229 1 punch out 231159, 231157, ..., 1.. Level Entries Logical Physical Length Flags 0/ 3 1/ 1 1 - 1048575 40013 1048575 1/ 3 1/ 4 231161 - 462320 2457604 231160 2/ 3 1/340 231161 - 231840 2457606 680 3/ 3 1/340 231161 - 231161 2459385 - 2459385 1 Then, we get incorrect logical index, if only do correction in ext4_ext_rm_leaf. Thanks, Forrest -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html