]> git.ipfire.org Git - thirdparty/e2fsprogs.git/commitdiff
libext2fs: Don't make a copy of the inode in ext2fs_extent_open2()
authorTheodore Ts'o <tytso@mit.edu>
Thu, 22 Jul 2010 13:27:45 +0000 (09:27 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Thu, 22 Jul 2010 13:27:45 +0000 (09:27 -0400)
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@mit.edu>
lib/ext2fs/extent.c

index 490dbe87d8a06e9d98af128c73275832805f3bd7..5e0709259a8c681d70cce4543fa9126779031884 100644 (file)
@@ -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;