summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrant Erickson <gerickson@nuovations.com>2008-06-14 01:46:29 +1000
committerJosh Boyer <jwboyer@vader.jdub.homelinux.org>2008-06-18 09:07:20 -0400
commit1263a74aff28f969043c89d0235b332529df4a30 (patch)
treee14a49507aa9339851270531e2c625070567b47e
parenta8523b2d61e2eb750447c57bff1f5fcae33ef8fc (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.c39
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;