configfs: Protect configfs_dirent s_links list mutations
Symlinks to a config_item are listed under its configfs_dirent s_links, but the list mutations are not protected by any common lock. This patch uses the configfs_dirent_lock spinlock to add the necessary protection. Note: we should also protect the list_empty() test in configfs_detach_prep() but 1/ the lock should not be released immediately because nothing would prevent the list from being filled after a successful list_empty() test, making the problem tricky, 2/ this will be solved by the rmdir() vs rename() deadlock bugfix. Signed-off-by: Louis Rilling <Louis.Rilling@kerlabs.com> Signed-off-by: Joel Becker <joel.becker@oracle.com>
This commit is contained in:
committed by
Mark Fasheh
parent
6f61076406
commit
5301a77da2
@@ -37,10 +37,11 @@
|
||||
DECLARE_RWSEM(configfs_rename_sem);
|
||||
/*
|
||||
* Protects mutations of configfs_dirent linkage together with proper i_mutex
|
||||
* Also protects mutations of symlinks linkage to target configfs_dirent
|
||||
* Mutators of configfs_dirent linkage must *both* have the proper inode locked
|
||||
* and configfs_dirent_lock locked, in that order.
|
||||
* This allows one to safely traverse configfs_dirent trees without having to
|
||||
* lock inodes.
|
||||
* This allows one to safely traverse configfs_dirent trees and symlinks without
|
||||
* having to lock inodes.
|
||||
*/
|
||||
DEFINE_SPINLOCK(configfs_dirent_lock);
|
||||
|
||||
|
Reference in New Issue
Block a user