Gitweb: http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b9efe8a234ad874a049460417c54680338f96360 Commit: b9efe8a234ad874a049460417c54680338f96360 Parent: 8aec08094570562bc305df33b088926d983c3540 Author: Al Viro <[EMAIL PROTECTED]> AuthorDate: Thu Jun 7 12:21:44 2007 -0400 Committer: Al Viro <[EMAIL PROTECTED]> CommitDate: Sun Oct 21 02:37:32 2007 -0400
[PATCH] new helper - inotify_clone_watch() Signed-off-by: Al Viro <[EMAIL PROTECTED]> --- fs/inotify.c | 35 +++++++++++++++++++++++++++++++++++ include/linux/inotify.h | 1 + 2 files changed, 36 insertions(+), 0 deletions(-) diff --git a/fs/inotify.c b/fs/inotify.c index 7457501..4b2469b 100644 --- a/fs/inotify.c +++ b/fs/inotify.c @@ -667,6 +667,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 * @wd: watch descriptor to remove diff --git a/include/linux/inotify.h b/include/linux/inotify.h index d4f48c6..e76e227 100644 --- a/include/linux/inotify.h +++ b/include/linux/inotify.h @@ -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 *, - To unsubscribe from this list: send the line "unsubscribe git-commits-head" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html