aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2011-07-17 10:17:46 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2011-07-20 20:48:01 -0400
commit79ac5a46c5c1c17476fbf84b4d4600d6d565defd (patch)
treea7a30f180ae723b2066ac32aa2be4a64d502f172 /fs
parent10d9f309d88ca7f47133d57e99b72810f119f75b (diff)
jfs_lookup(): don't bother with . or ..
they'll never be passed to ->lookup() Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs')
-rw-r--r--fs/jfs/namei.c39
1 files changed, 15 insertions, 24 deletions
diff --git a/fs/jfs/namei.c b/fs/jfs/namei.c
index 24733155199..03787ef6a11 100644
--- a/fs/jfs/namei.c
+++ b/fs/jfs/namei.c
@@ -1456,34 +1456,25 @@ static struct dentry *jfs_lookup(struct inode *dip, struct dentry *dentry, struc
1456 ino_t inum; 1456 ino_t inum;
1457 struct inode *ip; 1457 struct inode *ip;
1458 struct component_name key; 1458 struct component_name key;
1459 const char *name = dentry->d_name.name;
1460 int len = dentry->d_name.len;
1461 int rc; 1459 int rc;
1462 1460
1463 jfs_info("jfs_lookup: name = %s", name); 1461 jfs_info("jfs_lookup: name = %s", dentry->d_name.name);
1464 1462
1465 if ((name[0] == '.') && (len == 1)) 1463 if ((rc = get_UCSname(&key, dentry)))
1466 inum = dip->i_ino; 1464 return ERR_PTR(rc);
1467 else if (strcmp(name, "..") == 0) 1465 rc = dtSearch(dip, &key, &inum, &btstack, JFS_LOOKUP);
1468 inum = PARENT(dip); 1466 free_UCSname(&key);
1469 else { 1467 if (rc == -ENOENT) {
1470 if ((rc = get_UCSname(&key, dentry))) 1468 ip = NULL;
1471 return ERR_PTR(rc); 1469 } else if (rc) {
1472 rc = dtSearch(dip, &key, &inum, &btstack, JFS_LOOKUP); 1470 jfs_err("jfs_lookup: dtSearch returned %d", rc);
1473 free_UCSname(&key); 1471 ip = ERR_PTR(rc);
1474 if (rc == -ENOENT) { 1472 } else {
1475 d_add(dentry, NULL); 1473 ip = jfs_iget(dip->i_sb, inum);
1476 return NULL; 1474 if (IS_ERR(ip))
1477 } else if (rc) { 1475 jfs_err("jfs_lookup: iget failed on inum %d", (uint)inum);
1478 jfs_err("jfs_lookup: dtSearch returned %d", rc);
1479 return ERR_PTR(rc);
1480 }
1481 } 1476 }
1482 1477
1483 ip = jfs_iget(dip->i_sb, inum);
1484 if (IS_ERR(ip))
1485 jfs_err("jfs_lookup: iget failed on inum %d", (uint) inum);
1486
1487 return d_splice_alias(ip, dentry); 1478 return d_splice_alias(ip, dentry);
1488} 1479}
1489 1480