checkpoint.c (bc0868c62bb13834b20a864f684cced1f84a2412) checkpoint.c (300e129c15f0ed2f94482900a4cb65b28eb09d94)
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

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

29/*
30 * We guarantee no failure on the returned page.
31 */
32struct page *grab_meta_page(struct f2fs_sb_info *sbi, pgoff_t index)
33{
34 struct address_space *mapping = META_MAPPING(sbi);
35 struct page *page = NULL;
36repeat:
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

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

29/*
30 * We guarantee no failure on the returned page.
31 */
32struct page *grab_meta_page(struct f2fs_sb_info *sbi, pgoff_t index)
33{
34 struct address_space *mapping = META_MAPPING(sbi);
35 struct page *page = NULL;
36repeat:
37 page = grab_cache_page(mapping, index);
37 page = f2fs_grab_cache_page(mapping, index, false);
38 if (!page) {
39 cond_resched();
40 goto repeat;
41 }
42 f2fs_wait_on_page_writeback(page, META, true);
43 SetPageUptodate(page);
44 return page;
45}

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

59 .old_blkaddr = index,
60 .new_blkaddr = index,
61 .encrypted_page = NULL,
62 };
63
64 if (unlikely(!is_meta))
65 fio.rw &= ~REQ_META;
66repeat:
38 if (!page) {
39 cond_resched();
40 goto repeat;
41 }
42 f2fs_wait_on_page_writeback(page, META, true);
43 SetPageUptodate(page);
44 return page;
45}

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

59 .old_blkaddr = index,
60 .new_blkaddr = index,
61 .encrypted_page = NULL,
62 };
63
64 if (unlikely(!is_meta))
65 fio.rw &= ~REQ_META;
66repeat:
67 page = grab_cache_page(mapping, index);
67 page = f2fs_grab_cache_page(mapping, index, false);
68 if (!page) {
69 cond_resched();
70 goto repeat;
71 }
72 if (PageUptodate(page))
73 goto out;
74
75 fio.page = page;

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

181 case META_CP:
182 case META_POR:
183 fio.new_blkaddr = blkno;
184 break;
185 default:
186 BUG();
187 }
188
68 if (!page) {
69 cond_resched();
70 goto repeat;
71 }
72 if (PageUptodate(page))
73 goto out;
74
75 fio.page = page;

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

181 case META_CP:
182 case META_POR:
183 fio.new_blkaddr = blkno;
184 break;
185 default:
186 BUG();
187 }
188
189 page = grab_cache_page(META_MAPPING(sbi), fio.new_blkaddr);
189 page = f2fs_grab_cache_page(META_MAPPING(sbi),
190 fio.new_blkaddr, false);
190 if (!page)
191 continue;
192 if (PageUptodate(page)) {
193 f2fs_put_page(page, 1);
194 continue;
195 }
196
197 fio.page = page;

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

206}
207
208void ra_meta_pages_cond(struct f2fs_sb_info *sbi, pgoff_t index)
209{
210 struct page *page;
211 bool readahead = false;
212
213 page = find_get_page(META_MAPPING(sbi), index);
191 if (!page)
192 continue;
193 if (PageUptodate(page)) {
194 f2fs_put_page(page, 1);
195 continue;
196 }
197
198 fio.page = page;

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

207}
208
209void ra_meta_pages_cond(struct f2fs_sb_info *sbi, pgoff_t index)
210{
211 struct page *page;
212 bool readahead = false;
213
214 page = find_get_page(META_MAPPING(sbi), index);
214 if (!page || (page && !PageUptodate(page)))
215 if (!page || !PageUptodate(page))
215 readahead = true;
216 f2fs_put_page(page, 0);
217
218 if (readahead)
219 ra_meta_pages(sbi, index, MAX_BIO_BLOCKS(sbi), META_POR, true);
220}
221
222static int f2fs_write_meta_page(struct page *page,

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

887 * POR: we should ensure that there are no dirty node pages
888 * until finishing nat/sit flush.
889 */
890retry_flush_nodes:
891 down_write(&sbi->node_write);
892
893 if (get_pages(sbi, F2FS_DIRTY_NODES)) {
894 up_write(&sbi->node_write);
216 readahead = true;
217 f2fs_put_page(page, 0);
218
219 if (readahead)
220 ra_meta_pages(sbi, index, MAX_BIO_BLOCKS(sbi), META_POR, true);
221}
222
223static int f2fs_write_meta_page(struct page *page,

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

888 * POR: we should ensure that there are no dirty node pages
889 * until finishing nat/sit flush.
890 */
891retry_flush_nodes:
892 down_write(&sbi->node_write);
893
894 if (get_pages(sbi, F2FS_DIRTY_NODES)) {
895 up_write(&sbi->node_write);
895 err = sync_node_pages(sbi, 0, &wbc);
896 err = sync_node_pages(sbi, &wbc);
896 if (err) {
897 f2fs_unlock_all(sbi);
898 goto out;
899 }
900 goto retry_flush_nodes;
901 }
902out:
903 blk_finish_plug(&plug);

--- 310 unchanged lines hidden ---
897 if (err) {
898 f2fs_unlock_all(sbi);
899 goto out;
900 }
901 goto retry_flush_nodes;
902 }
903out:
904 blk_finish_plug(&plug);

--- 310 unchanged lines hidden ---