[patch 1/3] vfs: dcache sparse fixes

Fix the following sparse warnings:

fs/dcache.c:2183:19: warning: symbol 'filp_cachep' was not declared. Should it be static?
fs/dcache.c:115:3: warning: context imbalance in 'dentry_iput' - unexpected unlock
fs/dcache.c:188:2: warning: context imbalance in 'dput' - different lock contexts for basic block
fs/dcache.c:400:2: warning: context imbalance in 'prune_one_dentry' - different lock contexts for basic block
fs/dcache.c:431:22: warning: context imbalance in 'prune_dcache' - different lock contexts for basic block
fs/dcache.c:563:2: warning: context imbalance in 'shrink_dcache_sb' - different lock contexts for basic block
fs/dcache.c:1385:6: warning: context imbalance in 'd_delete' - wrong count at exit
fs/dcache.c:1636:2: warning: context imbalance in '__d_unalias' - unexpected unlock
fs/dcache.c:1735:2: warning: context imbalance in 'd_materialise_unique' - different lock contexts for basic block

Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
Reviewed-by: Matthew Wilcox <willy@linux.intel.com>
Acked-by: Christoph Hellwig <hch@infradead.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
Miklos Szeredi 2008-06-23 18:11:52 +02:00 committed by Al Viro
parent be285c712b
commit 31f3e0b3a1

View file

@ -17,6 +17,7 @@
#include <linux/syscalls.h> #include <linux/syscalls.h>
#include <linux/string.h> #include <linux/string.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/fdtable.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <linux/fsnotify.h> #include <linux/fsnotify.h>
#include <linux/slab.h> #include <linux/slab.h>
@ -106,9 +107,10 @@ static void dentry_lru_remove(struct dentry *dentry)
/* /*
* Release the dentry's inode, using the filesystem * Release the dentry's inode, using the filesystem
* d_iput() operation if defined. * d_iput() operation if defined.
* Called with dcache_lock and per dentry lock held, drops both.
*/ */
static void dentry_iput(struct dentry * dentry) static void dentry_iput(struct dentry * dentry)
__releases(dentry->d_lock)
__releases(dcache_lock)
{ {
struct inode *inode = dentry->d_inode; struct inode *inode = dentry->d_inode;
if (inode) { if (inode) {
@ -132,12 +134,13 @@ static void dentry_iput(struct dentry * dentry)
* d_kill - kill dentry and return parent * d_kill - kill dentry and return parent
* @dentry: dentry to kill * @dentry: dentry to kill
* *
* Called with dcache_lock and d_lock, releases both. The dentry must * The dentry must already be unhashed and removed from the LRU.
* already be unhashed and removed from the LRU.
* *
* If this is the root of the dentry tree, return NULL. * If this is the root of the dentry tree, return NULL.
*/ */
static struct dentry *d_kill(struct dentry *dentry) static struct dentry *d_kill(struct dentry *dentry)
__releases(dentry->d_lock)
__releases(dcache_lock)
{ {
struct dentry *parent; struct dentry *parent;
@ -383,11 +386,11 @@ restart:
* Try to prune ancestors as well. This is necessary to prevent * Try to prune ancestors as well. This is necessary to prevent
* quadratic behavior of shrink_dcache_parent(), but is also expected * quadratic behavior of shrink_dcache_parent(), but is also expected
* to be beneficial in reducing dentry cache fragmentation. * to be beneficial in reducing dentry cache fragmentation.
*
* Called with dcache_lock, drops it and then regains.
* Called with dentry->d_lock held, drops it.
*/ */
static void prune_one_dentry(struct dentry * dentry) static void prune_one_dentry(struct dentry * dentry)
__releases(dentry->d_lock)
__releases(dcache_lock)
__acquires(dcache_lock)
{ {
__d_drop(dentry); __d_drop(dentry);
dentry = d_kill(dentry); dentry = d_kill(dentry);
@ -1604,10 +1607,9 @@ static int d_isparent(struct dentry *p1, struct dentry *p2)
* *
* Note: If ever the locking in lock_rename() changes, then please * Note: If ever the locking in lock_rename() changes, then please
* remember to update this too... * remember to update this too...
*
* On return, dcache_lock will have been unlocked.
*/ */
static struct dentry *__d_unalias(struct dentry *dentry, struct dentry *alias) static struct dentry *__d_unalias(struct dentry *dentry, struct dentry *alias)
__releases(dcache_lock)
{ {
struct mutex *m1 = NULL, *m2 = NULL; struct mutex *m1 = NULL, *m2 = NULL;
struct dentry *ret; struct dentry *ret;
@ -1743,7 +1745,6 @@ out_nolock:
shouldnt_be_hashed: shouldnt_be_hashed:
spin_unlock(&dcache_lock); spin_unlock(&dcache_lock);
BUG(); BUG();
goto shouldnt_be_hashed;
} }
static int prepend(char **buffer, int *buflen, const char *str, static int prepend(char **buffer, int *buflen, const char *str,
@ -1758,7 +1759,7 @@ static int prepend(char **buffer, int *buflen, const char *str,
} }
/** /**
* d_path - return the path of a dentry * __d_path - return the path of a dentry
* @path: the dentry/vfsmount to report * @path: the dentry/vfsmount to report
* @root: root vfsmnt/dentry (may be modified by this function) * @root: root vfsmnt/dentry (may be modified by this function)
* @buffer: buffer to return value in * @buffer: buffer to return value in
@ -1847,7 +1848,7 @@ Elong:
* *
* Returns the buffer or an error code if the path was too long. * Returns the buffer or an error code if the path was too long.
* *
* "buflen" should be positive. Caller holds the dcache_lock. * "buflen" should be positive.
*/ */
char *d_path(const struct path *path, char *buf, int buflen) char *d_path(const struct path *path, char *buf, int buflen)
{ {