summaryrefslogtreecommitdiffstats
path: root/kernel/audit.c
diff options
context:
space:
mode:
authorImre Palik <imrep@amazon.de>2015-02-23 21:37:59 +0100
committerPaul Moore <pmoore@redhat.com>2015-02-23 21:37:59 +0100
commitf1aaf26224bee779012aab136e5373ce3487982c (patch)
treed0c309cc10f29c2643e3214783fd65d835ba13bd /kernel/audit.c
parentaudit: remove vestiges of vers_ops (diff)
downloadlinux-f1aaf26224bee779012aab136e5373ce3487982c.tar.xz
linux-f1aaf26224bee779012aab136e5373ce3487982c.zip
audit: move the tree pruning to a dedicated thread
When file auditing is enabled, during a low memory situation, a memory allocation with __GFP_FS can lead to pruning the inode cache. Which can, in turn lead to audit_tree_freeing_mark() being called. This can call audit_schedule_prune(), that tries to fork a pruning thread, and waits until the thread is created. But forking needs memory, and the memory allocations there are done with __GFP_FS. So we are waiting merrily for some __GFP_FS memory allocations to complete, while holding some filesystem locks. This can take a while ... This patch creates a single thread for pruning the tree from audit_add_tree_rule(), and thus avoids the deadlock that the on-demand thread creation can cause. Reported-by: Matt Wilson <msw@amazon.com> Cc: Matt Wilson <msw@amazon.com> Signed-off-by: Imre Palik <imrep@amazon.de> Reviewed-by: Richard Guy Briggs <rgb@redhat.com> Signed-off-by: Paul Moore <pmoore@redhat.com>
Diffstat (limited to 'kernel/audit.c')
0 files changed, 0 insertions, 0 deletions