Linux 2.6.26-rc9
[pandora-kernel.git] / fs / gfs2 / ops_dentry.c
index c6bac6b..4a5e676 100644 (file)
@@ -11,7 +11,6 @@
 #include <linux/spinlock.h>
 #include <linux/completion.h>
 #include <linux/buffer_head.h>
-#include <linux/smp_lock.h>
 #include <linux/gfs2_ondisk.h>
 #include <linux/crc32.h>
 #include <linux/lm_interface.h>
@@ -22,6 +21,7 @@
 #include "glock.h"
 #include "ops_dentry.h"
 #include "util.h"
+#include "inode.h"
 
 /**
  * gfs2_drevalidate - Check directory lookup consistency
@@ -41,26 +41,27 @@ static int gfs2_drevalidate(struct dentry *dentry, struct nameidata *nd)
        struct gfs2_inode *dip = GFS2_I(parent->d_inode);
        struct inode *inode = dentry->d_inode;
        struct gfs2_holder d_gh;
-       struct gfs2_inode *ip;
-       struct gfs2_inum_host inum;
-       unsigned int type;
+       struct gfs2_inode *ip = NULL;
        int error;
-       int had_lock=0;
+       int had_lock = 0;
 
-       if (inode && is_bad_inode(inode))
-               goto invalid;
+       if (inode) {
+               if (is_bad_inode(inode))
+                       goto invalid;
+               ip = GFS2_I(inode);
+       }
 
        if (sdp->sd_args.ar_localcaching)
                goto valid;
 
-       had_lock = gfs2_glock_is_locked_by_me(dip->i_gl);
+       had_lock = (gfs2_glock_is_locked_by_me(dip->i_gl) != NULL);
        if (!had_lock) {
                error = gfs2_glock_nq_init(dip->i_gl, LM_ST_SHARED, 0, &d_gh);
                if (error)
                        goto fail;
        } 
 
-       error = gfs2_dir_search(parent->d_inode, &dentry->d_name, &inum, &type);
+       error = gfs2_dir_check(parent->d_inode, &dentry->d_name, ip);
        switch (error) {
        case 0:
                if (!inode)
@@ -74,16 +75,6 @@ static int gfs2_drevalidate(struct dentry *dentry, struct nameidata *nd)
                goto fail_gunlock;
        }
 
-       ip = GFS2_I(inode);
-
-       if (!gfs2_inum_equal(&ip->i_num, &inum))
-               goto invalid_gunlock;
-
-       if (IF2DT(ip->i_inode.i_mode) != type) {
-               gfs2_consist_inode(dip);
-               goto fail_gunlock;
-       }
-
 valid_gunlock:
        if (!had_lock)
                gfs2_glock_dq_uninit(&d_gh);