On Tue, Dec 11, 2018 at 06:21:42PM +0100, Jan Kara wrote: > Currently, block device pages don't provide a ->migratepage callback and > thus fallback_migrate_page() is used for them. This handler cannot deal > with dirty pages in async mode and also with the case a buffer head is in > the LRU buffer head cache (as it has elevated b_count). Thus such page can > block memory offlining. > > Fix the problem by using buffer_migrate_page_norefs() for migrating > block device pages. That function takes care of dropping bh LRU in case > migration would fail due to elevated buffer refcount to avoid stalls and > can also migrate dirty pages without writing them. > > Signed-off-by: Jan Kara <jack@xxxxxxx> Acked-by: Mel Gorman <mgorman@xxxxxxx> -- Mel Gorman SUSE Labs