static inline int d_revalidate(struct dentry *dentry, unsigned int flags)
 {
-       return dentry->d_op->d_revalidate(dentry, flags);
+       if (unlikely(dentry->d_flags & DCACHE_OP_REVALIDATE))
+               return dentry->d_op->d_revalidate(dentry, flags);
+       else
+               return 1;
 }
 
 /**
                                    struct dentry *dir,
                                    unsigned int flags)
 {
-       struct dentry *dentry;
-       int error;
-
-       dentry = d_lookup(dir, name);
+       struct dentry *dentry = d_lookup(dir, name);
        if (dentry) {
-               if (dentry->d_flags & DCACHE_OP_REVALIDATE) {
-                       error = d_revalidate(dentry, flags);
-                       if (unlikely(error <= 0)) {
-                               if (!error)
-                                       d_invalidate(dentry);
-                               dput(dentry);
-                               return ERR_PTR(error);
-                       }
+               int error = d_revalidate(dentry, flags);
+               if (unlikely(error <= 0)) {
+                       if (!error)
+                               d_invalidate(dentry);
+                       dput(dentry);
+                       return ERR_PTR(error);
                }
        }
        return dentry;
                        return -ECHILD;
 
                *seqp = seq;
-               if (unlikely(dentry->d_flags & DCACHE_OP_REVALIDATE))
-                       status = d_revalidate(dentry, nd->flags);
+               status = d_revalidate(dentry, nd->flags);
                if (likely(status > 0)) {
                        /*
                         * Note: do negative dentry check after revalidation in
                dentry = __d_lookup(parent, &nd->last);
                if (unlikely(!dentry))
                        return 0;
-               if (unlikely(dentry->d_flags & DCACHE_OP_REVALIDATE))
-                       status = d_revalidate(dentry, nd->flags);
+               status = d_revalidate(dentry, nd->flags);
        }
        if (unlikely(status <= 0)) {
                if (!status)
        if (IS_ERR(dentry))
                goto out;
        if (unlikely(!d_in_lookup(dentry))) {
-               if ((dentry->d_flags & DCACHE_OP_REVALIDATE) &&
-                   !(flags & LOOKUP_NO_REVAL)) {
+               if (!(flags & LOOKUP_NO_REVAL)) {
                        int error = d_revalidate(dentry, flags);
                        if (unlikely(error <= 0)) {
                                if (!error) {
                if (d_in_lookup(dentry))
                        break;
 
-               if (!(dentry->d_flags & DCACHE_OP_REVALIDATE))
-                       break;
-
                error = d_revalidate(dentry, nd->flags);
                if (likely(error > 0))
                        break;