[PATCH vfs-2.6 1/6] vfs: replace parent == dentry->d_parent by IS_ROOT()
authorOGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
Wed, 15 Oct 2008 22:50:27 +0000 (07:50 +0900)
committerAl Viro <viro@zeniv.linux.org.uk>
Thu, 23 Oct 2008 09:13:16 +0000 (05:13 -0400)
Signed-off-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
fs/dcache.c
fs/namei.c

index 1710d2484fd9748fada559e1caf1d789bf08048f..c6fd1f27da5777f7912c7d10bba421093d1719ce 100644 (file)
@@ -174,9 +174,12 @@ static struct dentry *d_kill(struct dentry *dentry)
        dentry_stat.nr_dentry--;        /* For d_free, below */
        /*drops the locks, at that point nobody can reach this dentry */
        dentry_iput(dentry);
-       parent = dentry->d_parent;
+       if (IS_ROOT(dentry))
+               parent = NULL;
+       else
+               parent = dentry->d_parent;
        d_free(dentry);
-       return dentry == parent ? NULL : parent;
+       return parent;
 }
 
 /* 
@@ -666,11 +669,12 @@ static void shrink_dcache_for_umount_subtree(struct dentry *dentry)
                                BUG();
                        }
 
-                       parent = dentry->d_parent;
-                       if (parent == dentry)
+                       if (IS_ROOT(dentry))
                                parent = NULL;
-                       else
+                       else {
+                               parent = dentry->d_parent;
                                atomic_dec(&parent->d_count);
+                       }
 
                        list_del(&dentry->d_u.d_child);
                        detached++;
@@ -1723,7 +1727,7 @@ static int d_isparent(struct dentry *p1, struct dentry *p2)
 {
        struct dentry *p;
 
-       for (p = p2; p->d_parent != p; p = p->d_parent) {
+       for (p = p2; !IS_ROOT(p); p = p->d_parent) {
                if (p->d_parent == p1)
                        return 1;
        }
@@ -2168,10 +2172,9 @@ int is_subdir(struct dentry * new_dentry, struct dentry * old_dentry)
                seq = read_seqbegin(&rename_lock);
                for (;;) {
                        if (new_dentry != old_dentry) {
-                               struct dentry * parent = new_dentry->d_parent;
-                               if (parent == new_dentry)
+                               if (IS_ROOT(new_dentry))
                                        break;
-                               new_dentry = parent;
+                               new_dentry = new_dentry->d_parent;
                                continue;
                        }
                        result = 1;
index 2b8f823eda442d383e517df4895c989a84c13c01..068a9e50c8c09e0b52156cd7f63538a37ae8cf9b 100644 (file)
@@ -1454,7 +1454,7 @@ struct dentry *lock_rename(struct dentry *p1, struct dentry *p2)
 
        mutex_lock(&p1->d_inode->i_sb->s_vfs_rename_mutex);
 
-       for (p = p1; p->d_parent != p; p = p->d_parent) {
+       for (p = p1; !IS_ROOT(p); p = p->d_parent) {
                if (p->d_parent == p2) {
                        mutex_lock_nested(&p2->d_inode->i_mutex, I_MUTEX_PARENT);
                        mutex_lock_nested(&p1->d_inode->i_mutex, I_MUTEX_CHILD);
@@ -1462,7 +1462,7 @@ struct dentry *lock_rename(struct dentry *p1, struct dentry *p2)
                }
        }
 
-       for (p = p2; p->d_parent != p; p = p->d_parent) {
+       for (p = p2; !IS_ROOT(p); p = p->d_parent) {
                if (p->d_parent == p1) {
                        mutex_lock_nested(&p1->d_inode->i_mutex, I_MUTEX_PARENT);
                        mutex_lock_nested(&p2->d_inode->i_mutex, I_MUTEX_CHILD);