diff options
| author | 2008-12-12 13:48:57 +0100 | |
|---|---|---|
| committer | 2008-12-12 13:48:57 +0100 | |
| commit | 45ab6b0c76d0e4cce5bd608ccf97b0f6b20f18df (patch) | |
| tree | 4d51c73533c386aee16fde1e74b5e3bc22eedc53 /kernel/fork.c | |
| parent | Merge branch 'tracing/fastboot' into cpus4096 (diff) | |
| parent | sched: add missing arch_update_cpu_topology() call (diff) | |
| download | wireguard-linux-45ab6b0c76d0e4cce5bd608ccf97b0f6b20f18df.tar.xz wireguard-linux-45ab6b0c76d0e4cce5bd608ccf97b0f6b20f18df.zip | |
Merge branch 'sched/core' into cpus4096
Conflicts:
include/linux/ftrace.h
kernel/sched.c
Diffstat (limited to 'kernel/fork.c')
| -rw-r--r-- | kernel/fork.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/kernel/fork.c b/kernel/fork.c index 7407ab319875..7b93da72d4a2 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -319,17 +319,20 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm) file = tmp->vm_file; if (file) { struct inode *inode = file->f_path.dentry->d_inode; + struct address_space *mapping = file->f_mapping; + get_file(file); if (tmp->vm_flags & VM_DENYWRITE) atomic_dec(&inode->i_writecount); - - /* insert tmp into the share list, just after mpnt */ - spin_lock(&file->f_mapping->i_mmap_lock); + spin_lock(&mapping->i_mmap_lock); + if (tmp->vm_flags & VM_SHARED) + mapping->i_mmap_writable++; tmp->vm_truncate_count = mpnt->vm_truncate_count; - flush_dcache_mmap_lock(file->f_mapping); + flush_dcache_mmap_lock(mapping); + /* insert tmp into the share list, just after mpnt */ vma_prio_tree_add(tmp, mpnt); - flush_dcache_mmap_unlock(file->f_mapping); - spin_unlock(&file->f_mapping->i_mmap_lock); + flush_dcache_mmap_unlock(mapping); + spin_unlock(&mapping->i_mmap_lock); } /* @@ -1406,6 +1409,7 @@ long do_fork(unsigned long clone_flags, init_completion(&vfork); } + audit_finish_fork(p); tracehook_report_clone(trace, regs, clone_flags, nr, p); /* |
