]> Git Repo - linux.git/blobdiff - fs/coredump.c
Merge tag 'kvm-arm-for-v4.7-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux.git] / fs / coredump.c
index 47c32c3bfa1d90c10ce6ade45fc7829a39345fcc..38a7ab87e10a80d9d62d80b74dd58c1f2989a966 100644 (file)
@@ -413,7 +413,9 @@ static int coredump_wait(int exit_code, struct core_state *core_state)
        core_state->dumper.task = tsk;
        core_state->dumper.next = NULL;
 
-       down_write(&mm->mmap_sem);
+       if (down_write_killable(&mm->mmap_sem))
+               return -EINTR;
+
        if (!mm->core_state)
                core_waiters = zap_threads(tsk, mm, core_state, exit_code);
        up_write(&mm->mmap_sem);
@@ -803,12 +805,9 @@ int dump_skip(struct coredump_params *cprm, size_t nr)
        static char zeroes[PAGE_SIZE];
        struct file *file = cprm->file;
        if (file->f_op->llseek && file->f_op->llseek != no_llseek) {
-               if (cprm->written + nr > cprm->limit)
-                       return 0;
                if (dump_interrupted() ||
                    file->f_op->llseek(file, nr, SEEK_CUR) < 0)
                        return 0;
-               cprm->written += nr;
                return 1;
        } else {
                while (nr > PAGE_SIZE) {
@@ -823,7 +822,7 @@ EXPORT_SYMBOL(dump_skip);
 
 int dump_align(struct coredump_params *cprm, int align)
 {
-       unsigned mod = cprm->written & (align - 1);
+       unsigned mod = cprm->file->f_pos & (align - 1);
        if (align & (align - 1))
                return 0;
        return mod ? dump_skip(cprm, align - mod) : 1;
This page took 0.030724 seconds and 4 git commands to generate.