On 09/23/2014 12:53 AM, Jaegeuk Kim wrote: > +static void __set_nat_cache_dirty(struct f2fs_nm_info *nm_i, > + struct nat_entry *ne) > +{ > + nid_t set = ne->ni.nid / NAT_ENTRY_PER_BLOCK; > + struct nat_entry_set *head; > + > + if (get_nat_flag(ne, IS_DIRTY)) > + return; > +retry: > + head = radix_tree_lookup(&nm_i->nat_set_root, set); > + if (!head) { > + head = f2fs_kmem_cache_alloc(nat_entry_set_slab, GFP_ATOMIC);
This is funny, you call f2fs_kmem_cache_alloc() here with GFP_ATOMIC because of disabled preemption, but f2fs_kmem_cache_alloc() will attempt to cond_resched() in case of failed allocations: retry: entry = kmem_cache_alloc(cachep, flags); if (!entry) { cond_resched(); goto retry; } So in reality, f2fs_kmem_cache_alloc can't really work with GFP_ATOMIC, and right now there are two different locations that call it with that flag. Thanks, Sasha ------------------------------------------------------------------------------ Meet PCI DSS 3.0 Compliance Requirements with EventLog Analyzer Achieve PCI DSS 3.0 Compliant Status with Out-of-the-box PCI DSS Reports Are you Audit-Ready for PCI DSS 3.0 Compliance? Download White paper Comply to PCI DSS 3.0 Requirement 10 and 11.5 with EventLog Analyzer http://p.sf.net/sfu/Zoho _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel