diff options
-rw-r--r-- | fs/f2fs/checkpoint.c | 11 | ||||
-rw-r--r-- | fs/f2fs/data.c | 6 | ||||
-rw-r--r-- | fs/f2fs/node.c | 6 |
3 files changed, 16 insertions, 7 deletions
diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c index 1f52b70ff9d1..aef32f36e2f3 100644 --- a/fs/f2fs/checkpoint.c +++ b/fs/f2fs/checkpoint.c | |||
@@ -190,12 +190,9 @@ static int f2fs_write_meta_pages(struct address_space *mapping, | |||
190 | int nrpages = nr_pages_to_skip(sbi, META); | 190 | int nrpages = nr_pages_to_skip(sbi, META); |
191 | long written; | 191 | long written; |
192 | 192 | ||
193 | if (wbc->for_kupdate) | ||
194 | return 0; | ||
195 | |||
196 | /* collect a number of dirty meta pages and write together */ | 193 | /* collect a number of dirty meta pages and write together */ |
197 | if (get_pages(sbi, F2FS_DIRTY_META) < nrpages) | 194 | if (wbc->for_kupdate || get_pages(sbi, F2FS_DIRTY_META) < nrpages) |
198 | return 0; | 195 | goto skip_write; |
199 | 196 | ||
200 | /* if mounting is failed, skip writing node pages */ | 197 | /* if mounting is failed, skip writing node pages */ |
201 | mutex_lock(&sbi->cp_mutex); | 198 | mutex_lock(&sbi->cp_mutex); |
@@ -203,6 +200,10 @@ static int f2fs_write_meta_pages(struct address_space *mapping, | |||
203 | mutex_unlock(&sbi->cp_mutex); | 200 | mutex_unlock(&sbi->cp_mutex); |
204 | wbc->nr_to_write -= written; | 201 | wbc->nr_to_write -= written; |
205 | return 0; | 202 | return 0; |
203 | |||
204 | skip_write: | ||
205 | wbc->pages_skipped += get_pages(sbi, F2FS_DIRTY_META); | ||
206 | return 0; | ||
206 | } | 207 | } |
207 | 208 | ||
208 | long sync_meta_pages(struct f2fs_sb_info *sbi, enum page_type type, | 209 | long sync_meta_pages(struct f2fs_sb_info *sbi, enum page_type type, |
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index e3b7cfa17b99..3bc380942068 100644 --- a/fs/f2fs/data.c +++ b/fs/f2fs/data.c | |||
@@ -870,7 +870,7 @@ static int f2fs_write_data_pages(struct address_space *mapping, | |||
870 | 870 | ||
871 | if (S_ISDIR(inode->i_mode) && wbc->sync_mode == WB_SYNC_NONE && | 871 | if (S_ISDIR(inode->i_mode) && wbc->sync_mode == WB_SYNC_NONE && |
872 | get_dirty_dents(inode) < nr_pages_to_skip(sbi, DATA)) | 872 | get_dirty_dents(inode) < nr_pages_to_skip(sbi, DATA)) |
873 | return 0; | 873 | goto skip_write; |
874 | 874 | ||
875 | if (wbc->nr_to_write < MAX_DESIRED_PAGES_WP) { | 875 | if (wbc->nr_to_write < MAX_DESIRED_PAGES_WP) { |
876 | desired_nrtw = MAX_DESIRED_PAGES_WP; | 876 | desired_nrtw = MAX_DESIRED_PAGES_WP; |
@@ -892,6 +892,10 @@ static int f2fs_write_data_pages(struct address_space *mapping, | |||
892 | 892 | ||
893 | wbc->nr_to_write -= excess_nrtw; | 893 | wbc->nr_to_write -= excess_nrtw; |
894 | return ret; | 894 | return ret; |
895 | |||
896 | skip_write: | ||
897 | wbc->pages_skipped += get_dirty_dents(inode); | ||
898 | return 0; | ||
895 | } | 899 | } |
896 | 900 | ||
897 | static int f2fs_write_begin(struct file *file, struct address_space *mapping, | 901 | static int f2fs_write_begin(struct file *file, struct address_space *mapping, |
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c index cb514f1896ab..7cc146bcbfed 100644 --- a/fs/f2fs/node.c +++ b/fs/f2fs/node.c | |||
@@ -1209,7 +1209,7 @@ static int f2fs_write_node_pages(struct address_space *mapping, | |||
1209 | 1209 | ||
1210 | /* collect a number of dirty node pages and write together */ | 1210 | /* collect a number of dirty node pages and write together */ |
1211 | if (get_pages(sbi, F2FS_DIRTY_NODES) < nr_pages_to_skip(sbi, NODE)) | 1211 | if (get_pages(sbi, F2FS_DIRTY_NODES) < nr_pages_to_skip(sbi, NODE)) |
1212 | return 0; | 1212 | goto skip_write; |
1213 | 1213 | ||
1214 | /* if mounting is failed, skip writing node pages */ | 1214 | /* if mounting is failed, skip writing node pages */ |
1215 | wbc->nr_to_write = 3 * max_hw_blocks(sbi); | 1215 | wbc->nr_to_write = 3 * max_hw_blocks(sbi); |
@@ -1218,6 +1218,10 @@ static int f2fs_write_node_pages(struct address_space *mapping, | |||
1218 | wbc->nr_to_write = nr_to_write - (3 * max_hw_blocks(sbi) - | 1218 | wbc->nr_to_write = nr_to_write - (3 * max_hw_blocks(sbi) - |
1219 | wbc->nr_to_write); | 1219 | wbc->nr_to_write); |
1220 | return 0; | 1220 | return 0; |
1221 | |||
1222 | skip_write: | ||
1223 | wbc->pages_skipped += get_pages(sbi, F2FS_DIRTY_NODES); | ||
1224 | return 0; | ||
1221 | } | 1225 | } |
1222 | 1226 | ||
1223 | static int f2fs_set_node_page_dirty(struct page *page) | 1227 | static int f2fs_set_node_page_dirty(struct page *page) |