Lines Matching refs:io_end
125 static void ext4_release_io_end(ext4_io_end_t *io_end) in ext4_release_io_end() argument
129 BUG_ON(!list_empty(&io_end->list)); in ext4_release_io_end()
130 BUG_ON(io_end->flag & EXT4_IO_END_UNWRITTEN); in ext4_release_io_end()
131 WARN_ON(io_end->handle); in ext4_release_io_end()
133 if (atomic_dec_and_test(&EXT4_I(io_end->inode)->i_ioend_count)) in ext4_release_io_end()
134 wake_up_all(ext4_ioend_wq(io_end->inode)); in ext4_release_io_end()
136 for (bio = io_end->bio; bio; bio = next_bio) { in ext4_release_io_end()
141 kmem_cache_free(io_end_cachep, io_end); in ext4_release_io_end()
144 static void ext4_clear_io_unwritten_flag(ext4_io_end_t *io_end) in ext4_clear_io_unwritten_flag() argument
146 struct inode *inode = io_end->inode; in ext4_clear_io_unwritten_flag()
148 io_end->flag &= ~EXT4_IO_END_UNWRITTEN; in ext4_clear_io_unwritten_flag()
212 static void ext4_add_complete_io(ext4_io_end_t *io_end) in ext4_add_complete_io() argument
214 struct ext4_inode_info *ei = EXT4_I(io_end->inode); in ext4_add_complete_io()
215 struct ext4_sb_info *sbi = EXT4_SB(io_end->inode->i_sb); in ext4_add_complete_io()
220 WARN_ON(!(io_end->flag & EXT4_IO_END_UNWRITTEN)); in ext4_add_complete_io()
221 WARN_ON(!io_end->handle && sbi->s_journal); in ext4_add_complete_io()
226 list_add_tail(&io_end->list, &ei->i_rsv_conversion_list); in ext4_add_complete_io()
278 void ext4_put_io_end_defer(ext4_io_end_t *io_end) in ext4_put_io_end_defer() argument
280 if (atomic_dec_and_test(&io_end->count)) { in ext4_put_io_end_defer()
281 if (!(io_end->flag & EXT4_IO_END_UNWRITTEN) || !io_end->size) { in ext4_put_io_end_defer()
282 ext4_release_io_end(io_end); in ext4_put_io_end_defer()
285 ext4_add_complete_io(io_end); in ext4_put_io_end_defer()
289 int ext4_put_io_end(ext4_io_end_t *io_end) in ext4_put_io_end() argument
293 if (atomic_dec_and_test(&io_end->count)) { in ext4_put_io_end()
294 if (io_end->flag & EXT4_IO_END_UNWRITTEN) { in ext4_put_io_end()
295 err = ext4_convert_unwritten_extents(io_end->handle, in ext4_put_io_end()
296 io_end->inode, io_end->offset, in ext4_put_io_end()
297 io_end->size); in ext4_put_io_end()
298 io_end->handle = NULL; in ext4_put_io_end()
299 ext4_clear_io_unwritten_flag(io_end); in ext4_put_io_end()
301 ext4_release_io_end(io_end); in ext4_put_io_end()
306 ext4_io_end_t *ext4_get_io_end(ext4_io_end_t *io_end) in ext4_get_io_end() argument
308 atomic_inc(&io_end->count); in ext4_get_io_end()
309 return io_end; in ext4_get_io_end()
315 ext4_io_end_t *io_end = bio->bi_private; in ext4_end_bio() local
318 BUG_ON(!io_end); in ext4_end_bio()
324 struct inode *inode = io_end->inode; in ext4_end_bio()
329 (unsigned long long) io_end->offset, in ext4_end_bio()
330 (long) io_end->size, in ext4_end_bio()
336 if (io_end->flag & EXT4_IO_END_UNWRITTEN) { in ext4_end_bio()
342 bio->bi_private = xchg(&io_end->bio, bio); in ext4_end_bio()
343 ext4_put_io_end_defer(io_end); in ext4_end_bio()
349 ext4_put_io_end_defer(io_end); in ext4_end_bio()
373 io->io_end = NULL; in ext4_io_submit_init()
388 bio->bi_private = ext4_get_io_end(io->io_end); in io_submit_init_bio()