• Chao Yu's avatar
    f2fs: reorder nat cache lock in cache_nat_entry · 1515aef0
    Chao Yu authored
    When lookuping nat entry in cache_nat_entry, if we fail to hit nat cache,
    we try to load nat entries a) from journal of current segment cache or b)
    from NAT pages for updating, during the process, write lock of
    nat_tree_lock will be held to avoid inconsistent condition in between
    nid cache and nat cache caused by racing among nat entry shrinker,
    checkpointer, nat entry updater.
    
    But this way may cause low efficient when updating nat cache, because it
    serializes accessing in journal cache or reading NAT pages.
    
    Here, we reorder lock and update flow as below to enhance accessing
    concurrency:
    
     - get_node_info
      - down_read(nat_tree_lock)
      - lookup nat cache --- hit -> unlock & return
      - lookup journal cache --- hit -> unlock & goto update
      - up_read(nat_tree_lock)
    update:
      - down_write(nat_tree_lock)
      - cache_nat_entry
       - lookup nat cache --- nohit -> update
      - up_write(nat_tree_lock)
    Signed-off-by: default avatarChao Yu <chao2.yu@samsung.com>
    Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
    1515aef0
node.c 53 KB