Previously, ext2fs_extent_open2() copied the passed-in inode structure into the extent handle, and the extent functions modified the copy of the inode structure if necessary due to extent splits, etc. Change ext2fs_extent_open2() so that the extent functions use the inode structure passed into ext2fs_extent_open2(). Otherwise the passed-in inode structure could become out of date due to changes made by the extent functions. Signed-off-by: "Theodore Ts'o" <tytso@xxxxxxx> --- lib/ext2fs/extent.c | 13 ++++--------- 1 files changed, 4 insertions(+), 9 deletions(-) diff --git a/lib/ext2fs/extent.c b/lib/ext2fs/extent.c index 490dbe8..5e07092 100644 --- a/lib/ext2fs/extent.c +++ b/lib/ext2fs/extent.c @@ -53,6 +53,7 @@ struct ext2_extent_handle { ext2_filsys fs; ext2_ino_t ino; struct ext2_inode *inode; + struct ext2_inode inodebuf; int type; int level; int max_depth; @@ -165,8 +166,6 @@ extern void ext2fs_extent_free(ext2_extent_handle_t handle) if (!handle) return; - if (handle->inode) - ext2fs_free_mem(&handle->inode); if (handle->path) { for (i=1; i <= handle->max_depth; i++) { if (handle->path[i].buf) @@ -203,17 +202,13 @@ extern errcode_t ext2fs_extent_open2(ext2_filsys fs, ext2_ino_t ino, return retval; memset(handle, 0, sizeof(struct ext2_extent_handle)); - retval = ext2fs_get_mem(sizeof(struct ext2_inode), &handle->inode); - if (retval) - goto errout; - handle->ino = ino; handle->fs = fs; if (inode) { - memcpy(handle->inode, inode, sizeof(struct ext2_inode)); - } - else { + handle->inode = inode; + } else { + handle->inode = &handle->inodebuf; retval = ext2fs_read_inode(fs, ino, handle->inode); if (retval) goto errout; -- 1.7.0.4 -- 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