Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > 27922b4260f65d317aabda37e42bbbff > files > 891

kernel-2.6.18-238.el5.src.rpm

From: Jeff Layton <jlayton@redhat.com>
Date: Mon, 15 Feb 2010 16:08:14 -0500
Subject: [fs] cifs: fix dentry hash for case-insensitive mounts
Message-id: <1266250096-21498-3-git-send-email-jlayton@redhat.com>
Patchwork-id: 23273
O-Subject: [RHEL5.5 PATCH 2/4] BZ#562947: cifs: fix dentry hash calculation for
	case-insensitive mounts
Bugzilla: 562947
RH-Acked-by: Steve Dickson <SteveD@redhat.com>

(backported from 05507fa2ac8d5e503bcf33ee43329449027d9060)

case-insensitive mounts shouldn't use full_name_hash(). Make sure we
use the parent dentry's d_hash routine when one is set.

Reported-by: Dave Kleikamp <shaggy@linux.vnet.ibm.com>
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve French <sfrench@us.ibm.com>

diff --git a/fs/cifs/readdir.c b/fs/cifs/readdir.c
index c8a7a97..3468102 100644
--- a/fs/cifs/readdir.c
+++ b/fs/cifs/readdir.c
@@ -77,7 +77,11 @@ construct_dentry(struct qstr *qstring, struct file *file,
 
 	cFYI(1, ("For %s", qstring->name));
 
-	qstring->hash = full_name_hash(qstring->name, qstring->len);
+	if (file->f_dentry->d_op && file->f_dentry->d_op->d_hash)
+		file->f_dentry->d_op->d_hash(file->f_dentry, qstring);
+	else
+		qstring->hash = full_name_hash(qstring->name, qstring->len);
+
 	tmp_dentry = d_lookup(file->f_dentry, qstring);
 	if (tmp_dentry) {
 		/* BB: overwrite old name? i.e. tmp_dentry->d_name and
@@ -930,8 +934,6 @@ static int cifs_get_name_from_search_buf(struct qstr *pqst,
 		pqst->name = filename;
 		pqst->len = len;
 	}
-	pqst->hash = full_name_hash(pqst->name, pqst->len);
-/*	cFYI(1, ("filldir on %s",pqst->name));  */
 	return rc;
 }