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 --- |