Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'akpm' (patches from Andrew)

Merge misc fixes from Andrew Morton:
"3 fixes"

* emailed patches from Andrew Morton <akpm@linux-foundation.org>:
userfaultfd: remove uffd flags from vma->vm_flags if UFFD_EVENT_FORK fails
ipc/shm.c add ->pagesize function to shm_vm_ops
memcg: remove memcg_cgroup::id from IDR on mem_cgroup_css_alloc() failure

+33 -5
+3 -1
fs/userfaultfd.c
··· 633 633 /* the various vma->vm_userfaultfd_ctx still points to it */ 634 634 down_write(&mm->mmap_sem); 635 635 for (vma = mm->mmap; vma; vma = vma->vm_next) 636 - if (vma->vm_userfaultfd_ctx.ctx == release_new_ctx) 636 + if (vma->vm_userfaultfd_ctx.ctx == release_new_ctx) { 637 637 vma->vm_userfaultfd_ctx = NULL_VM_UFFD_CTX; 638 + vma->vm_flags &= ~(VM_UFFD_WP | VM_UFFD_MISSING); 639 + } 638 640 up_write(&mm->mmap_sem); 639 641 640 642 userfaultfd_ctx_put(release_new_ctx);
+12
ipc/shm.c
··· 427 427 return 0; 428 428 } 429 429 430 + static unsigned long shm_pagesize(struct vm_area_struct *vma) 431 + { 432 + struct file *file = vma->vm_file; 433 + struct shm_file_data *sfd = shm_file_data(file); 434 + 435 + if (sfd->vm_ops->pagesize) 436 + return sfd->vm_ops->pagesize(vma); 437 + 438 + return PAGE_SIZE; 439 + } 440 + 430 441 #ifdef CONFIG_NUMA 431 442 static int shm_set_policy(struct vm_area_struct *vma, struct mempolicy *new) 432 443 { ··· 565 554 .close = shm_close, /* callback for when the vm-area is released */ 566 555 .fault = shm_fault, 567 556 .split = shm_split, 557 + .pagesize = shm_pagesize, 568 558 #if defined(CONFIG_NUMA) 569 559 .set_policy = shm_set_policy, 570 560 .get_policy = shm_get_policy,
+7
mm/hugetlb.c
··· 3167 3167 return 0; 3168 3168 } 3169 3169 3170 + /* 3171 + * When a new function is introduced to vm_operations_struct and added 3172 + * to hugetlb_vm_ops, please consider adding the function to shm_vm_ops. 3173 + * This is because under System V memory model, mappings created via 3174 + * shmget/shmat with "huge page" specified are backed by hugetlbfs files, 3175 + * their original vm_ops are overwritten with shm_vm_ops. 3176 + */ 3170 3177 const struct vm_operations_struct hugetlb_vm_ops = { 3171 3178 .fault = hugetlb_vm_op_fault, 3172 3179 .open = hugetlb_vm_op_open,
+11 -4
mm/memcontrol.c
··· 4037 4037 4038 4038 static DEFINE_IDR(mem_cgroup_idr); 4039 4039 4040 + static void mem_cgroup_id_remove(struct mem_cgroup *memcg) 4041 + { 4042 + if (memcg->id.id > 0) { 4043 + idr_remove(&mem_cgroup_idr, memcg->id.id); 4044 + memcg->id.id = 0; 4045 + } 4046 + } 4047 + 4040 4048 static void mem_cgroup_id_get_many(struct mem_cgroup *memcg, unsigned int n) 4041 4049 { 4042 4050 VM_BUG_ON(atomic_read(&memcg->id.ref) <= 0); ··· 4055 4047 { 4056 4048 VM_BUG_ON(atomic_read(&memcg->id.ref) < n); 4057 4049 if (atomic_sub_and_test(n, &memcg->id.ref)) { 4058 - idr_remove(&mem_cgroup_idr, memcg->id.id); 4059 - memcg->id.id = 0; 4050 + mem_cgroup_id_remove(memcg); 4060 4051 4061 4052 /* Memcg ID pins CSS */ 4062 4053 css_put(&memcg->css); ··· 4192 4185 idr_replace(&mem_cgroup_idr, memcg, memcg->id.id); 4193 4186 return memcg; 4194 4187 fail: 4195 - if (memcg->id.id > 0) 4196 - idr_remove(&mem_cgroup_idr, memcg->id.id); 4188 + mem_cgroup_id_remove(memcg); 4197 4189 __mem_cgroup_free(memcg); 4198 4190 return NULL; 4199 4191 } ··· 4251 4245 4252 4246 return &memcg->css; 4253 4247 fail: 4248 + mem_cgroup_id_remove(memcg); 4254 4249 mem_cgroup_free(memcg); 4255 4250 return ERR_PTR(-ENOMEM); 4256 4251 }