|
@@ -1323,23 +1323,24 @@ static int f2fs_write_node_page(struct page *page,
|
|
|
nid = nid_of_node(page);
|
|
|
f2fs_bug_on(sbi, page->index != nid);
|
|
|
|
|
|
+ if (wbc->for_reclaim) {
|
|
|
+ if (!down_read_trylock(&sbi->node_write))
|
|
|
+ goto redirty_out;
|
|
|
+ } else {
|
|
|
+ down_read(&sbi->node_write);
|
|
|
+ }
|
|
|
+
|
|
|
get_node_info(sbi, nid, &ni);
|
|
|
|
|
|
/* This page is already truncated */
|
|
|
if (unlikely(ni.blk_addr == NULL_ADDR)) {
|
|
|
ClearPageUptodate(page);
|
|
|
dec_page_count(sbi, F2FS_DIRTY_NODES);
|
|
|
+ up_read(&sbi->node_write);
|
|
|
unlock_page(page);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
- if (wbc->for_reclaim) {
|
|
|
- if (!down_read_trylock(&sbi->node_write))
|
|
|
- goto redirty_out;
|
|
|
- } else {
|
|
|
- down_read(&sbi->node_write);
|
|
|
- }
|
|
|
-
|
|
|
set_page_writeback(page);
|
|
|
fio.blk_addr = ni.blk_addr;
|
|
|
write_node_page(nid, &fio);
|