From f03bb73ceb55791f7a59dbb72cfdbe121c5d204e Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Thu, 22 Jul 2010 09:27:45 -0400 Subject: [PATCH] libext2fs: Don't make a copy of the inode in ext2fs_extent_open2() 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" --- lib/ext2fs/extent.c | 13 ++++--------- 1 file 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.8.3.1