diff options
author | Grant Erickson <gerickson@nuovations.com> | 2008-06-14 01:46:29 +1000 |
---|---|---|
committer | Josh Boyer <jwboyer@vader.jdub.homelinux.org> | 2008-06-18 09:07:20 -0400 |
commit | 1263a74aff28f969043c89d0235b332529df4a30 (patch) | |
tree | e14a49507aa9339851270531e2c625070567b47e | |
parent | a8523b2d61e2eb750447c57bff1f5fcae33ef8fc (diff) |
mkfs.jffs2: Remove Incorrect Find Optimization
Remove performance optimization in find_filesystem_entry that prevented
the successful simultaneous use of --root and --devtable where the
latter is only used to fix-up permissions and ownership and to create
device nodes.
As it stood, the performance optimization prevented a successful find
where directory recursion was required or where the file being searched
for had any mode permission bits set.
See http://lists.infradead.org/pipermail/linux-mtd/2008-June/021997.html
for additional information.
Signed-off-by: Grant Erickson <gerickson@nuovations.com>
Signed-off-by: Josh Boyer <jwboyer@vader.jdub.homelinux.org>
-rw-r--r-- | mkfs.jffs2.c | 39 |
1 files changed, 18 insertions, 21 deletions
diff --git a/mkfs.jffs2.c b/mkfs.jffs2.c index cdf2a5a..f042ae7 100644 --- a/mkfs.jffs2.c +++ b/mkfs.jffs2.c @@ -276,30 +276,27 @@ static struct filesystem_entry *find_filesystem_entry( e = dir->files; } while (e) { - /* Only bother to do the expensive strcmp on matching file types */ - if (type == (e->sb.st_mode & S_IFMT)) { - if (S_ISDIR(e->sb.st_mode)) { - int len = strlen(e->fullname); - - /* Check if we are a parent of the correct path */ - if (strncmp(e->fullname, fullname, len) == 0) { - /* Is this an _exact_ match? */ - if (strcmp(fullname, e->fullname) == 0) { - return (e); - } - /* Looks like we found a parent of the correct path */ - if (fullname[len] == '/') { - if (e->files) { - return (find_filesystem_entry (e, fullname, type)); - } else { - return NULL; - } - } - } - } else { + if (S_ISDIR(e->sb.st_mode)) { + int len = strlen(e->fullname); + + /* Check if we are a parent of the correct path */ + if (strncmp(e->fullname, fullname, len) == 0) { + /* Is this an _exact_ match? */ if (strcmp(fullname, e->fullname) == 0) { return (e); } + /* Looks like we found a parent of the correct path */ + if (fullname[len] == '/') { + if (e->files) { + return (find_filesystem_entry (e, fullname, type)); + } else { + return NULL; + } + } + } + } else { + if (strcmp(fullname, e->fullname) == 0) { + return (e); } } e = e->next; |