diff options
| author | Dan Williams <dan.j.williams@intel.com> | 2022-09-24 18:14:12 -0700 |
|---|---|---|
| committer | Dan Williams <dan.j.williams@intel.com> | 2022-09-24 18:14:12 -0700 |
| commit | b3bbcc5d1da1b654091dad15980b3d58fdae0fc6 (patch) | |
| tree | 77795fbece4fc61a659ed97c70d798ca81f35bb8 /kernel/fork.c | |
| parent | 17d9c15c9b9e7fb285f7ac5367dfb5f00ff575e3 (diff) | |
| parent | 67feaba413ec68daf4124e9870878899b4ed9a0e (diff) | |
| download | linux-b3bbcc5d1da1b654091dad15980b3d58fdae0fc6.tar.gz linux-b3bbcc5d1da1b654091dad15980b3d58fdae0fc6.zip | |
Merge branch 'for-6.0/dax' into libnvdimm-fixes
Pick up another "Soft Reservation" fix for v6.0-final on top of some
straggling nvdimm fixes that missed v5.19.
Diffstat (limited to 'kernel/fork.c')
| -rw-r--r-- | kernel/fork.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/kernel/fork.c b/kernel/fork.c index 9d44f2d46c69..8a9e92068b15 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -1225,6 +1225,7 @@ void mmput_async(struct mm_struct *mm) schedule_work(&mm->async_put_work); } } +EXPORT_SYMBOL_GPL(mmput_async); #endif /** @@ -1814,6 +1815,7 @@ static inline void rcu_copy_process(struct task_struct *p) p->trc_reader_nesting = 0; p->trc_reader_special.s = 0; INIT_LIST_HEAD(&p->trc_holdout_list); + INIT_LIST_HEAD(&p->trc_blkd_node); #endif /* #ifdef CONFIG_TASKS_TRACE_RCU */ } @@ -1964,6 +1966,18 @@ static void copy_oom_score_adj(u64 clone_flags, struct task_struct *tsk) mutex_unlock(&oom_adj_mutex); } +#ifdef CONFIG_RV +static void rv_task_fork(struct task_struct *p) +{ + int i; + + for (i = 0; i < RV_PER_TASK_MONITORS; i++) + p->rv[i].da_mon.monitoring = false; +} +#else +#define rv_task_fork(p) do {} while (0) +#endif + /* * This creates a new process as a copy of the old one, * but does not actually start it yet. @@ -2033,8 +2047,11 @@ static __latent_entropy struct task_struct *copy_process( /* * If the new process will be in a different time namespace * do not allow it to share VM or a thread group with the forking task. + * + * On vfork, the child process enters the target time namespace only + * after exec. */ - if (clone_flags & (CLONE_THREAD | CLONE_VM)) { + if ((clone_flags & (CLONE_VM | CLONE_VFORK)) == CLONE_VM) { if (nsp->time_ns != nsp->time_ns_for_children) return ERR_PTR(-EINVAL); } @@ -2399,6 +2416,8 @@ static __latent_entropy struct task_struct *copy_process( */ copy_seccomp(p); + rv_task_fork(p); + rseq_fork(p, clone_flags); /* Don't start children in a dying pid namespace */ |
