aboutsummaryrefslogtreecommitdiffstats
path: root/fs/debugfs/inode.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/debugfs/inode.c')
-rw-r--r--fs/debugfs/inode.c36
1 files changed, 18 insertions, 18 deletions
diff --git a/fs/debugfs/inode.c b/fs/debugfs/inode.c
index 45b18a5e225c..96400ab42d13 100644
--- a/fs/debugfs/inode.c
+++ b/fs/debugfs/inode.c
@@ -169,10 +169,19 @@ static int debugfs_show_options(struct seq_file *m, struct dentry *root)
169 return 0; 169 return 0;
170} 170}
171 171
172static void debugfs_evict_inode(struct inode *inode)
173{
174 truncate_inode_pages_final(&inode->i_data);
175 clear_inode(inode);
176 if (S_ISLNK(inode->i_mode))
177 kfree(inode->i_private);
178}
179
172static const struct super_operations debugfs_super_operations = { 180static const struct super_operations debugfs_super_operations = {
173 .statfs = simple_statfs, 181 .statfs = simple_statfs,
174 .remount_fs = debugfs_remount, 182 .remount_fs = debugfs_remount,
175 .show_options = debugfs_show_options, 183 .show_options = debugfs_show_options,
184 .evict_inode = debugfs_evict_inode,
176}; 185};
177 186
178static struct vfsmount *debugfs_automount(struct path *path) 187static struct vfsmount *debugfs_automount(struct path *path)
@@ -511,23 +520,14 @@ static int __debugfs_remove(struct dentry *dentry, struct dentry *parent)
511 int ret = 0; 520 int ret = 0;
512 521
513 if (debugfs_positive(dentry)) { 522 if (debugfs_positive(dentry)) {
514 if (dentry->d_inode) { 523 dget(dentry);
515 dget(dentry); 524 if (S_ISDIR(dentry->d_inode->i_mode))
516 switch (dentry->d_inode->i_mode & S_IFMT) { 525 ret = simple_rmdir(parent->d_inode, dentry);
517 case S_IFDIR: 526 else
518 ret = simple_rmdir(parent->d_inode, dentry); 527 simple_unlink(parent->d_inode, dentry);
519 break; 528 if (!ret)
520 case S_IFLNK: 529 d_delete(dentry);
521 kfree(dentry->d_inode->i_private); 530 dput(dentry);
522 /* fall through */
523 default:
524 simple_unlink(parent->d_inode, dentry);
525 break;
526 }
527 if (!ret)
528 d_delete(dentry);
529 dput(dentry);
530 }
531 } 531 }
532 return ret; 532 return ret;
533} 533}
@@ -690,7 +690,7 @@ struct dentry *debugfs_rename(struct dentry *old_dir, struct dentry *old_dentry,
690 } 690 }
691 d_move(old_dentry, dentry); 691 d_move(old_dentry, dentry);
692 fsnotify_move(old_dir->d_inode, new_dir->d_inode, old_name, 692 fsnotify_move(old_dir->d_inode, new_dir->d_inode, old_name,
693 S_ISDIR(old_dentry->d_inode->i_mode), 693 d_is_dir(old_dentry),
694 NULL, old_dentry); 694 NULL, old_dentry);
695 fsnotify_oldname_free(old_name); 695 fsnotify_oldname_free(old_name);
696 unlock_rename(new_dir, old_dir); 696 unlock_rename(new_dir, old_dir);