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

Commit b9efe8a2 authored by Al Viro's avatar Al Viro
Browse files

[PATCH] new helper - inotify_clone_watch()



Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 8aec0809
Loading
Loading
Loading
Loading
+35 −0
Original line number Diff line number Diff line
@@ -666,6 +666,41 @@ s32 inotify_add_watch(struct inotify_handle *ih, struct inotify_watch *watch,
}
EXPORT_SYMBOL_GPL(inotify_add_watch);

/**
 * inotify_clone_watch - put the watch next to existing one
 * @old: already installed watch
 * @new: new watch
 *
 * Caller must hold the inotify_mutex of inode we are dealing with;
 * it is expected to remove the old watch before unlocking the inode.
 */
s32 inotify_clone_watch(struct inotify_watch *old, struct inotify_watch *new)
{
	struct inotify_handle *ih = old->ih;
	int ret = 0;

	new->mask = old->mask;
	new->ih = ih;

	mutex_lock(&ih->mutex);

	/* Initialize a new watch */
	ret = inotify_handle_get_wd(ih, new);
	if (unlikely(ret))
		goto out;
	ret = new->wd;

	get_inotify_handle(ih);

	new->inode = igrab(old->inode);

	list_add(&new->h_list, &ih->watches);
	list_add(&new->i_list, &old->inode->inotify_watches);
out:
	mutex_unlock(&ih->mutex);
	return ret;
}

/**
 * inotify_rm_wd - remove a watch from an inotify instance
 * @ih: inotify handle
+1 −0
Original line number Diff line number Diff line
@@ -120,6 +120,7 @@ extern __s32 inotify_find_update_watch(struct inotify_handle *, struct inode *,
				       u32);
extern __s32 inotify_add_watch(struct inotify_handle *, struct inotify_watch *,
			       struct inode *, __u32);
extern __s32 inotify_clone_watch(struct inotify_watch *, struct inotify_watch *);
extern int inotify_rm_watch(struct inotify_handle *, struct inotify_watch *);
extern int inotify_rm_wd(struct inotify_handle *, __u32);
extern void inotify_remove_watch_locked(struct inotify_handle *,