Merge branch 'slub/hotplug' into slab/urgent

+12 -2
+6
include/linux/memory_hotplug.h
··· 165 165 extern void put_page_bootmem(struct page *page); 166 166 #endif 167 167 168 + /* 169 + * Lock for memory hotplug guarantees 1) all callbacks for memory hotplug 170 + * notifier will be called under this. 2) offline/online/add/remove memory 171 + * will not run simultaneously. 172 + */ 173 + 168 174 void lock_memory_hotplug(void); 169 175 void unlock_memory_hotplug(void); 170 176
+4
mm/memory_hotplug.c
··· 409 409 int ret; 410 410 struct memory_notify arg; 411 411 412 + lock_memory_hotplug(); 412 413 arg.start_pfn = pfn; 413 414 arg.nr_pages = nr_pages; 414 415 arg.status_change_nid = -1; ··· 422 421 ret = notifier_to_errno(ret); 423 422 if (ret) { 424 423 memory_notify(MEM_CANCEL_ONLINE, &arg); 424 + unlock_memory_hotplug(); 425 425 return ret; 426 426 } 427 427 /* ··· 447 445 printk(KERN_DEBUG "online_pages %lx at %lx failed\n", 448 446 nr_pages, pfn); 449 447 memory_notify(MEM_CANCEL_ONLINE, &arg); 448 + unlock_memory_hotplug(); 450 449 return ret; 451 450 } 452 451 ··· 472 469 473 470 if (onlined_pages) 474 471 memory_notify(MEM_ONLINE, &arg); 472 + unlock_memory_hotplug(); 475 473 476 474 return 0; 477 475 }
+2 -2
mm/slub.c
··· 3797 3797 } 3798 3798 } 3799 3799 3800 - down_read(&slub_lock); 3800 + lock_memory_hotplug(); 3801 3801 #ifdef CONFIG_SLUB_DEBUG 3802 3802 if (flags & SO_ALL) { 3803 3803 for_each_node_state(node, N_NORMAL_MEMORY) { ··· 3838 3838 x += sprintf(buf + x, " N%d=%lu", 3839 3839 node, nodes[node]); 3840 3840 #endif 3841 - up_read(&slub_lock); 3841 + unlock_memory_hotplug(); 3842 3842 kfree(nodes); 3843 3843 return x + sprintf(buf + x, "\n"); 3844 3844 }