[GFS2] Update copyright date to 2006
[linux-2.6.git] / fs / gfs2 / ops_dentry.c
index 7f61392..fef415e 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved.
- * Copyright (C) 2004-2005 Red Hat, Inc.  All rights reserved.
+ * Copyright (C) 2004-2006 Red Hat, Inc.  All rights reserved.
  *
  * This copyrighted material is made available to anyone wishing to use,
  * modify, copy, or redistribute it subject to the terms and conditions
@@ -14,7 +14,7 @@
 #include <linux/buffer_head.h>
 #include <linux/smp_lock.h>
 #include <linux/gfs2_ondisk.h>
-#include <asm/semaphore.h>
+#include <linux/crc32.h>
 
 #include "gfs2.h"
 #include "lm_interface.h"
 static int gfs2_drevalidate(struct dentry *dentry, struct nameidata *nd)
 {
        struct dentry *parent = dget_parent(dentry);
+       struct gfs2_sbd *sdp = parent->d_inode->i_sb->s_fs_info;
        struct gfs2_inode *dip = parent->d_inode->u.generic_ip;
-       struct inode *inode;
+       struct inode *inode = dentry->d_inode;
        struct gfs2_holder d_gh;
        struct gfs2_inode *ip;
        struct gfs2_inum inum;
        unsigned int type;
        int error;
 
-       lock_kernel();
-
-       inode = dentry->d_inode;
        if (inode && is_bad_inode(inode))
                goto invalid;
 
+       if (sdp->sd_args.ar_localcaching)
+               goto valid;
+
        error = gfs2_glock_nq_init(dip->i_gl, LM_ST_SHARED, 0, &d_gh);
        if (error)
                goto fail;
 
-       error = gfs2_dir_search(dip, &dentry->d_name, &inum, &type);
+       error = gfs2_dir_search(parent->d_inode, &dentry->d_name, &inum, &type);
        switch (error) {
        case 0:
                if (!inode)
@@ -84,7 +85,6 @@ static int gfs2_drevalidate(struct dentry *dentry, struct nameidata *nd)
        gfs2_glock_dq_uninit(&d_gh);
 
  valid:
-       unlock_kernel();
        dput(parent);
        return 1;
 
@@ -99,7 +99,6 @@ static int gfs2_drevalidate(struct dentry *dentry, struct nameidata *nd)
        }
        d_drop(dentry);
 
-       unlock_kernel();
        dput(parent);
        return 0;
 
@@ -107,12 +106,18 @@ static int gfs2_drevalidate(struct dentry *dentry, struct nameidata *nd)
        gfs2_glock_dq_uninit(&d_gh);
 
  fail:
-       unlock_kernel();
        dput(parent);
        return 0;
 }
 
+static int gfs2_dhash(struct dentry *dentry, struct qstr *str)
+{
+       str->hash = gfs2_disk_hash(str->name, str->len);
+       return 0;
+}
+
 struct dentry_operations gfs2_dops = {
        .d_revalidate = gfs2_drevalidate,
+       .d_hash = gfs2_dhash,
 };