mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
ANDROID: sdcardfs: Fix locking for permission fix up
Iterating over d_subdirs requires taking d_lock. Removed several unneeded locks. Change-Id: I5b1588e54c7e6ee19b756d6705171c7f829e2650 Signed-off-by: Daniel Rosenberg <drosen@google.com>
This commit is contained in:
committed by
Amit Pundir
parent
a29fded6cb
commit
deb3c896fa
@@ -111,15 +111,15 @@ void get_derived_permission(struct dentry *parent, struct dentry *dentry)
|
||||
|
||||
void get_derive_permissions_recursive(struct dentry *parent) {
|
||||
struct dentry *dentry;
|
||||
spin_lock(&parent->d_lock);
|
||||
list_for_each_entry(dentry, &parent->d_subdirs, d_child) {
|
||||
if (dentry->d_inode) {
|
||||
mutex_lock(&dentry->d_inode->i_mutex);
|
||||
get_derived_permission(parent, dentry);
|
||||
fix_derived_permission(dentry->d_inode);
|
||||
get_derive_permissions_recursive(dentry);
|
||||
mutex_unlock(&dentry->d_inode->i_mutex);
|
||||
}
|
||||
}
|
||||
spin_unlock(&parent->d_lock);
|
||||
}
|
||||
|
||||
/* main function for updating derived permission */
|
||||
@@ -135,7 +135,6 @@ inline void update_derived_permission_lock(struct dentry *dentry)
|
||||
* 1. need to check whether the dentry is updated or not
|
||||
* 2. remove the root dentry update
|
||||
*/
|
||||
mutex_lock(&dentry->d_inode->i_mutex);
|
||||
if(IS_ROOT(dentry)) {
|
||||
//setup_default_pre_root_state(dentry->d_inode);
|
||||
} else {
|
||||
@@ -146,7 +145,6 @@ inline void update_derived_permission_lock(struct dentry *dentry)
|
||||
}
|
||||
}
|
||||
fix_derived_permission(dentry->d_inode);
|
||||
mutex_unlock(&dentry->d_inode->i_mutex);
|
||||
}
|
||||
|
||||
int need_graft_path(struct dentry *dentry)
|
||||
|
||||
@@ -513,11 +513,9 @@ static int sdcardfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||
}
|
||||
/* At this point, not all dentry information has been moved, so
|
||||
* we pass along new_dentry for the name.*/
|
||||
mutex_lock(&d_inode(old_dentry)->i_mutex);
|
||||
get_derived_permission_new(new_dentry->d_parent, old_dentry, new_dentry);
|
||||
fix_derived_permission(d_inode(old_dentry));
|
||||
get_derive_permissions_recursive(old_dentry);
|
||||
mutex_unlock(&d_inode(old_dentry)->i_mutex);
|
||||
out:
|
||||
unlock_rename(lower_old_dir_dentry, lower_new_dir_dentry);
|
||||
dput(lower_old_dir_dentry);
|
||||
|
||||
@@ -387,11 +387,9 @@ struct dentry *sdcardfs_lookup(struct inode *dir, struct dentry *dentry,
|
||||
if (dentry->d_inode) {
|
||||
fsstack_copy_attr_times(dentry->d_inode,
|
||||
sdcardfs_lower_inode(dentry->d_inode));
|
||||
/* get drived permission */
|
||||
mutex_lock(&dentry->d_inode->i_mutex);
|
||||
/* get derived permission */
|
||||
get_derived_permission(parent, dentry);
|
||||
fix_derived_permission(dentry->d_inode);
|
||||
mutex_unlock(&dentry->d_inode->i_mutex);
|
||||
}
|
||||
/* update parent directory's atime */
|
||||
fsstack_copy_attr_atime(parent->d_inode,
|
||||
|
||||
Reference in New Issue
Block a user