diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2011-07-17 10:17:46 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2011-07-20 20:48:01 -0400 |
commit | 79ac5a46c5c1c17476fbf84b4d4600d6d565defd (patch) | |
tree | a7a30f180ae723b2066ac32aa2be4a64d502f172 /fs/jfs/namei.c | |
parent | 10d9f309d88ca7f47133d57e99b72810f119f75b (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/jfs/namei.c')
-rw-r--r-- | fs/jfs/namei.c | 39 |
1 files changed, 15 insertions, 24 deletions
diff --git a/fs/jfs/namei.c b/fs/jfs/namei.c index 247331551992..03787ef6a118 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 | ||