forked from luck/tmp_suning_uos_patched
b54cecf5e2
The 'inode' argument to handle_event(), sometimes referred to as 'to_tell' is somewhat obsolete. It is a remnant from the times when a group could only have an inode mark associated with an event. We now pass an iter_info array to the callback, with all marks associated with an event. Most backends ignore this argument, with two exceptions: 1. dnotify uses it for sanity check that event is on directory 2. fanotify uses it to report fid of directory on directory entry modification events Remove the 'inode' argument and add a 'dir' argument. The callback function signature is deliberately changed, because the meaning of the argument has changed and the arguments have been documented. The 'dir' argument is set to when 'file_name' is specified and it is referring to the directory that the 'file_name' entry belongs to. Signed-off-by: Amir Goldstein <amir73il@gmail.com> Signed-off-by: Jan Kara <jack@suse.cz>
52 lines
1.3 KiB
C
52 lines
1.3 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#include <linux/fsnotify_backend.h>
|
|
#include <linux/inotify.h>
|
|
#include <linux/slab.h> /* struct kmem_cache */
|
|
|
|
struct inotify_event_info {
|
|
struct fsnotify_event fse;
|
|
u32 mask;
|
|
int wd;
|
|
u32 sync_cookie;
|
|
int name_len;
|
|
char name[];
|
|
};
|
|
|
|
struct inotify_inode_mark {
|
|
struct fsnotify_mark fsn_mark;
|
|
int wd;
|
|
};
|
|
|
|
static inline struct inotify_event_info *INOTIFY_E(struct fsnotify_event *fse)
|
|
{
|
|
return container_of(fse, struct inotify_event_info, fse);
|
|
}
|
|
|
|
extern void inotify_ignored_and_remove_idr(struct fsnotify_mark *fsn_mark,
|
|
struct fsnotify_group *group);
|
|
extern int inotify_handle_event(struct fsnotify_group *group, u32 mask,
|
|
const void *data, int data_type,
|
|
struct inode *dir,
|
|
const struct qstr *file_name, u32 cookie,
|
|
struct fsnotify_iter_info *iter_info);
|
|
|
|
extern const struct fsnotify_ops inotify_fsnotify_ops;
|
|
extern struct kmem_cache *inotify_inode_mark_cachep;
|
|
|
|
#ifdef CONFIG_INOTIFY_USER
|
|
static inline void dec_inotify_instances(struct ucounts *ucounts)
|
|
{
|
|
dec_ucount(ucounts, UCOUNT_INOTIFY_INSTANCES);
|
|
}
|
|
|
|
static inline struct ucounts *inc_inotify_watches(struct ucounts *ucounts)
|
|
{
|
|
return inc_ucount(ucounts->ns, ucounts->uid, UCOUNT_INOTIFY_WATCHES);
|
|
}
|
|
|
|
static inline void dec_inotify_watches(struct ucounts *ucounts)
|
|
{
|
|
dec_ucount(ucounts, UCOUNT_INOTIFY_WATCHES);
|
|
}
|
|
#endif
|