diff options
Diffstat (limited to 'kernel/fork.c')
-rw-r--r-- | kernel/fork.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/kernel/fork.c b/kernel/fork.c index 10646182440f..e702cb9ffbd8 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
@@ -946,6 +946,24 @@ void mmput(struct mm_struct *mm) | |||
946 | } | 946 | } |
947 | EXPORT_SYMBOL_GPL(mmput); | 947 | EXPORT_SYMBOL_GPL(mmput); |
948 | 948 | ||
949 | #ifdef CONFIG_MMU | ||
950 | static void mmput_async_fn(struct work_struct *work) | ||
951 | { | ||
952 | struct mm_struct *mm = container_of(work, struct mm_struct, | ||
953 | async_put_work); | ||
954 | |||
955 | __mmput(mm); | ||
956 | } | ||
957 | |||
958 | void mmput_async(struct mm_struct *mm) | ||
959 | { | ||
960 | if (atomic_dec_and_test(&mm->mm_users)) { | ||
961 | INIT_WORK(&mm->async_put_work, mmput_async_fn); | ||
962 | schedule_work(&mm->async_put_work); | ||
963 | } | ||
964 | } | ||
965 | #endif | ||
966 | |||
949 | /** | 967 | /** |
950 | * set_mm_exe_file - change a reference to the mm's executable file | 968 | * set_mm_exe_file - change a reference to the mm's executable file |
951 | * | 969 | * |