aboutsummaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
authorDaniel Rosenberg <drosen@google.com>2017-03-08 17:45:46 -0800
committerMister Oyster <oysterized@gmail.com>2017-04-13 12:35:19 +0200
commit4ee3b61ba5405fcc763f57b7073376a2de8e9179 (patch)
tree8bd2d3429b8bca96bb98e232e1b070851442f733 /fs
parent059c835f48bc24e6120a24c22fa07d333d21da12 (diff)
ANDROID: sdcardfs: Use d_invalidate instead of drop_recurisve
drop_recursive did not properly remove stale dentries. Instead, we use the vfs's d_invalidate, which does the proper cleanup. Additionally, remove the no longer used drop_recursive, and fixup_top_recursive that that are no longer used. Signed-off-by: Daniel Rosenberg <drosen@google.com> Change-Id: Ibff61b0c34b725b024a050169047a415bc90f0d8
Diffstat (limited to 'fs')
-rwxr-xr-xfs/sdcardfs/derived_perm.c38
-rwxr-xr-xfs/sdcardfs/inode.c2
-rwxr-xr-xfs/sdcardfs/sdcardfs.h2
3 files changed, 1 insertions, 41 deletions
diff --git a/fs/sdcardfs/derived_perm.c b/fs/sdcardfs/derived_perm.c
index b704afb06..cc905fe09 100755
--- a/fs/sdcardfs/derived_perm.c
+++ b/fs/sdcardfs/derived_perm.c
@@ -296,44 +296,6 @@ void fixup_perms_recursive(struct dentry *dentry, struct limit_search *limit) {
__fixup_perms_recursive(dentry, limit, 0);
}
-void drop_recursive(struct dentry *parent) {
- struct dentry *dentry;
- struct sdcardfs_inode_info *info;
- if (!parent->d_inode)
- return;
- info = SDCARDFS_I(parent->d_inode);
- spin_lock(&parent->d_lock);
- list_for_each_entry(dentry, &parent->d_subdirs, d_child) {
- if (dentry->d_inode) {
- if (SDCARDFS_I(parent->d_inode)->top != SDCARDFS_I(dentry->d_inode)->top) {
- drop_recursive(dentry);
- d_drop(dentry);
- }
- }
- }
- spin_unlock(&parent->d_lock);
-}
-
-void fixup_top_recursive(struct dentry *parent) {
- struct dentry *dentry;
- struct sdcardfs_inode_info *info;
-
- if (!parent->d_inode)
- return;
- info = SDCARDFS_I(parent->d_inode);
- spin_lock(&parent->d_lock);
- list_for_each_entry(dentry, &parent->d_subdirs, d_child) {
- if (dentry->d_inode) {
- if (SDCARDFS_I(parent->d_inode)->top != SDCARDFS_I(dentry->d_inode)->top) {
- get_derived_permission(parent, dentry);
- fixup_tmp_permissions(dentry->d_inode);
- fixup_top_recursive(dentry);
- }
- }
- }
- spin_unlock(&parent->d_lock);
-}
-
/* main function for updating derived permission */
inline void update_derived_permission_lock(struct dentry *dentry)
{
diff --git a/fs/sdcardfs/inode.c b/fs/sdcardfs/inode.c
index 438291794..d7967cc6d 100755
--- a/fs/sdcardfs/inode.c
+++ b/fs/sdcardfs/inode.c
@@ -528,7 +528,7 @@ static int sdcardfs_rename(struct inode *old_dir, struct dentry *old_dentry,
get_derived_permission_new(new_dentry->d_parent, old_dentry, &new_dentry->d_name);
fixup_tmp_permissions(old_dentry->d_inode);
fixup_lower_ownership(old_dentry, new_dentry->d_name.name);
- drop_recursive(old_dentry); /* Can't fixup ownership recursively :( */
+ d_invalidate(old_dentry); /* Can't fixup ownership recursively :( */
out:
unlock_rename(lower_old_dir_dentry, lower_new_dir_dentry);
dput(lower_old_dir_dentry);
diff --git a/fs/sdcardfs/sdcardfs.h b/fs/sdcardfs/sdcardfs.h
index ec0f442f9..5c3de5d86 100755
--- a/fs/sdcardfs/sdcardfs.h
+++ b/fs/sdcardfs/sdcardfs.h
@@ -479,8 +479,6 @@ extern void setup_derived_state(struct inode *inode, perm_t perm, userid_t useri
uid_t uid, bool under_android, struct inode *top);
extern void get_derived_permission(struct dentry *parent, struct dentry *dentry);
extern void get_derived_permission_new(struct dentry *parent, struct dentry *dentry, const struct qstr *name);
-extern void drop_recursive(struct dentry *parent);
-extern void fixup_top_recursive(struct dentry *parent);
extern void fixup_perms_recursive(struct dentry *dentry, struct limit_search *limit);
extern void update_derived_permission_lock(struct dentry *dentry);