Disable negative name caching for msdosfs to work around a bug.

Since the name cache is case-sensitive and msdosfs isn't,
creating a file 'foo' won't invalidate a negative entry for 'FOO'.
There are similar problems related to 8.3 filenames.

A better solution is to override VOP_LOOKUP with a method that
canonicalizes the name, then calls vfs_cache_lookup().  Unfortunately,
it's not quite that simple because vfs_cache_lookup() will call
msdosfs_lookup() on a cache miss, and msdosfs_lookup() needs a way to
get at the original component name.
This commit is contained in:
das 2005-04-16 23:47:19 +00:00
parent 691c2c574b
commit 839fea181d

View File

@ -380,11 +380,18 @@ notfound:
cnp->cn_flags |= SAVENAME;
return (EJUSTRETURN);
}
#if 0
/*
* Insert name into cache (as non-existent) if appropriate.
*
* XXX Negative caching is broken for msdosfs because the name
* cache doesn't understand peculiarities such as case insensitivity
* and 8.3 filenames. Hence, it may not invalidate all negative
* entries if a file with this name is later created.
*/
if ((cnp->cn_flags & MAKEENTRY) && nameiop != CREATE)
cache_enter(vdp, *vpp, cnp);
#endif
return (ENOENT);
found: