Lines Matching refs:fio

3292 static int __get_segment_type_2(struct f2fs_io_info *fio)
3294 if (fio->type == DATA)
3300 static int __get_segment_type_4(struct f2fs_io_info *fio)
3302 if (fio->type == DATA) {
3303 struct inode *inode = fio->page->mapping->host;
3310 if (IS_DNODE(fio->page) && is_cold_node(fio->page))
3334 static int __get_segment_type_6(struct f2fs_io_info *fio)
3336 if (fio->type == DATA) {
3337 struct inode *inode = fio->page->mapping->host;
3343 if (page_private_gcing(fio->page)) {
3344 if (fio->sbi->am.atgc_enabled &&
3345 (fio->io_type == FS_DATA_IO) &&
3346 (fio->sbi->gc_mode != GC_URGENT_HIGH))
3354 type = __get_age_segment_type(inode, fio->page->index);
3364 if (IS_DNODE(fio->page))
3365 return is_cold_node(fio->page) ? CURSEG_WARM_NODE :
3371 static int __get_segment_type(struct f2fs_io_info *fio)
3375 switch (F2FS_OPTION(fio->sbi).active_logs) {
3377 type = __get_segment_type_2(fio);
3380 type = __get_segment_type_4(fio);
3383 type = __get_segment_type_6(fio);
3386 f2fs_bug_on(fio->sbi, true);
3390 fio->temp = HOT;
3392 fio->temp = WARM;
3394 fio->temp = COLD;
3414 struct f2fs_io_info *fio)
3503 if (fio) {
3507 fio->retry = 0;
3509 INIT_LIST_HEAD(&fio->list);
3510 fio->in_list = 1;
3511 io = sbi->write_io[fio->type] + fio->temp;
3513 list_add_tail(&fio->list, &io->io_list);
3549 static void do_write_page(struct f2fs_summary *sum, struct f2fs_io_info *fio)
3551 int type = __get_segment_type(fio);
3552 bool keep_order = (f2fs_lfs_mode(fio->sbi) && type == CURSEG_COLD_DATA);
3555 f2fs_down_read(&fio->sbi->io_order_lock);
3557 f2fs_allocate_data_block(fio->sbi, fio->page, fio->old_blkaddr,
3558 &fio->new_blkaddr, sum, type, fio);
3559 if (GET_SEGNO(fio->sbi, fio->old_blkaddr) != NULL_SEGNO)
3560 f2fs_invalidate_internal_cache(fio->sbi, fio->old_blkaddr);
3563 f2fs_submit_page_write(fio);
3564 if (fio->retry) {
3565 fio->old_blkaddr = fio->new_blkaddr;
3569 f2fs_update_device_state(fio->sbi, fio->ino, fio->new_blkaddr, 1);
3572 f2fs_up_read(&fio->sbi->io_order_lock);
3578 struct f2fs_io_info fio = {
3592 fio.op_flags &= ~REQ_META;
3595 f2fs_submit_page_write(&fio);
3601 void f2fs_do_write_node_page(unsigned int nid, struct f2fs_io_info *fio)
3606 do_write_page(&sum, fio);
3608 f2fs_update_iostat(fio->sbi, NULL, fio->io_type, F2FS_BLKSIZE);
3612 struct f2fs_io_info *fio)
3614 struct f2fs_sb_info *sbi = fio->sbi;
3618 if (fio->io_type == FS_DATA_IO || fio->io_type == FS_CP_DATA_IO)
3620 set_summary(&sum, dn->nid, dn->ofs_in_node, fio->version);
3621 do_write_page(&sum, fio);
3622 f2fs_update_data_blkaddr(dn, fio->new_blkaddr);
3624 f2fs_update_iostat(sbi, dn->inode, fio->io_type, F2FS_BLKSIZE);
3627 int f2fs_inplace_write_data(struct f2fs_io_info *fio)
3630 struct f2fs_sb_info *sbi = fio->sbi;
3633 fio->new_blkaddr = fio->old_blkaddr;
3635 __get_segment_type(fio);
3637 segno = GET_SEGNO(sbi, fio->new_blkaddr);
3653 if (fio->post_read)
3654 f2fs_truncate_meta_inode_pages(sbi, fio->new_blkaddr, 1);
3656 stat_inc_inplace_blocks(fio->sbi);
3658 if (fio->bio && !IS_F2FS_IPU_NOCACHE(sbi))
3659 err = f2fs_merge_page_bio(fio);
3661 err = f2fs_submit_page_bio(fio);
3663 f2fs_update_device_state(fio->sbi, fio->ino,
3664 fio->new_blkaddr, 1);
3665 f2fs_update_iostat(fio->sbi, fio->page->mapping->host,
3666 fio->io_type, F2FS_BLKSIZE);
3671 if (fio->bio && *(fio->bio)) {
3672 struct bio *bio = *(fio->bio);
3676 *(fio->bio) = NULL;