checkpoint.c (60b99b486b568c13cbb7caa83cf8a12af7665f1e) checkpoint.c (6066d8cdb6dd0fd51ccd96027f6ae8e6b3b5adff)
1/*
2 * fs/f2fs/checkpoint.c
3 *
4 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 * http://www.samsung.com/
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as

--- 243 unchanged lines hidden (view full) ---

252 wbc->pages_skipped += get_pages(sbi, F2FS_DIRTY_META);
253 return 0;
254}
255
256long sync_meta_pages(struct f2fs_sb_info *sbi, enum page_type type,
257 long nr_to_write)
258{
259 struct address_space *mapping = META_MAPPING(sbi);
1/*
2 * fs/f2fs/checkpoint.c
3 *
4 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 * http://www.samsung.com/
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as

--- 243 unchanged lines hidden (view full) ---

252 wbc->pages_skipped += get_pages(sbi, F2FS_DIRTY_META);
253 return 0;
254}
255
256long sync_meta_pages(struct f2fs_sb_info *sbi, enum page_type type,
257 long nr_to_write)
258{
259 struct address_space *mapping = META_MAPPING(sbi);
260 pgoff_t index = 0, end = LONG_MAX;
260 pgoff_t index = 0, end = LONG_MAX, prev = LONG_MAX;
261 struct pagevec pvec;
262 long nwritten = 0;
263 struct writeback_control wbc = {
264 .for_reclaim = 0,
265 };
266
267 pagevec_init(&pvec, 0);
268
269 while (index <= end) {
270 int i, nr_pages;
271 nr_pages = pagevec_lookup_tag(&pvec, mapping, &index,
272 PAGECACHE_TAG_DIRTY,
273 min(end - index, (pgoff_t)PAGEVEC_SIZE-1) + 1);
274 if (unlikely(nr_pages == 0))
275 break;
276
277 for (i = 0; i < nr_pages; i++) {
278 struct page *page = pvec.pages[i];
279
261 struct pagevec pvec;
262 long nwritten = 0;
263 struct writeback_control wbc = {
264 .for_reclaim = 0,
265 };
266
267 pagevec_init(&pvec, 0);
268
269 while (index <= end) {
270 int i, nr_pages;
271 nr_pages = pagevec_lookup_tag(&pvec, mapping, &index,
272 PAGECACHE_TAG_DIRTY,
273 min(end - index, (pgoff_t)PAGEVEC_SIZE-1) + 1);
274 if (unlikely(nr_pages == 0))
275 break;
276
277 for (i = 0; i < nr_pages; i++) {
278 struct page *page = pvec.pages[i];
279
280 if (prev == LONG_MAX)
281 prev = page->index - 1;
282 if (nr_to_write != LONG_MAX && page->index != prev + 1) {
283 pagevec_release(&pvec);
284 goto stop;
285 }
286
280 lock_page(page);
281
282 if (unlikely(page->mapping != mapping)) {
283continue_unlock:
284 unlock_page(page);
285 continue;
286 }
287 if (!PageDirty(page)) {

--- 4 unchanged lines hidden (view full) ---

292 if (!clear_page_dirty_for_io(page))
293 goto continue_unlock;
294
295 if (mapping->a_ops->writepage(page, &wbc)) {
296 unlock_page(page);
297 break;
298 }
299 nwritten++;
287 lock_page(page);
288
289 if (unlikely(page->mapping != mapping)) {
290continue_unlock:
291 unlock_page(page);
292 continue;
293 }
294 if (!PageDirty(page)) {

--- 4 unchanged lines hidden (view full) ---

299 if (!clear_page_dirty_for_io(page))
300 goto continue_unlock;
301
302 if (mapping->a_ops->writepage(page, &wbc)) {
303 unlock_page(page);
304 break;
305 }
306 nwritten++;
307 prev = page->index;
300 if (unlikely(nwritten >= nr_to_write))
301 break;
302 }
303 pagevec_release(&pvec);
304 cond_resched();
305 }
308 if (unlikely(nwritten >= nr_to_write))
309 break;
310 }
311 pagevec_release(&pvec);
312 cond_resched();
313 }
306
314stop:
307 if (nwritten)
308 f2fs_submit_merged_bio(sbi, type, WRITE);
309
310 return nwritten;
311}
312
313static int f2fs_set_meta_page_dirty(struct page *page)
314{

--- 848 unchanged lines hidden ---
315 if (nwritten)
316 f2fs_submit_merged_bio(sbi, type, WRITE);
317
318 return nwritten;
319}
320
321static int f2fs_set_meta_page_dirty(struct page *page)
322{

--- 848 unchanged lines hidden ---