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