diff options
Diffstat (limited to 'fs/kernfs/file.c')
| -rw-r--r-- | fs/kernfs/file.c | 6 | 
1 files changed, 4 insertions, 2 deletions
| diff --git a/fs/kernfs/file.c b/fs/kernfs/file.c index 60e2a86c535e..9414a7a60a9f 100644 --- a/fs/kernfs/file.c +++ b/fs/kernfs/file.c @@ -847,6 +847,7 @@ static void kernfs_notify_workfn(struct work_struct *work)  {  	struct kernfs_node *kn;  	struct kernfs_super_info *info; +	struct kernfs_root *root;  repeat:  	/* pop one off the notify_list */  	spin_lock_irq(&kernfs_notify_lock); @@ -859,8 +860,9 @@ repeat:  	kn->attr.notify_next = NULL;  	spin_unlock_irq(&kernfs_notify_lock); +	root = kernfs_root(kn);  	/* kick fsnotify */ -	down_write(&kernfs_rwsem); +	down_write(&root->kernfs_rwsem);  	list_for_each_entry(info, &kernfs_root(kn)->supers, node) {  		struct kernfs_node *parent; @@ -898,7 +900,7 @@ repeat:  		iput(inode);  	} -	up_write(&kernfs_rwsem); +	up_write(&root->kernfs_rwsem);  	kernfs_put(kn);  	goto repeat;  } |