Lines Matching defs:io_end
56 struct ext4_io_end_vec *ext4_alloc_io_end_vec(ext4_io_end_t *io_end)
64 list_add_tail(&io_end_vec->list, &io_end->list_vec);
68 static void ext4_free_io_end_vec(ext4_io_end_t *io_end)
72 if (list_empty(&io_end->list_vec))
74 list_for_each_entry_safe(io_end_vec, tmp, &io_end->list_vec, list) {
80 struct ext4_io_end_vec *ext4_last_io_end_vec(ext4_io_end_t *io_end)
82 BUG_ON(list_empty(&io_end->list_vec));
83 return list_last_entry(&io_end->list_vec, struct ext4_io_end_vec, list);
153 static void ext4_release_io_end(ext4_io_end_t *io_end)
157 BUG_ON(!list_empty(&io_end->list));
158 BUG_ON(io_end->flag & EXT4_IO_END_UNWRITTEN);
159 WARN_ON(io_end->handle);
161 for (bio = io_end->bio; bio; bio = next_bio) {
166 ext4_free_io_end_vec(io_end);
167 kmem_cache_free(io_end_cachep, io_end);
178 static int ext4_end_io_end(ext4_io_end_t *io_end)
180 struct inode *inode = io_end->inode;
181 handle_t *handle = io_end->handle;
184 ext4_debug("ext4_end_io_nolock: io_end 0x%p from inode %lu,list->next 0x%p,"
186 io_end, inode->i_ino, io_end->list.next, io_end->list.prev);
188 io_end->handle = NULL; /* Following call will use up the handle */
189 ret = ext4_convert_unwritten_io_end_vec(handle, io_end);
196 ext4_clear_io_unwritten_flag(io_end);
197 ext4_release_io_end(io_end);
205 ext4_io_end_t *io_end, *io_end0, *io_end1;
211 list_for_each_entry(io_end, head, list) {
212 cur = &io_end->list;
219 io_end, inode->i_ino, io_end0, io_end1);
224 /* Add the io_end to per-inode completed end_io list. */
225 static void ext4_add_complete_io(ext4_io_end_t *io_end)
227 struct ext4_inode_info *ei = EXT4_I(io_end->inode);
228 struct ext4_sb_info *sbi = EXT4_SB(io_end->inode->i_sb);
233 WARN_ON(!(io_end->flag & EXT4_IO_END_UNWRITTEN));
234 WARN_ON(!io_end->handle && sbi->s_journal);
239 list_add_tail(&io_end->list, &ei->i_rsv_conversion_list);
246 ext4_io_end_t *io_end;
258 io_end = list_entry(unwritten.next, ext4_io_end_t, list);
259 BUG_ON(!(io_end->flag & EXT4_IO_END_UNWRITTEN));
260 list_del_init(&io_end->list);
262 err = ext4_end_io_end(io_end);
281 ext4_io_end_t *io_end = kmem_cache_zalloc(io_end_cachep, flags);
283 if (io_end) {
284 io_end->inode = inode;
285 INIT_LIST_HEAD(&io_end->list);
286 INIT_LIST_HEAD(&io_end->list_vec);
287 atomic_set(&io_end->count, 1);
289 return io_end;
292 void ext4_put_io_end_defer(ext4_io_end_t *io_end)
294 if (atomic_dec_and_test(&io_end->count)) {
295 if (!(io_end->flag & EXT4_IO_END_UNWRITTEN) ||
296 list_empty(&io_end->list_vec)) {
297 ext4_release_io_end(io_end);
300 ext4_add_complete_io(io_end);
304 int ext4_put_io_end(ext4_io_end_t *io_end)
308 if (atomic_dec_and_test(&io_end->count)) {
309 if (io_end->flag & EXT4_IO_END_UNWRITTEN) {
310 err = ext4_convert_unwritten_io_end_vec(io_end->handle,
311 io_end);
312 io_end->handle = NULL;
313 ext4_clear_io_unwritten_flag(io_end);
315 ext4_release_io_end(io_end);
320 ext4_io_end_t *ext4_get_io_end(ext4_io_end_t *io_end)
322 atomic_inc(&io_end->count);
323 return io_end;
329 ext4_io_end_t *io_end = bio->bi_private;
333 if (WARN_ONCE(!io_end, "io_end is NULL: %s: sector %Lu len %u err %d\n",
345 struct inode *inode = io_end->inode;
356 if (io_end->flag & EXT4_IO_END_UNWRITTEN) {
358 * Link bio into list hanging from io_end. We have to do it
362 bio->bi_private = xchg(&io_end->bio, bio);
363 ext4_put_io_end_defer(io_end);
366 * Drop io_end reference early. Inode can get freed once
369 ext4_put_io_end_defer(io_end);
382 io->io_bio->bi_write_hint = io->io_end->inode->i_write_hint;
394 io->io_end = NULL;
411 bio->bi_private = ext4_get_io_end(io->io_end);