Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6
[pandora-kernel.git] / drivers / base / memory.c
index 5185bcf..cafeaaf 100644 (file)
@@ -490,6 +490,7 @@ static int add_memory_block(int nid, struct mem_section *section,
 
        mem->phys_index = __section_nr(section);
        mem->state = state;
+       mem->section_count++;
        mutex_init(&mem->state_mutex);
        start_pfn = section_nr_to_pfn(mem->phys_index);
        mem->phys_device = arch_get_memory_phys_device(start_pfn);
@@ -519,12 +520,16 @@ int remove_memory_block(unsigned long node_id, struct mem_section *section,
 
        mutex_lock(&mem_sysfs_mutex);
        mem = find_memory_block(section);
-       unregister_mem_sect_under_nodes(mem);
-       mem_remove_simple_file(mem, phys_index);
-       mem_remove_simple_file(mem, state);
-       mem_remove_simple_file(mem, phys_device);
-       mem_remove_simple_file(mem, removable);
-       unregister_memory(mem, section);
+
+       mem->section_count--;
+       if (mem->section_count == 0) {
+               unregister_mem_sect_under_nodes(mem);
+               mem_remove_simple_file(mem, phys_index);
+               mem_remove_simple_file(mem, state);
+               mem_remove_simple_file(mem, phys_device);
+               mem_remove_simple_file(mem, removable);
+               unregister_memory(mem, section);
+       }
 
        mutex_unlock(&mem_sysfs_mutex);
        return 0;