f2fs: fix deadlock during inline_data conversion
authorJaegeuk Kim <jaegeuk@kernel.org>
Tue, 25 Nov 2014 18:59:45 +0000 (10:59 -0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Tue, 25 Nov 2014 20:08:30 +0000 (12:08 -0800)
commit5f72739583a29bfaa57448ec2c9b122995d0ae4f
tree0c329857102424b596a22ac0a3335257bb226b2a
parentce3e6d25f3fbaf48a3e1914d5ac0ddfdc1b38349
f2fs: fix deadlock during inline_data conversion

A deadlock can be occurred:
Thread 1]                             Thread 2]
 - f2fs_write_data_pages              - f2fs_write_begin
   - lock_page(page #0)
                                        - grab_cache_page(page #X)
                                        - get_node_page(inode_page)
                                        - grab_cache_page(page #0)
                                          : to convert inline_data
   - f2fs_write_data_page
     - f2fs_write_inline_data
       - get_node_page(inode_page)

In this case, trying to lock inode_page and page #0 causes deadlock.
In order to avoid this, this patch adds a rule for this locking policy,
which is that page #0 should be locked followed by inode_page lock.

Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/data.c