Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a4c6e996 authored by Eric Paris's avatar Eric Paris
Browse files

fsnotify: use _rcu functions for mark list traversal



In preparation for srcu locking use all _rcu appropiete functions for mark
list addition, removal, and traversal.  The operations are still done under a
spinlock at the end of this patch.

Signed-off-by: default avatarEric Paris <eparis@redhat.com>
parent 0c6532e4
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -67,7 +67,7 @@ void fsnotify_destroy_inode_mark(struct fsnotify_mark *mark)

	spin_lock(&inode->i_lock);

	hlist_del_init(&mark->i.i_list);
	hlist_del_init_rcu(&mark->i.i_list);
	mark->i.inode = NULL;

	/*
@@ -92,7 +92,7 @@ void fsnotify_clear_marks_by_inode(struct inode *inode)
	spin_lock(&inode->i_lock);
	hlist_for_each_entry_safe(mark, pos, n, &inode->i_fsnotify_marks, i.i_list) {
		list_add(&mark->i.free_i_list, &free_list);
		hlist_del_init(&mark->i.i_list);
		hlist_del_init_rcu(&mark->i.i_list);
		fsnotify_get_mark(mark);
	}
	spin_unlock(&inode->i_lock);
@@ -198,7 +198,7 @@ int fsnotify_add_inode_mark(struct fsnotify_mark *mark,

	/* is mark the first mark? */
	if (hlist_empty(&inode->i_fsnotify_marks)) {
		hlist_add_head(&mark->i.i_list, &inode->i_fsnotify_marks);
		hlist_add_head_rcu(&mark->i.i_list, &inode->i_fsnotify_marks);
		goto out;
	}

@@ -214,13 +214,13 @@ int fsnotify_add_inode_mark(struct fsnotify_mark *mark,
		if (mark->group < lmark->group)
			continue;

		hlist_add_before(&mark->i.i_list, &lmark->i.i_list);
		hlist_add_before_rcu(&mark->i.i_list, &lmark->i.i_list);
		goto out;
	}

	BUG_ON(last == NULL);
	/* mark should be the last entry.  last is the current last entry */
	hlist_add_after(last, &mark->i.i_list);
	hlist_add_after_rcu(last, &mark->i.i_list);
out:
	fsnotify_recalc_inode_mask_locked(inode);
	spin_unlock(&inode->i_lock);
+5 −5
Original line number Diff line number Diff line
@@ -39,7 +39,7 @@ void fsnotify_clear_marks_by_mount(struct vfsmount *mnt)
	spin_lock(&mnt->mnt_root->d_lock);
	hlist_for_each_entry_safe(mark, pos, n, &mnt->mnt_fsnotify_marks, m.m_list) {
		list_add(&mark->m.free_m_list, &free_list);
		hlist_del_init(&mark->m.m_list);
		hlist_del_init_rcu(&mark->m.m_list);
		fsnotify_get_mark(mark);
	}
	spin_unlock(&mnt->mnt_root->d_lock);
@@ -91,7 +91,7 @@ void fsnotify_destroy_vfsmount_mark(struct fsnotify_mark *mark)

	spin_lock(&mnt->mnt_root->d_lock);

	hlist_del_init(&mark->m.m_list);
	hlist_del_init_rcu(&mark->m.m_list);
	mark->m.mnt = NULL;

	fsnotify_recalc_vfsmount_mask_locked(mnt);
@@ -156,7 +156,7 @@ int fsnotify_add_vfsmount_mark(struct fsnotify_mark *mark,

	/* is mark the first mark? */
	if (hlist_empty(&mnt->mnt_fsnotify_marks)) {
		hlist_add_head(&mark->m.m_list, &mnt->mnt_fsnotify_marks);
		hlist_add_head_rcu(&mark->m.m_list, &mnt->mnt_fsnotify_marks);
		goto out;
	}

@@ -172,13 +172,13 @@ int fsnotify_add_vfsmount_mark(struct fsnotify_mark *mark,
		if (mark->group < lmark->group)
			continue;

		hlist_add_before(&mark->m.m_list, &lmark->m.m_list);
		hlist_add_before_rcu(&mark->m.m_list, &lmark->m.m_list);
		goto out;
	}

	BUG_ON(last == NULL);
	/* mark should be the last entry.  last is the current last entry */
	hlist_add_after(last, &mark->m.m_list);
	hlist_add_after_rcu(last, &mark->m.m_list);
out:
	fsnotify_recalc_vfsmount_mask_locked(mnt);
	spin_unlock(&mnt->mnt_root->d_lock);