diff options
author | das <das@FreeBSD.org> | 2005-04-16 23:47:19 +0000 |
---|---|---|
committer | das <das@FreeBSD.org> | 2005-04-16 23:47:19 +0000 |
commit | 839fea181db8f168bf31c40cdc7996b8aa2a2228 (patch) | |
tree | 31342c84b1c18cf3b53dff0fff069431dec9eac4 /sys/fs | |
parent | 691c2c574b95bbbcc8872b75cd7b245e98f699bf (diff) | |
download | FreeBSD-src-839fea181db8f168bf31c40cdc7996b8aa2a2228.zip FreeBSD-src-839fea181db8f168bf31c40cdc7996b8aa2a2228.tar.gz |
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.
Diffstat (limited to 'sys/fs')
-rw-r--r-- | sys/fs/msdosfs/msdosfs_lookup.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/sys/fs/msdosfs/msdosfs_lookup.c b/sys/fs/msdosfs/msdosfs_lookup.c index 5f3e137..a16881e 100644 --- a/sys/fs/msdosfs/msdosfs_lookup.c +++ b/sys/fs/msdosfs/msdosfs_lookup.c @@ -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: |