• Jaegeuk Kim's avatar
    f2fs: fix race on allocating and deallocating a dentry block · 01f28610
    Jaegeuk Kim authored
    There are two threads:
     f2fs_delete_entry()              get_new_data_page()
                                      f2fs_reserve_block()
    				  dn.blkaddr = XXX
     lock_page(dentry_block)
     truncate_hole()
     dn.blkaddr = NULL
     unlock_page(dentry_block)
                                      lock_page(dentry_block)
                                      fill the block from XXX address
                                      add new dentries
                                      unlock_page(dentry_block)
    
    Later, f2fs_write_data_page() will truncate the dentry_block, since
    its block address is NULL.
    
    The reason for this was due to the wrong lock order.
    In this case, we should do f2fs_reserve_block() after locking its dentry block.
    Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
    01f28610
data.c 47.3 KB