From: Theodore Ts'o Date: Thu, 22 Jul 2010 13:27:45 +0000 (-0400) Subject: libext2fs: Don't make a copy of the inode in ext2fs_extent_open2() X-Git-Tag: v1.42-WIP-0702~91 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f03bb73ceb55791f7a59dbb72cfdbe121c5d204e;p=thirdparty%2Fe2fsprogs.git 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" --- diff --git a/lib/ext2fs/extent.c b/lib/ext2fs/extent.c index 490dbe87d..5e0709259 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;