Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 226715
b: refs/heads/master
c: dc0474b
h: refs/heads/master
i:
  226713: 051b47a
  226711: 994552b
v: v3
  • Loading branch information
Nick Piggin committed Jan 7, 2011
1 parent 70f8561 commit f106927
Show file tree
Hide file tree
Showing 13 changed files with 25 additions and 48 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 357f8e658bba8a085c4a5d4331e30894be8096b8
refs/heads/master: dc0474be3e27463d4d4a2793f82366eed906f223
2 changes: 1 addition & 1 deletion trunk/arch/powerpc/platforms/cell/spufs/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ static void spufs_prune_dir(struct dentry *dir)
list_for_each_entry_safe(dentry, tmp, &dir->d_subdirs, d_u.d_child) {
spin_lock(&dentry->d_lock);
if (!(d_unhashed(dentry)) && dentry->d_inode) {
dget_locked_dlock(dentry);
dget_dlock(dentry);
__d_drop(dentry);
spin_unlock(&dentry->d_lock);
simple_unlink(dir->d_inode, dentry);
Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/infiniband/hw/ipath/ipath_fs.c
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ static int remove_file(struct dentry *parent, char *name)

spin_lock(&tmp->d_lock);
if (!(d_unhashed(tmp) && tmp->d_inode)) {
dget_locked_dlock(tmp);
dget_dlock(tmp);
__d_drop(tmp);
spin_unlock(&tmp->d_lock);
simple_unlink(parent->d_inode, tmp);
Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/infiniband/hw/qib/qib_fs.c
Original file line number Diff line number Diff line change
Expand Up @@ -455,7 +455,7 @@ static int remove_file(struct dentry *parent, char *name)

spin_lock(&tmp->d_lock);
if (!(d_unhashed(tmp) && tmp->d_inode)) {
dget_locked_dlock(tmp);
dget_dlock(tmp);
__d_drop(tmp);
spin_unlock(&tmp->d_lock);
simple_unlink(parent->d_inode, tmp);
Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/staging/smbfs/cache.c
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ smb_dget_fpos(struct dentry *dentry, struct dentry *parent, unsigned long fpos)
dent = list_entry(next, struct dentry, d_u.d_child);
if ((unsigned long)dent->d_fsdata == fpos) {
if (dent->d_inode)
dget_locked(dent);
dget(dent);
else
dent = NULL;
goto out_unlock;
Expand Down
2 changes: 1 addition & 1 deletion trunk/fs/configfs/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,7 @@ void configfs_drop_dentry(struct configfs_dirent * sd, struct dentry * parent)
if (dentry) {
spin_lock(&dentry->d_lock);
if (!(d_unhashed(dentry) && dentry->d_inode)) {
dget_locked_dlock(dentry);
dget_dlock(dentry);
__d_drop(dentry);
spin_unlock(&dentry->d_lock);
simple_unlink(parent->d_inode, dentry);
Expand Down
36 changes: 11 additions & 25 deletions trunk/fs/dcache.c
Original file line number Diff line number Diff line change
Expand Up @@ -429,32 +429,17 @@ int d_invalidate(struct dentry * dentry)
EXPORT_SYMBOL(d_invalidate);

/* This must be called with d_lock held */
static inline struct dentry * __dget_locked_dlock(struct dentry *dentry)
static inline void __dget_dlock(struct dentry *dentry)
{
dentry->d_count++;
dentry_lru_del(dentry);
return dentry;
}

/* This must be called with d_lock held */
static inline struct dentry * __dget_locked(struct dentry *dentry)
static inline void __dget(struct dentry *dentry)
{
spin_lock(&dentry->d_lock);
__dget_locked_dlock(dentry);
__dget_dlock(dentry);
spin_unlock(&dentry->d_lock);
return dentry;
}

struct dentry * dget_locked_dlock(struct dentry *dentry)
{
return __dget_locked_dlock(dentry);
}

struct dentry * dget_locked(struct dentry *dentry)
{
return __dget_locked(dentry);
}
EXPORT_SYMBOL(dget_locked);

struct dentry *dget_parent(struct dentry *dentry)
{
Expand Down Expand Up @@ -512,7 +497,7 @@ static struct dentry *__d_find_alias(struct inode *inode, int want_discon)
(alias->d_flags & DCACHE_DISCONNECTED)) {
discon_alias = alias;
} else if (!want_discon) {
__dget_locked_dlock(alias);
__dget_dlock(alias);
spin_unlock(&alias->d_lock);
return alias;
}
Expand All @@ -525,7 +510,7 @@ static struct dentry *__d_find_alias(struct inode *inode, int want_discon)
if (S_ISDIR(inode->i_mode) || !d_unhashed(alias)) {
if (IS_ROOT(alias) &&
(alias->d_flags & DCACHE_DISCONNECTED)) {
__dget_locked_dlock(alias);
__dget_dlock(alias);
spin_unlock(&alias->d_lock);
return alias;
}
Expand Down Expand Up @@ -561,7 +546,7 @@ void d_prune_aliases(struct inode *inode)
list_for_each_entry(dentry, &inode->i_dentry, d_alias) {
spin_lock(&dentry->d_lock);
if (!dentry->d_count) {
__dget_locked_dlock(dentry);
__dget_dlock(dentry);
__d_drop(dentry);
spin_unlock(&dentry->d_lock);
spin_unlock(&dcache_inode_lock);
Expand Down Expand Up @@ -1257,7 +1242,8 @@ struct dentry *d_alloc(struct dentry * parent, const struct qstr *name)
* don't need child lock because it is not subject
* to concurrency here
*/
dentry->d_parent = dget_dlock(parent);
__dget_dlock(parent);
dentry->d_parent = parent;
dentry->d_sb = parent->d_sb;
list_add(&dentry->d_u.d_child, &parent->d_subdirs);
spin_unlock(&parent->d_lock);
Expand Down Expand Up @@ -1360,7 +1346,7 @@ static struct dentry *__d_instantiate_unique(struct dentry *entry,
continue;
if (memcmp(qstr->name, name, len))
continue;
dget_locked(alias);
__dget(alias);
return alias;
}

Expand Down Expand Up @@ -1613,7 +1599,7 @@ struct dentry *d_add_ci(struct dentry *dentry, struct inode *inode,
* reference to it, move it in place and use it.
*/
new = list_entry(inode->i_dentry.next, struct dentry, d_alias);
dget_locked(new);
__dget(new);
spin_unlock(&dcache_inode_lock);
security_d_instantiate(found, inode);
d_move(new, found);
Expand Down Expand Up @@ -1789,7 +1775,7 @@ int d_validate(struct dentry *dentry, struct dentry *dparent)
list_for_each_entry(child, &dparent->d_subdirs, d_u.d_child) {
if (dentry == child) {
spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED);
__dget_locked_dlock(dentry);
__dget_dlock(dentry);
spin_unlock(&dentry->d_lock);
spin_unlock(&dparent->d_lock);
return 1;
Expand Down
2 changes: 1 addition & 1 deletion trunk/fs/exportfs/expfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ find_acceptable_alias(struct dentry *result,

spin_lock(&dcache_inode_lock);
list_for_each_entry(dentry, &result->d_inode->i_dentry, d_alias) {
dget_locked(dentry);
dget(dentry);
spin_unlock(&dcache_inode_lock);
if (toput)
dput(toput);
Expand Down
2 changes: 1 addition & 1 deletion trunk/fs/ncpfs/dir.c
Original file line number Diff line number Diff line change
Expand Up @@ -397,7 +397,7 @@ ncp_dget_fpos(struct dentry *dentry, struct dentry *parent, unsigned long fpos)
dent = list_entry(next, struct dentry, d_u.d_child);
if ((unsigned long)dent->d_fsdata == fpos) {
if (dent->d_inode)
dget_locked(dent);
dget(dent);
else
dent = NULL;
spin_unlock(&parent->d_lock);
Expand Down
2 changes: 1 addition & 1 deletion trunk/fs/ocfs2/dcache.c
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ struct dentry *ocfs2_find_local_alias(struct inode *inode,
mlog(0, "dentry found: %.*s\n",
dentry->d_name.len, dentry->d_name.name);

dget_locked_dlock(dentry);
dget_dlock(dentry);
spin_unlock(&dentry->d_lock);
break;
}
Expand Down
15 changes: 3 additions & 12 deletions trunk/include/linux/dcache.h
Original file line number Diff line number Diff line change
Expand Up @@ -287,23 +287,17 @@ extern char *dentry_path(struct dentry *, char *, int);
/* Allocation counts.. */

/**
* dget, dget_locked - get a reference to a dentry
* dget, dget_dlock - get a reference to a dentry
* @dentry: dentry to get a reference to
*
* Given a dentry or %NULL pointer increment the reference count
* if appropriate and return the dentry. A dentry will not be
* destroyed when it has references. dget() should never be
* called for dentries with zero reference counter. For these cases
* (preferably none, functions in dcache.c are sufficient for normal
* needs and they take necessary precautions) you should hold d_lock
* and call dget_dlock() instead of dget().
* destroyed when it has references.
*/
static inline struct dentry *dget_dlock(struct dentry *dentry)
{
if (dentry) {
BUG_ON(!dentry->d_count);
if (dentry)
dentry->d_count++;
}
return dentry;
}

Expand All @@ -317,9 +311,6 @@ static inline struct dentry *dget(struct dentry *dentry)
return dentry;
}

extern struct dentry * dget_locked(struct dentry *);
extern struct dentry * dget_locked_dlock(struct dentry *);

extern struct dentry *dget_parent(struct dentry *dentry);

/**
Expand Down
2 changes: 1 addition & 1 deletion trunk/kernel/cgroup.c
Original file line number Diff line number Diff line change
Expand Up @@ -887,7 +887,7 @@ static void cgroup_clear_directory(struct dentry *dentry)
/* This should never be called on a cgroup
* directory with child cgroups */
BUG_ON(d->d_inode->i_mode & S_IFDIR);
dget_locked_dlock(d);
dget_dlock(d);
spin_unlock(&d->d_lock);
spin_unlock(&dentry->d_lock);
d_delete(d);
Expand Down
2 changes: 1 addition & 1 deletion trunk/security/selinux/selinuxfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -1154,7 +1154,7 @@ static void sel_remove_entries(struct dentry *de)
list_del_init(node);

if (d->d_inode) {
dget_locked_dlock(d);
dget_dlock(d);
spin_unlock(&de->d_lock);
spin_unlock(&d->d_lock);
d_delete(d);
Expand Down

0 comments on commit f106927

Please sign in to comment.