Merge branch 'akpm' (patches from Andrew)
Merge updates from Andrew Morton: - a few misc things - a few Y2038 fixes - ntfs fixes - arch/sh tweaks - ocfs2 updates - most of MM * emailed patches from Andrew Morton <akpm@linux-foundation.org>: (111 commits) mm/hmm.c: remove unused variables align_start and align_end fs/userfaultfd.c: remove redundant pointer uwq mm, vmacache: hash addresses based on pmd mm/list_lru: introduce list_lru_shrink_walk_irq() mm/list_lru.c: pass struct list_lru_node* as an argument to __list_lru_walk_one() mm/list_lru.c: move locking from __list_lru_walk_one() to its caller mm/list_lru.c: use list_lru_walk_one() in list_lru_walk_node() mm, swap: make CONFIG_THP_SWAP depend on CONFIG_SWAP mm/sparse: delete old sparse_init and enable new one mm/sparse: add new sparse_init_nid() and sparse_init() mm/sparse: move buffer init/fini to the common place mm/sparse: use the new sparse buffer functions in non-vmemmap mm/sparse: abstract sparse buffer allocations mm/hugetlb.c: don't zero 1GiB bootmem pages mm, page_alloc: double zone's batchsize mm/oom_kill.c: document oom_lock mm/hugetlb: remove gigantic page support for HIGHMEM mm, oom: remove sleep from under oom_lock kernel/dma: remove unsupported gfp_mask parameter from dma_alloc_from_contiguous() mm/cma: remove unsupported gfp_mask parameter from cma_alloc() ...
This commit is contained in:
@@ -384,8 +384,9 @@ out_err:
|
||||
|
||||
static int __init dnotify_init(void)
|
||||
{
|
||||
dnotify_struct_cache = KMEM_CACHE(dnotify_struct, SLAB_PANIC);
|
||||
dnotify_mark_cache = KMEM_CACHE(dnotify_mark, SLAB_PANIC);
|
||||
dnotify_struct_cache = KMEM_CACHE(dnotify_struct,
|
||||
SLAB_PANIC|SLAB_ACCOUNT);
|
||||
dnotify_mark_cache = KMEM_CACHE(dnotify_mark, SLAB_PANIC|SLAB_ACCOUNT);
|
||||
|
||||
dnotify_group = fsnotify_alloc_group(&dnotify_fsnotify_ops);
|
||||
if (IS_ERR(dnotify_group))
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#include <linux/types.h>
|
||||
#include <linux/wait.h>
|
||||
#include <linux/audit.h>
|
||||
#include <linux/sched/mm.h>
|
||||
|
||||
#include "fanotify.h"
|
||||
|
||||
@@ -140,8 +141,8 @@ struct fanotify_event_info *fanotify_alloc_event(struct fsnotify_group *group,
|
||||
struct inode *inode, u32 mask,
|
||||
const struct path *path)
|
||||
{
|
||||
struct fanotify_event_info *event;
|
||||
gfp_t gfp = GFP_KERNEL;
|
||||
struct fanotify_event_info *event = NULL;
|
||||
gfp_t gfp = GFP_KERNEL_ACCOUNT;
|
||||
|
||||
/*
|
||||
* For queues with unlimited length lost events are not expected and
|
||||
@@ -151,19 +152,22 @@ struct fanotify_event_info *fanotify_alloc_event(struct fsnotify_group *group,
|
||||
if (group->max_events == UINT_MAX)
|
||||
gfp |= __GFP_NOFAIL;
|
||||
|
||||
/* Whoever is interested in the event, pays for the allocation. */
|
||||
memalloc_use_memcg(group->memcg);
|
||||
|
||||
if (fanotify_is_perm_event(mask)) {
|
||||
struct fanotify_perm_event_info *pevent;
|
||||
|
||||
pevent = kmem_cache_alloc(fanotify_perm_event_cachep, gfp);
|
||||
if (!pevent)
|
||||
return NULL;
|
||||
goto out;
|
||||
event = &pevent->fae;
|
||||
pevent->response = 0;
|
||||
goto init;
|
||||
}
|
||||
event = kmem_cache_alloc(fanotify_event_cachep, gfp);
|
||||
if (!event)
|
||||
return NULL;
|
||||
goto out;
|
||||
init: __maybe_unused
|
||||
fsnotify_init_event(&event->fse, inode, mask);
|
||||
event->tgid = get_pid(task_tgid(current));
|
||||
@@ -174,6 +178,8 @@ init: __maybe_unused
|
||||
event->path.mnt = NULL;
|
||||
event->path.dentry = NULL;
|
||||
}
|
||||
out:
|
||||
memalloc_unuse_memcg();
|
||||
return event;
|
||||
}
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/compat.h>
|
||||
#include <linux/sched/signal.h>
|
||||
#include <linux/memcontrol.h>
|
||||
|
||||
#include <asm/ioctls.h>
|
||||
|
||||
@@ -731,6 +732,7 @@ SYSCALL_DEFINE2(fanotify_init, unsigned int, flags, unsigned int, event_f_flags)
|
||||
|
||||
group->fanotify_data.user = user;
|
||||
atomic_inc(&user->fanotify_listeners);
|
||||
group->memcg = get_mem_cgroup_from_mm(current->mm);
|
||||
|
||||
oevent = fanotify_alloc_event(group, NULL, FS_Q_OVERFLOW, NULL);
|
||||
if (unlikely(!oevent)) {
|
||||
@@ -932,7 +934,8 @@ COMPAT_SYSCALL_DEFINE6(fanotify_mark,
|
||||
*/
|
||||
static int __init fanotify_user_setup(void)
|
||||
{
|
||||
fanotify_mark_cache = KMEM_CACHE(fsnotify_mark, SLAB_PANIC);
|
||||
fanotify_mark_cache = KMEM_CACHE(fsnotify_mark,
|
||||
SLAB_PANIC|SLAB_ACCOUNT);
|
||||
fanotify_event_cachep = KMEM_CACHE(fanotify_event_info, SLAB_PANIC);
|
||||
if (IS_ENABLED(CONFIG_FANOTIFY_ACCESS_PERMISSIONS)) {
|
||||
fanotify_perm_event_cachep =
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#include <linux/srcu.h>
|
||||
#include <linux/rculist.h>
|
||||
#include <linux/wait.h>
|
||||
#include <linux/memcontrol.h>
|
||||
|
||||
#include <linux/fsnotify_backend.h>
|
||||
#include "fsnotify.h"
|
||||
@@ -36,6 +37,8 @@ static void fsnotify_final_destroy_group(struct fsnotify_group *group)
|
||||
if (group->ops->free_group_priv)
|
||||
group->ops->free_group_priv(group);
|
||||
|
||||
mem_cgroup_put(group->memcg);
|
||||
|
||||
kfree(group);
|
||||
}
|
||||
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
#include <linux/types.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/sched/user.h>
|
||||
#include <linux/sched/mm.h>
|
||||
|
||||
#include "inotify.h"
|
||||
|
||||
@@ -98,7 +99,11 @@ int inotify_handle_event(struct fsnotify_group *group,
|
||||
i_mark = container_of(inode_mark, struct inotify_inode_mark,
|
||||
fsn_mark);
|
||||
|
||||
event = kmalloc(alloc_len, GFP_KERNEL);
|
||||
/* Whoever is interested in the event, pays for the allocation. */
|
||||
memalloc_use_memcg(group->memcg);
|
||||
event = kmalloc(alloc_len, GFP_KERNEL_ACCOUNT);
|
||||
memalloc_unuse_memcg();
|
||||
|
||||
if (unlikely(!event)) {
|
||||
/*
|
||||
* Treat lost event due to ENOMEM the same way as queue
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/poll.h>
|
||||
#include <linux/wait.h>
|
||||
#include <linux/memcontrol.h>
|
||||
|
||||
#include "inotify.h"
|
||||
#include "../fdinfo.h"
|
||||
@@ -639,6 +640,7 @@ static struct fsnotify_group *inotify_new_group(unsigned int max_events)
|
||||
oevent->name_len = 0;
|
||||
|
||||
group->max_events = max_events;
|
||||
group->memcg = get_mem_cgroup_from_mm(current->mm);
|
||||
|
||||
spin_lock_init(&group->inotify_data.idr_lock);
|
||||
idr_init(&group->inotify_data.idr);
|
||||
@@ -815,7 +817,8 @@ static int __init inotify_user_setup(void)
|
||||
|
||||
BUG_ON(hweight32(ALL_INOTIFY_BITS) != 22);
|
||||
|
||||
inotify_inode_mark_cachep = KMEM_CACHE(inotify_inode_mark, SLAB_PANIC);
|
||||
inotify_inode_mark_cachep = KMEM_CACHE(inotify_inode_mark,
|
||||
SLAB_PANIC|SLAB_ACCOUNT);
|
||||
|
||||
inotify_max_queued_events = 16384;
|
||||
init_user_ns.ucount_max[UCOUNT_INOTIFY_INSTANCES] = 128;
|
||||
|
||||
Reference in New Issue
Block a user