Loading fs/inotify.c +35 −0 Original line number Diff line number Diff line Loading @@ -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 Loading include/linux/inotify.h +1 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
fs/inotify.c +35 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
include/linux/inotify.h +1 −0 Original line number Diff line number Diff line Loading @@ -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