fsnotify: Move ->free_mark callback to fsnotify_ops
Pointer to ->free_mark callback unnecessarily occupies one long in each fsnotify_mark although they are the same for all marks from one notification group. Move the callback pointer to fsnotify_ops. Reviewed-by: Miklos Szeredi <mszeredi@redhat.com> Reviewed-by: Amir Goldstein <amir73il@gmail.com> Signed-off-by: Jan Kara <jack@suse.cz>
This commit is contained in:
@@ -31,6 +31,7 @@ extern int inotify_handle_event(struct fsnotify_group *group,
|
||||
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)
|
||||
|
@@ -176,9 +176,20 @@ static void inotify_free_event(struct fsnotify_event *fsn_event)
|
||||
kfree(INOTIFY_E(fsn_event));
|
||||
}
|
||||
|
||||
/* ding dong the mark is dead */
|
||||
static void inotify_free_mark(struct fsnotify_mark *fsn_mark)
|
||||
{
|
||||
struct inotify_inode_mark *i_mark;
|
||||
|
||||
i_mark = container_of(fsn_mark, struct inotify_inode_mark, fsn_mark);
|
||||
|
||||
kmem_cache_free(inotify_inode_mark_cachep, i_mark);
|
||||
}
|
||||
|
||||
const struct fsnotify_ops inotify_fsnotify_ops = {
|
||||
.handle_event = inotify_handle_event,
|
||||
.free_group_priv = inotify_free_group_priv,
|
||||
.free_event = inotify_free_event,
|
||||
.freeing_mark = inotify_freeing_mark,
|
||||
.free_mark = inotify_free_mark,
|
||||
};
|
||||
|
@@ -47,7 +47,7 @@
|
||||
/* configurable via /proc/sys/fs/inotify/ */
|
||||
static int inotify_max_queued_events __read_mostly;
|
||||
|
||||
static struct kmem_cache *inotify_inode_mark_cachep __read_mostly;
|
||||
struct kmem_cache *inotify_inode_mark_cachep __read_mostly;
|
||||
|
||||
#ifdef CONFIG_SYSCTL
|
||||
|
||||
@@ -483,16 +483,6 @@ void inotify_ignored_and_remove_idr(struct fsnotify_mark *fsn_mark,
|
||||
dec_inotify_watches(group->inotify_data.ucounts);
|
||||
}
|
||||
|
||||
/* ding dong the mark is dead */
|
||||
static void inotify_free_mark(struct fsnotify_mark *fsn_mark)
|
||||
{
|
||||
struct inotify_inode_mark *i_mark;
|
||||
|
||||
i_mark = container_of(fsn_mark, struct inotify_inode_mark, fsn_mark);
|
||||
|
||||
kmem_cache_free(inotify_inode_mark_cachep, i_mark);
|
||||
}
|
||||
|
||||
static int inotify_update_existing_watch(struct fsnotify_group *group,
|
||||
struct inode *inode,
|
||||
u32 arg)
|
||||
@@ -558,7 +548,7 @@ static int inotify_new_watch(struct fsnotify_group *group,
|
||||
if (unlikely(!tmp_i_mark))
|
||||
return -ENOMEM;
|
||||
|
||||
fsnotify_init_mark(&tmp_i_mark->fsn_mark, group, inotify_free_mark);
|
||||
fsnotify_init_mark(&tmp_i_mark->fsn_mark, group);
|
||||
tmp_i_mark->fsn_mark.mask = mask;
|
||||
tmp_i_mark->wd = -1;
|
||||
|
||||
|
مرجع در شماره جدید
Block a user