Messages in this thread | | | Date | Wed, 9 Jan 2013 15:11:40 -0800 | From | Andrew Morton <> | Subject | Re: [PATCH v6 02/15] memory-hotplug: check whether all memory blocks are offlined or not when removing memory |
| |
On Wed, 9 Jan 2013 17:32:26 +0800 Tang Chen <tangchen@cn.fujitsu.com> wrote:
> We remove the memory like this: > 1. lock memory hotplug > 2. offline a memory block > 3. unlock memory hotplug > 4. repeat 1-3 to offline all memory blocks > 5. lock memory hotplug > 6. remove memory(TODO) > 7. unlock memory hotplug > > All memory blocks must be offlined before removing memory. But we don't hold > the lock in the whole operation. So we should check whether all memory blocks > are offlined before step6. Otherwise, kernel maybe panicked.
Well, the obvious question is: why don't we hold lock_memory_hotplug() for all of steps 1-4? Please send the reasons for this in a form which I can paste into the changelog.
Actually, I wonder if doing this would fix a race in the current remove_memory() repeat: loop. That code does a find_memory_block_hinted() followed by offline_memory_block(), but afaict find_memory_block_hinted() only does a get_device(). Is the get_device() sufficiently strong to prevent problems if another thread concurrently offlines or otherwise alters this memory_block's state?
| |