forked from Minki/linux
[PATCH] new helper - inotify_clone_watch()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
8aec080945
commit
b9efe8a234
35
fs/inotify.c
35
fs/inotify.c
@ -666,6 +666,41 @@ out:
|
||||
}
|
||||
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
|
||||
|
@ -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 *,
|
||||
|
Loading…
Reference in New Issue
Block a user