Merge branch 'slub/hotplug' into slab/urgent

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