get rid of dead code in d_find_alias()
All "try disconnected alias if nothing else fits" logics in d_find_alias() got accidentally disabled by Neil a while ago; for most of the callers it was the right thing to do, so fixes belong in few callers that *do* want disconnected aliases. This just takes the now-dead code in d_find_alias() out. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
1c18d2a15e
commit
61fec493c9
83
fs/dcache.c
83
fs/dcache.c
|
@ -907,6 +907,35 @@ repeat:
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(dget_parent);
|
EXPORT_SYMBOL(dget_parent);
|
||||||
|
|
||||||
|
static struct dentry * __d_find_any_alias(struct inode *inode)
|
||||||
|
{
|
||||||
|
struct dentry *alias;
|
||||||
|
|
||||||
|
if (hlist_empty(&inode->i_dentry))
|
||||||
|
return NULL;
|
||||||
|
alias = hlist_entry(inode->i_dentry.first, struct dentry, d_u.d_alias);
|
||||||
|
__dget(alias);
|
||||||
|
return alias;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* d_find_any_alias - find any alias for a given inode
|
||||||
|
* @inode: inode to find an alias for
|
||||||
|
*
|
||||||
|
* If any aliases exist for the given inode, take and return a
|
||||||
|
* reference for one of them. If no aliases exist, return %NULL.
|
||||||
|
*/
|
||||||
|
struct dentry *d_find_any_alias(struct inode *inode)
|
||||||
|
{
|
||||||
|
struct dentry *de;
|
||||||
|
|
||||||
|
spin_lock(&inode->i_lock);
|
||||||
|
de = __d_find_any_alias(inode);
|
||||||
|
spin_unlock(&inode->i_lock);
|
||||||
|
return de;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(d_find_any_alias);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* d_find_alias - grab a hashed alias of inode
|
* d_find_alias - grab a hashed alias of inode
|
||||||
* @inode: inode in question
|
* @inode: inode in question
|
||||||
|
@ -923,34 +952,19 @@ EXPORT_SYMBOL(dget_parent);
|
||||||
*/
|
*/
|
||||||
static struct dentry *__d_find_alias(struct inode *inode)
|
static struct dentry *__d_find_alias(struct inode *inode)
|
||||||
{
|
{
|
||||||
struct dentry *alias, *discon_alias;
|
struct dentry *alias;
|
||||||
|
|
||||||
|
if (S_ISDIR(inode->i_mode))
|
||||||
|
return __d_find_any_alias(inode);
|
||||||
|
|
||||||
again:
|
|
||||||
discon_alias = NULL;
|
|
||||||
hlist_for_each_entry(alias, &inode->i_dentry, d_u.d_alias) {
|
hlist_for_each_entry(alias, &inode->i_dentry, d_u.d_alias) {
|
||||||
spin_lock(&alias->d_lock);
|
spin_lock(&alias->d_lock);
|
||||||
if (S_ISDIR(inode->i_mode) || !d_unhashed(alias)) {
|
if (!d_unhashed(alias)) {
|
||||||
if (IS_ROOT(alias) &&
|
|
||||||
(alias->d_flags & DCACHE_DISCONNECTED)) {
|
|
||||||
discon_alias = alias;
|
|
||||||
} else {
|
|
||||||
__dget_dlock(alias);
|
|
||||||
spin_unlock(&alias->d_lock);
|
|
||||||
return alias;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
spin_unlock(&alias->d_lock);
|
|
||||||
}
|
|
||||||
if (discon_alias) {
|
|
||||||
alias = discon_alias;
|
|
||||||
spin_lock(&alias->d_lock);
|
|
||||||
if (S_ISDIR(inode->i_mode) || !d_unhashed(alias)) {
|
|
||||||
__dget_dlock(alias);
|
__dget_dlock(alias);
|
||||||
spin_unlock(&alias->d_lock);
|
spin_unlock(&alias->d_lock);
|
||||||
return alias;
|
return alias;
|
||||||
}
|
}
|
||||||
spin_unlock(&alias->d_lock);
|
spin_unlock(&alias->d_lock);
|
||||||
goto again;
|
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -1941,35 +1955,6 @@ struct dentry *d_make_root(struct inode *root_inode)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(d_make_root);
|
EXPORT_SYMBOL(d_make_root);
|
||||||
|
|
||||||
static struct dentry * __d_find_any_alias(struct inode *inode)
|
|
||||||
{
|
|
||||||
struct dentry *alias;
|
|
||||||
|
|
||||||
if (hlist_empty(&inode->i_dentry))
|
|
||||||
return NULL;
|
|
||||||
alias = hlist_entry(inode->i_dentry.first, struct dentry, d_u.d_alias);
|
|
||||||
__dget(alias);
|
|
||||||
return alias;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* d_find_any_alias - find any alias for a given inode
|
|
||||||
* @inode: inode to find an alias for
|
|
||||||
*
|
|
||||||
* If any aliases exist for the given inode, take and return a
|
|
||||||
* reference for one of them. If no aliases exist, return %NULL.
|
|
||||||
*/
|
|
||||||
struct dentry *d_find_any_alias(struct inode *inode)
|
|
||||||
{
|
|
||||||
struct dentry *de;
|
|
||||||
|
|
||||||
spin_lock(&inode->i_lock);
|
|
||||||
de = __d_find_any_alias(inode);
|
|
||||||
spin_unlock(&inode->i_lock);
|
|
||||||
return de;
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(d_find_any_alias);
|
|
||||||
|
|
||||||
static struct dentry *__d_instantiate_anon(struct dentry *dentry,
|
static struct dentry *__d_instantiate_anon(struct dentry *dentry,
|
||||||
struct inode *inode,
|
struct inode *inode,
|
||||||
bool disconnected)
|
bool disconnected)
|
||||||
|
|
Loading…
Reference in New Issue