Lines Matching refs:ioend
1064 iomap_finish_ioend(struct iomap_ioend *ioend, int error) in iomap_finish_ioend() argument
1066 struct inode *inode = ioend->io_inode; in iomap_finish_ioend()
1067 struct bio *bio = &ioend->io_inline_bio; in iomap_finish_ioend()
1068 struct bio *last = ioend->io_bio, *next; in iomap_finish_ioend()
1070 loff_t offset = ioend->io_offset; in iomap_finish_ioend()
1073 for (bio = &ioend->io_inline_bio; bio; bio = next) { in iomap_finish_ioend()
1102 iomap_finish_ioends(struct iomap_ioend *ioend, int error) in iomap_finish_ioends() argument
1106 list_replace_init(&ioend->io_list, &tmp); in iomap_finish_ioends()
1107 iomap_finish_ioend(ioend, error); in iomap_finish_ioends()
1110 ioend = list_first_entry(&tmp, struct iomap_ioend, io_list); in iomap_finish_ioends()
1111 list_del_init(&ioend->io_list); in iomap_finish_ioends()
1112 iomap_finish_ioend(ioend, error); in iomap_finish_ioends()
1121 iomap_ioend_can_merge(struct iomap_ioend *ioend, struct iomap_ioend *next) in iomap_ioend_can_merge() argument
1123 if (ioend->io_bio->bi_status != next->io_bio->bi_status) in iomap_ioend_can_merge()
1125 if ((ioend->io_flags & IOMAP_F_SHARED) ^ in iomap_ioend_can_merge()
1128 if ((ioend->io_type == IOMAP_UNWRITTEN) ^ in iomap_ioend_can_merge()
1131 if (ioend->io_offset + ioend->io_size != next->io_offset) in iomap_ioend_can_merge()
1137 iomap_ioend_try_merge(struct iomap_ioend *ioend, struct list_head *more_ioends, in iomap_ioend_try_merge() argument
1138 void (*merge_private)(struct iomap_ioend *ioend, in iomap_ioend_try_merge() argument
1143 INIT_LIST_HEAD(&ioend->io_list); in iomap_ioend_try_merge()
1147 if (!iomap_ioend_can_merge(ioend, next)) in iomap_ioend_try_merge()
1149 list_move_tail(&next->io_list, &ioend->io_list); in iomap_ioend_try_merge()
1150 ioend->io_size += next->io_size; in iomap_ioend_try_merge()
1152 merge_private(ioend, next); in iomap_ioend_try_merge()
1179 struct iomap_ioend *ioend = bio->bi_private; in iomap_writepage_end_bio() local
1181 iomap_finish_ioend(ioend, blk_status_to_errno(bio->bi_status)); in iomap_writepage_end_bio()
1193 iomap_submit_ioend(struct iomap_writepage_ctx *wpc, struct iomap_ioend *ioend, in iomap_submit_ioend() argument
1196 ioend->io_bio->bi_private = ioend; in iomap_submit_ioend()
1197 ioend->io_bio->bi_end_io = iomap_writepage_end_bio; in iomap_submit_ioend()
1200 error = wpc->ops->prepare_ioend(ioend, error); in iomap_submit_ioend()
1208 ioend->io_bio->bi_status = errno_to_blk_status(error); in iomap_submit_ioend()
1209 bio_endio(ioend->io_bio); in iomap_submit_ioend()
1213 submit_bio(ioend->io_bio); in iomap_submit_ioend()
1221 struct iomap_ioend *ioend; in iomap_alloc_ioend() local
1231 ioend = container_of(bio, struct iomap_ioend, io_inline_bio); in iomap_alloc_ioend()
1232 INIT_LIST_HEAD(&ioend->io_list); in iomap_alloc_ioend()
1233 ioend->io_type = wpc->iomap.type; in iomap_alloc_ioend()
1234 ioend->io_flags = wpc->iomap.flags; in iomap_alloc_ioend()
1235 ioend->io_inode = inode; in iomap_alloc_ioend()
1236 ioend->io_size = 0; in iomap_alloc_ioend()
1237 ioend->io_offset = offset; in iomap_alloc_ioend()
1238 ioend->io_private = NULL; in iomap_alloc_ioend()
1239 ioend->io_bio = bio; in iomap_alloc_ioend()
1240 return ioend; in iomap_alloc_ioend()
1272 (wpc->ioend->io_flags & IOMAP_F_SHARED)) in iomap_can_add_to_ioend()
1274 if (wpc->iomap.type != wpc->ioend->io_type) in iomap_can_add_to_ioend()
1276 if (offset != wpc->ioend->io_offset + wpc->ioend->io_size) in iomap_can_add_to_ioend()
1278 if (sector != bio_end_sector(wpc->ioend->io_bio)) in iomap_can_add_to_ioend()
1297 if (!wpc->ioend || !iomap_can_add_to_ioend(wpc, offset, sector)) { in iomap_add_to_ioend()
1298 if (wpc->ioend) in iomap_add_to_ioend()
1299 list_add(&wpc->ioend->io_list, iolist); in iomap_add_to_ioend()
1300 wpc->ioend = iomap_alloc_ioend(inode, wpc, offset, sector, wbc); in iomap_add_to_ioend()
1303 merged = __bio_try_merge_page(wpc->ioend->io_bio, page, len, poff, in iomap_add_to_ioend()
1309 if (bio_full(wpc->ioend->io_bio, len)) { in iomap_add_to_ioend()
1310 wpc->ioend->io_bio = in iomap_add_to_ioend()
1311 iomap_chain_bio(wpc->ioend->io_bio); in iomap_add_to_ioend()
1313 bio_add_page(wpc->ioend->io_bio, page, len, poff); in iomap_add_to_ioend()
1316 wpc->ioend->io_size += len; in iomap_add_to_ioend()
1342 struct iomap_ioend *ioend, *next; in iomap_writepage_map() local
1374 WARN_ON_ONCE(!wpc->ioend && !list_empty(&submit_list)); in iomap_writepage_map()
1409 list_for_each_entry_safe(ioend, next, &submit_list, io_list) { in iomap_writepage_map()
1412 list_del_init(&ioend->io_list); in iomap_writepage_map()
1413 error2 = iomap_submit_ioend(wpc, ioend, error); in iomap_writepage_map()
1551 if (!wpc->ioend) in iomap_writepage()
1553 return iomap_submit_ioend(wpc, wpc->ioend, ret); in iomap_writepage()
1566 if (!wpc->ioend) in iomap_writepages()
1568 return iomap_submit_ioend(wpc, wpc->ioend, ret); in iomap_writepages()