Excerpts from Miao Xie's message of 2011-03-27 07:44:06 -0400: > On sun, 27 Mar 2011 20:09:10 +0900, Itaru Kitayama wrote: > > Hi Miao, > > > > On Sun, 27 Mar 2011 15:00:00 +0800 > > Miao Xie <mi...@cn.fujitsu.com> wrote: > > > >> I got it. It is because the allocation flag of the metadata's page cache, > >> which is stored in > >> the btree inode's i_mapping, was set to be GFP_HIGHUSER_MOVABLE. So if we > >> allocate pages for > >> btree's page cache, this lockdep warning will be triggered. > >> > >> I think even without my patch, this lockdep warning can also be triggered, > >> btrfs_evict_inode() > >> do the similar operations like what I do in the btrfs_destroy_inode(). > >> Task1 Kswap0 task > >> open() > >> ... > >> btrfs_search_slot() > >> ... > >> btrfs_cow_block() > >> ... > >> alloc_page() > >> wait for reclaiming > >> shrink_slab() > >> ... > >> shrink_icache_memory() > >> ... > >> btrfs_evict_inode() > >> ... > >> btrfs_search_slot() > >> > >> If the path is locked by task1, the deadlock happens. > > > > Ok. balance_pgdat() calls shrink_slab() with GFP_KERNEL so it's still > > possible for the kswapd0 > > to call prune_icache(), no? I still see the lockdep warning even with your > > patch that clears > > __GFP_FS in open_ctree(). > > sorry for my mistake. The above explanation is wrong, it has no business with > kswap thread. > The correct explanation is > > Task1 > open() > ... > btrfs_search_slot() > ... > btrfs_cow_block() > ... > alloc_page() > do_try_to_free_pages() > shrink_slab() > ... > shrink_icache_memory() > ... > btrfs_evict_inode() > ... > btrfs_search_slot() > > If the path is locked by task1, the deadlock happens. > > So balance_pgdat() is impossible to trigger the lockdep. > (My clearing __GFP_FS patch's changelog is also wrong.) > > I see, except btree's page cache, free space cache's page cache is also > special, > can not use __GFP_FS flag.
Ok, I've got your first patch already, I'll add a hunk for the free space cache too. Most of the allocations we're doing are explicitly with GFP_NOFS, so it is just supporting allocations and readahead that should be causing trouble. Thanks! -chris -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html