[linux-cifs-client] [PATCH] cifs: fix dentry hash calculation for case-insensitive mounts
Shirish Pargaonkar
shirishpargaonkar at gmail.com
Fri Feb 5 14:23:15 MST 2010
On Fri, Feb 5, 2010 at 3:03 PM, Jeff Layton <jlayton at redhat.com> wrote:
> On Fri, 5 Feb 2010 14:31:50 -0600
> Shirish Pargaonkar <shirishpargaonkar at gmail.com> wrote:
>
>> On Fri, Feb 5, 2010 at 12:30 PM, Jeff Layton <jlayton at redhat.com> wrote:
>> > 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 at linux.vnet.ibm.com>
>> > Signed-off-by: Jeff Layton <jlayton at redhat.com>
>> > ---
>> > fs/cifs/readdir.c | 7 +++++--
>> > 1 files changed, 5 insertions(+), 2 deletions(-)
>> >
>> > diff --git a/fs/cifs/readdir.c b/fs/cifs/readdir.c
>> > index f5618f8..c343b14 100644
>> > --- a/fs/cifs/readdir.c
>> > +++ b/fs/cifs/readdir.c
>> > @@ -77,6 +77,11 @@ cifs_readdir_lookup(struct dentry *parent, struct qstr *name,
>> >
>> > cFYI(1, ("For %s", name->name));
>> >
>> > + if (parent->d_op && parent->d_op->d_hash)
>> > + parent->d_op->d_hash(parent, name);
>> > + else
>> > + name->hash = full_name_hash(name->name, name->len);
>> > +
>> > dentry = d_lookup(parent, name);
>> > if (dentry) {
>> > /* FIXME: check for inode number changes? */
>> > @@ -671,8 +676,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;
>> > }
>> >
>> > --
>> > 1.6.6
>> >
>> > _______________________________________________
>> > linux-cifs-client mailing list
>> > linux-cifs-client at lists.samba.org
>> > https://lists.samba.org/mailman/listinfo/linux-cifs-client
>> >
>>
>> Jeff, these are functions, full_name_hash etc. treat name->name and
>> name->len as
>> character names strings and character name string lenghts, is that correct?
>> There is not unicode consideration while generating hash values at this point?
>
> I'm not sure I fully understand your question...
>
> The names are assumed to already be converted to filenames in the local
> character set. The hashing routines just treat the string as an opaque
> sequence of bytes of the given length.
>
> --
> Jeff Layton <jlayton at redhat.com>
>
OK, understand it now. Looks fine.
More information about the linux-cifs-client
mailing list