mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 07:12:09 +00:00
fsnotify: Lock object list with connector lock
So far list of marks attached to an object (inode / vfsmount) was protected by i_lock or mnt_root->d_lock. This dictates that the list must be empty before the object can be destroyed although the list is now anchored in the fsnotify_mark_connector structure. Protect the list by a spinlock in the fsnotify_mark_connector structure to decouple lifetime of a list of marks from a lifetime of the object. This also simplifies the code quite a bit since we don't have to differentiate between inode and vfsmount lists in quite a few places anymore. Reviewed-by: Miklos Szeredi <mszeredi@redhat.com> Reviewed-by: Amir Goldstein <amir73il@gmail.com> Signed-off-by: Jan Kara <jack@suse.cz>
This commit is contained in:
parent
2629718dd2
commit
04662cab59
2 changed files with 34 additions and 59 deletions
|
@ -201,6 +201,7 @@ struct fsnotify_group {
|
|||
* inode / vfsmount gets freed.
|
||||
*/
|
||||
struct fsnotify_mark_connector {
|
||||
spinlock_t lock;
|
||||
#define FSNOTIFY_OBJ_TYPE_INODE 0x01
|
||||
#define FSNOTIFY_OBJ_TYPE_VFSMOUNT 0x02
|
||||
unsigned int flags; /* Type of object [lock] */
|
||||
|
@ -240,7 +241,7 @@ struct fsnotify_mark {
|
|||
struct list_head g_list;
|
||||
/* Protects inode / mnt pointers, flags, masks */
|
||||
spinlock_t lock;
|
||||
/* List of marks for inode / vfsmount [obj_lock] */
|
||||
/* List of marks for inode / vfsmount [connector->lock] */
|
||||
struct hlist_node obj_list;
|
||||
/* Head of list of marks for an object [mark->lock, group->mark_mutex] */
|
||||
struct fsnotify_mark_connector *connector;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue