• Oleg Nesterov's avatar
    coredump: introduce dump_interrupted() · 528f827e
    Oleg Nesterov authored
    By discussion with Mandeep.
    Change dump_write(), dump_seek() and do_coredump() to check
    signal_pending() and abort if it is true.  dump_seek() does this only
    before f_op->llseek(), otherwise it relies on dump_write().
    We need this change to ensure that the coredump won't delay suspend, and
    to ensure it reacts to SIGKILL "quickly enough", a core dump can take a
    lot of time.  In particular this can help oom-killer.
    We add the new trivial helper, dump_interrupted() to add the comments and
    to simplify the potential freezer changes.  Perhaps it will have more
    Ideally it should do try_to_freeze() but then we need the unpleasant
    changes in dump_write() and wait_for_dump_helpers().  It is not trivial to
    change dump_write() to restart if f_op->write() fails because of
    freezing().  We need to handle the short writes, we need to clear
    TIF_SIGPENDING (and we can't rely on recalc_sigpending() unless we change
    it to check PF_DUMPCORE).  And if the buggy f_op->write() sets
    TIF_SIGPENDING we can not distinguish this case from the race with
    freeze_task() + __thaw_task().
    So we simply accept the fact that the freezer can truncate a core-dump but
    at least you can reliably suspend.  Hopefully we can tolerate this
    unlikely case and the necessary complications doesn't worth a trouble.
    But if we decide to make the coredumping freezable later we can do this on
    top of this change.
    Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
    Acked-by: default avatarMandeep Singh Baines <msb@chromium.org>
    Cc: Neil Horman <nhorman@redhat.com>
    Cc: "Rafael J. Wysocki" <rjw@sisk.pl>
    Cc: Tejun Heo <tj@kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
coredump.c 17.3 KB