iomap: use an unsigned type for IOMAP_DIO_* defines
[platform/kernel/linux-starfive.git] / kernel / fork.c
index 41c9641..d2e12b6 100644 (file)
@@ -252,23 +252,19 @@ static int memcg_charge_kernel_stack(struct vm_struct *vm)
 {
        int i;
        int ret;
+       int nr_charged = 0;
 
-       BUILD_BUG_ON(IS_ENABLED(CONFIG_VMAP_STACK) && PAGE_SIZE % 1024 != 0);
        BUG_ON(vm->nr_pages != THREAD_SIZE / PAGE_SIZE);
 
        for (i = 0; i < THREAD_SIZE / PAGE_SIZE; i++) {
                ret = memcg_kmem_charge_page(vm->pages[i], GFP_KERNEL, 0);
                if (ret)
                        goto err;
+               nr_charged++;
        }
        return 0;
 err:
-       /*
-        * If memcg_kmem_charge_page() fails, page's memory cgroup pointer is
-        * NULL, and memcg_kmem_uncharge_page() in free_thread_stack() will
-        * ignore this page.
-        */
-       for (i = 0; i < THREAD_SIZE / PAGE_SIZE; i++)
+       for (i = 0; i < nr_charged; i++)
                memcg_kmem_uncharge_page(vm->pages[i], 0);
        return ret;
 }
@@ -690,6 +686,7 @@ static __latent_entropy int dup_mmap(struct mm_struct *mm,
        for_each_vma(old_vmi, mpnt) {
                struct file *file;
 
+               vma_start_write(mpnt);
                if (mpnt->vm_flags & VM_DONTCOPY) {
                        vm_stat_account(mm, mpnt->vm_flags, -vma_pages(mpnt));
                        continue;