diff options
author | Nick Piggin <npiggin@kernel.dk> | 2011-01-07 01:49:29 -0500 |
---|---|---|
committer | Nick Piggin <npiggin@kernel.dk> | 2011-01-07 01:50:20 -0500 |
commit | ec2447c278ee973d35f38e53ca16ba7f965ae33d (patch) | |
tree | 5d17a0523c301b8c71c0f198ffe7782c5e9c0ea9 /fs/dcache.c | |
parent | b1e6a015a580ad145689ad1d6b4aa0e03e6c868b (diff) |
hostfs: simplify locking
Remove dcache_lock locking from hostfs filesystem, and move it into dcache
helpers. All that is required is a coherent path name. Protection from
concurrent modification of the namespace after path name generation is not
provided in current code, because dcache_lock is dropped before the path is
used.
Signed-off-by: Nick Piggin <npiggin@kernel.dk>
Diffstat (limited to 'fs/dcache.c')
-rw-r--r-- | fs/dcache.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/fs/dcache.c b/fs/dcache.c index 6f59f375ed9d..61beb40dd6bf 100644 --- a/fs/dcache.c +++ b/fs/dcache.c | |||
@@ -2171,7 +2171,7 @@ char *dynamic_dname(struct dentry *dentry, char *buffer, int buflen, | |||
2171 | /* | 2171 | /* |
2172 | * Write full pathname from the root of the filesystem into the buffer. | 2172 | * Write full pathname from the root of the filesystem into the buffer. |
2173 | */ | 2173 | */ |
2174 | char *__dentry_path(struct dentry *dentry, char *buf, int buflen) | 2174 | static char *__dentry_path(struct dentry *dentry, char *buf, int buflen) |
2175 | { | 2175 | { |
2176 | char *end = buf + buflen; | 2176 | char *end = buf + buflen; |
2177 | char *retval; | 2177 | char *retval; |
@@ -2198,7 +2198,18 @@ char *__dentry_path(struct dentry *dentry, char *buf, int buflen) | |||
2198 | Elong: | 2198 | Elong: |
2199 | return ERR_PTR(-ENAMETOOLONG); | 2199 | return ERR_PTR(-ENAMETOOLONG); |
2200 | } | 2200 | } |
2201 | EXPORT_SYMBOL(__dentry_path); | 2201 | |
2202 | char *dentry_path_raw(struct dentry *dentry, char *buf, int buflen) | ||
2203 | { | ||
2204 | char *retval; | ||
2205 | |||
2206 | spin_lock(&dcache_lock); | ||
2207 | retval = __dentry_path(dentry, buf, buflen); | ||
2208 | spin_unlock(&dcache_lock); | ||
2209 | |||
2210 | return retval; | ||
2211 | } | ||
2212 | EXPORT_SYMBOL(dentry_path_raw); | ||
2202 | 2213 | ||
2203 | char *dentry_path(struct dentry *dentry, char *buf, int buflen) | 2214 | char *dentry_path(struct dentry *dentry, char *buf, int buflen) |
2204 | { | 2215 | { |