Lines Matching refs:io_end

124 static void ext4_release_io_end(ext4_io_end_t *io_end)  in ext4_release_io_end()  argument
128 BUG_ON(!list_empty(&io_end->list)); in ext4_release_io_end()
129 BUG_ON(io_end->flag & EXT4_IO_END_UNWRITTEN); in ext4_release_io_end()
130 WARN_ON(io_end->handle); in ext4_release_io_end()
132 if (atomic_dec_and_test(&EXT4_I(io_end->inode)->i_ioend_count)) in ext4_release_io_end()
133 wake_up_all(ext4_ioend_wq(io_end->inode)); in ext4_release_io_end()
135 for (bio = io_end->bio; bio; bio = next_bio) { in ext4_release_io_end()
140 kmem_cache_free(io_end_cachep, io_end); in ext4_release_io_end()
143 static void ext4_clear_io_unwritten_flag(ext4_io_end_t *io_end) in ext4_clear_io_unwritten_flag() argument
145 struct inode *inode = io_end->inode; in ext4_clear_io_unwritten_flag()
147 io_end->flag &= ~EXT4_IO_END_UNWRITTEN; in ext4_clear_io_unwritten_flag()
211 static void ext4_add_complete_io(ext4_io_end_t *io_end) in ext4_add_complete_io() argument
213 struct ext4_inode_info *ei = EXT4_I(io_end->inode); in ext4_add_complete_io()
214 struct ext4_sb_info *sbi = EXT4_SB(io_end->inode->i_sb); in ext4_add_complete_io()
219 WARN_ON(!(io_end->flag & EXT4_IO_END_UNWRITTEN)); in ext4_add_complete_io()
220 WARN_ON(!io_end->handle && sbi->s_journal); in ext4_add_complete_io()
225 list_add_tail(&io_end->list, &ei->i_rsv_conversion_list); in ext4_add_complete_io()
277 void ext4_put_io_end_defer(ext4_io_end_t *io_end) in ext4_put_io_end_defer() argument
279 if (atomic_dec_and_test(&io_end->count)) { in ext4_put_io_end_defer()
280 if (!(io_end->flag & EXT4_IO_END_UNWRITTEN) || !io_end->size) { in ext4_put_io_end_defer()
281 ext4_release_io_end(io_end); in ext4_put_io_end_defer()
284 ext4_add_complete_io(io_end); in ext4_put_io_end_defer()
288 int ext4_put_io_end(ext4_io_end_t *io_end) in ext4_put_io_end() argument
292 if (atomic_dec_and_test(&io_end->count)) { in ext4_put_io_end()
293 if (io_end->flag & EXT4_IO_END_UNWRITTEN) { in ext4_put_io_end()
294 err = ext4_convert_unwritten_extents(io_end->handle, in ext4_put_io_end()
295 io_end->inode, io_end->offset, in ext4_put_io_end()
296 io_end->size); in ext4_put_io_end()
297 io_end->handle = NULL; in ext4_put_io_end()
298 ext4_clear_io_unwritten_flag(io_end); in ext4_put_io_end()
300 ext4_release_io_end(io_end); in ext4_put_io_end()
305 ext4_io_end_t *ext4_get_io_end(ext4_io_end_t *io_end) in ext4_get_io_end() argument
307 atomic_inc(&io_end->count); in ext4_get_io_end()
308 return io_end; in ext4_get_io_end()
314 ext4_io_end_t *io_end = bio->bi_private; in ext4_end_bio() local
317 BUG_ON(!io_end); in ext4_end_bio()
321 struct inode *inode = io_end->inode; in ext4_end_bio()
326 (unsigned long long) io_end->offset, in ext4_end_bio()
327 (long) io_end->size, in ext4_end_bio()
333 if (io_end->flag & EXT4_IO_END_UNWRITTEN) { in ext4_end_bio()
339 bio->bi_private = xchg(&io_end->bio, bio); in ext4_end_bio()
340 ext4_put_io_end_defer(io_end); in ext4_end_bio()
346 ext4_put_io_end_defer(io_end); in ext4_end_bio()
371 io->io_end = NULL; in ext4_io_submit_init()
386 bio->bi_private = ext4_get_io_end(io->io_end); in io_submit_init_bio()