aboutsummaryrefslogtreecommitdiffstats
path: root/fs/f2fs/node.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/f2fs/node.c')
-rw-r--r--fs/f2fs/node.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 51ef27894433..ef80f791b02b 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1156,6 +1156,9 @@ static int f2fs_write_node_page(struct page *page,
1156 block_t new_addr; 1156 block_t new_addr;
1157 struct node_info ni; 1157 struct node_info ni;
1158 1158
1159 if (sbi->por_doing)
1160 goto redirty_out;
1161
1159 wait_on_page_writeback(page); 1162 wait_on_page_writeback(page);
1160 1163
1161 /* get old block addr of this node page */ 1164 /* get old block addr of this node page */
@@ -1171,12 +1174,8 @@ static int f2fs_write_node_page(struct page *page,
1171 return 0; 1174 return 0;
1172 } 1175 }
1173 1176
1174 if (wbc->for_reclaim) { 1177 if (wbc->for_reclaim)
1175 dec_page_count(sbi, F2FS_DIRTY_NODES); 1178 goto redirty_out;
1176 wbc->pages_skipped++;
1177 set_page_dirty(page);
1178 return AOP_WRITEPAGE_ACTIVATE;
1179 }
1180 1179
1181 mutex_lock(&sbi->node_write); 1180 mutex_lock(&sbi->node_write);
1182 set_page_writeback(page); 1181 set_page_writeback(page);
@@ -1186,6 +1185,12 @@ static int f2fs_write_node_page(struct page *page,
1186 mutex_unlock(&sbi->node_write); 1185 mutex_unlock(&sbi->node_write);
1187 unlock_page(page); 1186 unlock_page(page);
1188 return 0; 1187 return 0;
1188
1189redirty_out:
1190 dec_page_count(sbi, F2FS_DIRTY_NODES);
1191 wbc->pages_skipped++;
1192 set_page_dirty(page);
1193 return AOP_WRITEPAGE_ACTIVATE;
1189} 1194}
1190 1195
1191/* 1196/*