forked from luck/tmp_suning_uos_patched
make simple_positive() public
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
5d754ced15
commit
dc3f4198ea
|
@ -166,7 +166,7 @@ static void spufs_prune_dir(struct dentry *dir)
|
|||
mutex_lock(&d_inode(dir)->i_mutex);
|
||||
list_for_each_entry_safe(dentry, tmp, &dir->d_subdirs, d_child) {
|
||||
spin_lock(&dentry->d_lock);
|
||||
if (!(d_unhashed(dentry)) && d_really_is_positive(dentry)) {
|
||||
if (simple_positive(dentry)) {
|
||||
dget_dlock(dentry);
|
||||
__d_drop(dentry);
|
||||
spin_unlock(&dentry->d_lock);
|
||||
|
|
|
@ -62,18 +62,13 @@ static void hypfs_add_dentry(struct dentry *dentry)
|
|||
hypfs_last_dentry = dentry;
|
||||
}
|
||||
|
||||
static inline int hypfs_positive(struct dentry *dentry)
|
||||
{
|
||||
return d_really_is_positive(dentry) && !d_unhashed(dentry);
|
||||
}
|
||||
|
||||
static void hypfs_remove(struct dentry *dentry)
|
||||
{
|
||||
struct dentry *parent;
|
||||
|
||||
parent = dentry->d_parent;
|
||||
mutex_lock(&d_inode(parent)->i_mutex);
|
||||
if (hypfs_positive(dentry)) {
|
||||
if (simple_positive(dentry)) {
|
||||
if (d_is_dir(dentry))
|
||||
simple_rmdir(d_inode(parent), dentry);
|
||||
else
|
||||
|
|
|
@ -419,14 +419,6 @@ static int in_flight_summary_show(struct seq_file *m, void *pos)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* simple_positive(file->f_path.dentry) respectively debugfs_positive(),
|
||||
* but neither is "reachable" from here.
|
||||
* So we have our own inline version of it above. :-( */
|
||||
static inline int debugfs_positive(struct dentry *dentry)
|
||||
{
|
||||
return d_really_is_positive(dentry) && !d_unhashed(dentry);
|
||||
}
|
||||
|
||||
/* make sure at *open* time that the respective object won't go away. */
|
||||
static int drbd_single_open(struct file *file, int (*show)(struct seq_file *, void *),
|
||||
void *data, struct kref *kref,
|
||||
|
@ -444,7 +436,7 @@ static int drbd_single_open(struct file *file, int (*show)(struct seq_file *, vo
|
|||
/* serialize with d_delete() */
|
||||
mutex_lock(&d_inode(parent)->i_mutex);
|
||||
/* Make sure the object is still alive */
|
||||
if (debugfs_positive(file->f_path.dentry)
|
||||
if (simple_positive(file->f_path.dentry)
|
||||
&& kref_get_unless_zero(kref))
|
||||
ret = 0;
|
||||
mutex_unlock(&d_inode(parent)->i_mutex);
|
||||
|
|
|
@ -277,7 +277,7 @@ static int remove_file(struct dentry *parent, char *name)
|
|||
}
|
||||
|
||||
spin_lock(&tmp->d_lock);
|
||||
if (!d_unhashed(tmp) && d_really_is_positive(tmp)) {
|
||||
if (simple_positive(tmp)) {
|
||||
dget_dlock(tmp);
|
||||
__d_drop(tmp);
|
||||
spin_unlock(&tmp->d_lock);
|
||||
|
|
|
@ -455,7 +455,7 @@ static int remove_file(struct dentry *parent, char *name)
|
|||
}
|
||||
|
||||
spin_lock(&tmp->d_lock);
|
||||
if (!d_unhashed(tmp) && d_really_is_positive(tmp)) {
|
||||
if (simple_positive(tmp)) {
|
||||
__d_drop(tmp);
|
||||
spin_unlock(&tmp->d_lock);
|
||||
simple_unlink(d_inode(parent), tmp);
|
||||
|
|
|
@ -238,11 +238,6 @@ static inline u64 autofs4_get_ino(struct autofs_sb_info *sbi)
|
|||
return d_inode(sbi->sb->s_root)->i_ino;
|
||||
}
|
||||
|
||||
static inline int simple_positive(struct dentry *dentry)
|
||||
{
|
||||
return d_really_is_positive(dentry) && !d_unhashed(dentry);
|
||||
}
|
||||
|
||||
static inline void __autofs4_add_expiring(struct dentry *dentry)
|
||||
{
|
||||
struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
|
||||
|
|
|
@ -161,7 +161,7 @@ static int __dcache_readdir(struct file *file, struct dir_context *ctx,
|
|||
}
|
||||
spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED);
|
||||
if (di->lease_shared_gen == shared_gen &&
|
||||
!d_unhashed(dentry) && d_really_is_positive(dentry) &&
|
||||
simple_positive(dentry) &&
|
||||
ceph_snap(d_inode(dentry)) != CEPH_SNAPDIR &&
|
||||
ceph_ino(d_inode(dentry)) != CEPH_INO_CEPH &&
|
||||
fpos_cmp(ctx->pos, di->offset) <= 0)
|
||||
|
|
|
@ -236,7 +236,7 @@ void configfs_drop_dentry(struct configfs_dirent * sd, struct dentry * parent)
|
|||
|
||||
if (dentry) {
|
||||
spin_lock(&dentry->d_lock);
|
||||
if (!d_unhashed(dentry) && d_really_is_positive(dentry)) {
|
||||
if (simple_positive(dentry)) {
|
||||
dget_dlock(dentry);
|
||||
__d_drop(dentry);
|
||||
spin_unlock(&dentry->d_lock);
|
||||
|
|
|
@ -44,11 +44,6 @@ static struct inode *debugfs_get_inode(struct super_block *sb)
|
|||
return inode;
|
||||
}
|
||||
|
||||
static inline int debugfs_positive(struct dentry *dentry)
|
||||
{
|
||||
return d_really_is_positive(dentry) && !d_unhashed(dentry);
|
||||
}
|
||||
|
||||
struct debugfs_mount_opts {
|
||||
kuid_t uid;
|
||||
kgid_t gid;
|
||||
|
@ -522,7 +517,7 @@ static int __debugfs_remove(struct dentry *dentry, struct dentry *parent)
|
|||
{
|
||||
int ret = 0;
|
||||
|
||||
if (debugfs_positive(dentry)) {
|
||||
if (simple_positive(dentry)) {
|
||||
dget(dentry);
|
||||
if (d_is_dir(dentry))
|
||||
ret = simple_rmdir(d_inode(parent), dentry);
|
||||
|
@ -602,7 +597,7 @@ void debugfs_remove_recursive(struct dentry *dentry)
|
|||
*/
|
||||
spin_lock(&parent->d_lock);
|
||||
list_for_each_entry(child, &parent->d_subdirs, d_child) {
|
||||
if (!debugfs_positive(child))
|
||||
if (!simple_positive(child))
|
||||
continue;
|
||||
|
||||
/* perhaps simple_empty(child) makes more sense */
|
||||
|
@ -623,7 +618,7 @@ void debugfs_remove_recursive(struct dentry *dentry)
|
|||
* from d_subdirs. When releasing the parent->d_lock we can
|
||||
* no longer trust that the next pointer is valid.
|
||||
* Restart the loop. We'll skip this one with the
|
||||
* debugfs_positive() check.
|
||||
* simple_positive() check.
|
||||
*/
|
||||
goto loop;
|
||||
}
|
||||
|
|
|
@ -20,11 +20,6 @@
|
|||
|
||||
#include "internal.h"
|
||||
|
||||
static inline int simple_positive(struct dentry *dentry)
|
||||
{
|
||||
return d_really_is_positive(dentry) && !d_unhashed(dentry);
|
||||
}
|
||||
|
||||
int simple_getattr(struct vfsmount *mnt, struct dentry *dentry,
|
||||
struct kstat *stat)
|
||||
{
|
||||
|
|
|
@ -1771,7 +1771,7 @@ EXPORT_SYMBOL_GPL(nfs_mkdir);
|
|||
|
||||
static void nfs_dentry_handle_enoent(struct dentry *dentry)
|
||||
{
|
||||
if (d_really_is_positive(dentry) && !d_unhashed(dentry))
|
||||
if (simple_positive(dentry))
|
||||
d_delete(dentry);
|
||||
}
|
||||
|
||||
|
|
|
@ -496,16 +496,11 @@ struct dentry *tracefs_create_instance_dir(const char *name, struct dentry *pare
|
|||
return dentry;
|
||||
}
|
||||
|
||||
static inline int tracefs_positive(struct dentry *dentry)
|
||||
{
|
||||
return dentry->d_inode && !d_unhashed(dentry);
|
||||
}
|
||||
|
||||
static int __tracefs_remove(struct dentry *dentry, struct dentry *parent)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
if (tracefs_positive(dentry)) {
|
||||
if (simple_positive(dentry)) {
|
||||
if (dentry->d_inode) {
|
||||
dget(dentry);
|
||||
switch (dentry->d_inode->i_mode & S_IFMT) {
|
||||
|
@ -582,7 +577,7 @@ void tracefs_remove_recursive(struct dentry *dentry)
|
|||
*/
|
||||
spin_lock(&parent->d_lock);
|
||||
list_for_each_entry(child, &parent->d_subdirs, d_child) {
|
||||
if (!tracefs_positive(child))
|
||||
if (!simple_positive(child))
|
||||
continue;
|
||||
|
||||
/* perhaps simple_empty(child) makes more sense */
|
||||
|
@ -603,7 +598,7 @@ void tracefs_remove_recursive(struct dentry *dentry)
|
|||
* from d_subdirs. When releasing the parent->d_lock we can
|
||||
* no longer trust that the next pointer is valid.
|
||||
* Restart the loop. We'll skip this one with the
|
||||
* tracefs_positive() check.
|
||||
* simple_positive() check.
|
||||
*/
|
||||
goto loop;
|
||||
}
|
||||
|
|
|
@ -507,6 +507,11 @@ static inline bool d_really_is_positive(const struct dentry *dentry)
|
|||
return dentry->d_inode != NULL;
|
||||
}
|
||||
|
||||
static inline int simple_positive(struct dentry *dentry)
|
||||
{
|
||||
return d_really_is_positive(dentry) && !d_unhashed(dentry);
|
||||
}
|
||||
|
||||
extern void d_set_fallthru(struct dentry *dentry);
|
||||
|
||||
static inline bool d_is_fallthru(const struct dentry *dentry)
|
||||
|
|
|
@ -25,11 +25,6 @@
|
|||
static struct vfsmount *mount;
|
||||
static int mount_count;
|
||||
|
||||
static inline int positive(struct dentry *dentry)
|
||||
{
|
||||
return d_really_is_positive(dentry) && !d_unhashed(dentry);
|
||||
}
|
||||
|
||||
static int fill_super(struct super_block *sb, void *data, int silent)
|
||||
{
|
||||
static struct tree_descr files[] = {{""}};
|
||||
|
@ -201,14 +196,12 @@ void securityfs_remove(struct dentry *dentry)
|
|||
return;
|
||||
|
||||
mutex_lock(&d_inode(parent)->i_mutex);
|
||||
if (positive(dentry)) {
|
||||
if (d_really_is_positive(dentry)) {
|
||||
if (d_is_dir(dentry))
|
||||
simple_rmdir(d_inode(parent), dentry);
|
||||
else
|
||||
simple_unlink(d_inode(parent), dentry);
|
||||
dput(dentry);
|
||||
}
|
||||
if (simple_positive(dentry)) {
|
||||
if (d_is_dir(dentry))
|
||||
simple_rmdir(d_inode(parent), dentry);
|
||||
else
|
||||
simple_unlink(d_inode(parent), dentry);
|
||||
dput(dentry);
|
||||
}
|
||||
mutex_unlock(&d_inode(parent)->i_mutex);
|
||||
simple_release_fs(&mount, &mount_count);
|
||||
|
|
Loading…
Reference in New Issue
Block a user