lkml.org 
[lkml]   [2014]   [Oct]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH 3/3] f2fs: refactor flush_nat_entries to remove costly reorganizing ops
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


\
 
 \ /
  Last update: 2014-10-11 15:41    [W:0.068 / U:0.032 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site