segment.c (19f106bc03e62739961249a29916ee3602ac3de9) | segment.c (4375a33664de17af9032b5f491a49bd256670927) |
---|---|
1/* 2 * fs/f2fs/segment.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 --- 205 unchanged lines hidden (view full) --- 214 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); 215 struct f2fs_inode_info *fi = F2FS_I(inode); 216 struct inmem_pages *cur, *tmp; 217 bool submit_bio = false; 218 struct f2fs_io_info fio = { 219 .sbi = sbi, 220 .type = DATA, 221 .rw = WRITE_SYNC | REQ_PRIO, | 1/* 2 * fs/f2fs/segment.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 --- 205 unchanged lines hidden (view full) --- 214 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); 215 struct f2fs_inode_info *fi = F2FS_I(inode); 216 struct inmem_pages *cur, *tmp; 217 bool submit_bio = false; 218 struct f2fs_io_info fio = { 219 .sbi = sbi, 220 .type = DATA, 221 .rw = WRITE_SYNC | REQ_PRIO, |
222 .encrypted_page = NULL, |
|
222 }; 223 224 /* 225 * The abort is true only when f2fs_evict_inode is called. 226 * Basically, the f2fs_evict_inode doesn't produce any data writes, so 227 * that we don't need to call f2fs_balance_fs. 228 * Otherwise, f2fs_gc in f2fs_balance_fs can wait forever until this 229 * inode becomes free by iget_locked in f2fs_iget. --- 996 unchanged lines hidden (view full) --- 1226void write_meta_page(struct f2fs_sb_info *sbi, struct page *page) 1227{ 1228 struct f2fs_io_info fio = { 1229 .sbi = sbi, 1230 .type = META, 1231 .rw = WRITE_SYNC | REQ_META | REQ_PRIO, 1232 .blk_addr = page->index, 1233 .page = page, | 223 }; 224 225 /* 226 * The abort is true only when f2fs_evict_inode is called. 227 * Basically, the f2fs_evict_inode doesn't produce any data writes, so 228 * that we don't need to call f2fs_balance_fs. 229 * Otherwise, f2fs_gc in f2fs_balance_fs can wait forever until this 230 * inode becomes free by iget_locked in f2fs_iget. --- 996 unchanged lines hidden (view full) --- 1227void write_meta_page(struct f2fs_sb_info *sbi, struct page *page) 1228{ 1229 struct f2fs_io_info fio = { 1230 .sbi = sbi, 1231 .type = META, 1232 .rw = WRITE_SYNC | REQ_META | REQ_PRIO, 1233 .blk_addr = page->index, 1234 .page = page, |
1235 .encrypted_page = NULL, |
|
1234 }; 1235 1236 set_page_writeback(page); 1237 f2fs_submit_page_mbio(&fio); 1238} 1239 1240void write_node_page(unsigned int nid, struct f2fs_io_info *fio) 1241{ --- 83 unchanged lines hidden (view full) --- 1325} 1326 1327static inline bool is_merged_page(struct f2fs_sb_info *sbi, 1328 struct page *page, enum page_type type) 1329{ 1330 enum page_type btype = PAGE_TYPE_OF_BIO(type); 1331 struct f2fs_bio_info *io = &sbi->write_io[btype]; 1332 struct bio_vec *bvec; | 1236 }; 1237 1238 set_page_writeback(page); 1239 f2fs_submit_page_mbio(&fio); 1240} 1241 1242void write_node_page(unsigned int nid, struct f2fs_io_info *fio) 1243{ --- 83 unchanged lines hidden (view full) --- 1327} 1328 1329static inline bool is_merged_page(struct f2fs_sb_info *sbi, 1330 struct page *page, enum page_type type) 1331{ 1332 enum page_type btype = PAGE_TYPE_OF_BIO(type); 1333 struct f2fs_bio_info *io = &sbi->write_io[btype]; 1334 struct bio_vec *bvec; |
1335 struct page *target; |
|
1333 int i; 1334 1335 down_read(&io->io_rwsem); | 1336 int i; 1337 1338 down_read(&io->io_rwsem); |
1336 if (!io->bio) 1337 goto out; | 1339 if (!io->bio) { 1340 up_read(&io->io_rwsem); 1341 return false; 1342 } |
1338 1339 bio_for_each_segment_all(bvec, io->bio, i) { | 1343 1344 bio_for_each_segment_all(bvec, io->bio, i) { |
1340 if (page == bvec->bv_page) { | 1345 1346 if (bvec->bv_page->mapping) { 1347 target = bvec->bv_page; 1348 } else { 1349 struct f2fs_crypto_ctx *ctx; 1350 1351 /* encrypted page */ 1352 ctx = (struct f2fs_crypto_ctx *)page_private( 1353 bvec->bv_page); 1354 target = ctx->control_page; 1355 } 1356 1357 if (page == target) { |
1341 up_read(&io->io_rwsem); 1342 return true; 1343 } 1344 } 1345 | 1358 up_read(&io->io_rwsem); 1359 return true; 1360 } 1361 } 1362 |
1346out: | |
1347 up_read(&io->io_rwsem); 1348 return false; 1349} 1350 1351void f2fs_wait_on_page_writeback(struct page *page, 1352 enum page_type type) 1353{ 1354 if (PageWriteback(page)) { --- 985 unchanged lines hidden --- | 1363 up_read(&io->io_rwsem); 1364 return false; 1365} 1366 1367void f2fs_wait_on_page_writeback(struct page *page, 1368 enum page_type type) 1369{ 1370 if (PageWriteback(page)) { --- 985 unchanged lines hidden --- |