Lines Matching refs:ordered

320 void btrfs_mark_ordered_extent_error(struct btrfs_ordered_extent *ordered)  in btrfs_mark_ordered_extent_error()  argument
322 if (!test_and_set_bit(BTRFS_ORDERED_IOERR, &ordered->flags)) in btrfs_mark_ordered_extent_error()
323 mapping_set_error(ordered->inode->vfs_inode.i_mapping, -EIO); in btrfs_mark_ordered_extent_error()
334 static bool can_finish_ordered_extent(struct btrfs_ordered_extent *ordered, in can_finish_ordered_extent() argument
338 struct btrfs_inode *inode = ordered->inode; in can_finish_ordered_extent()
360 if (WARN_ON_ONCE(len > ordered->bytes_left)) { in can_finish_ordered_extent()
364 ordered->file_offset, ordered->num_bytes, in can_finish_ordered_extent()
365 len, ordered->bytes_left); in can_finish_ordered_extent()
366 ordered->bytes_left = 0; in can_finish_ordered_extent()
368 ordered->bytes_left -= len; in can_finish_ordered_extent()
372 set_bit(BTRFS_ORDERED_IOERR, &ordered->flags); in can_finish_ordered_extent()
374 if (ordered->bytes_left) in can_finish_ordered_extent()
381 set_bit(BTRFS_ORDERED_IO_DONE, &ordered->flags); in can_finish_ordered_extent()
382 cond_wake_up(&ordered->wait); in can_finish_ordered_extent()
383 refcount_inc(&ordered->refs); in can_finish_ordered_extent()
384 trace_btrfs_ordered_extent_mark_finished(inode, ordered); in can_finish_ordered_extent()
388 static void btrfs_queue_ordered_fn(struct btrfs_ordered_extent *ordered) in btrfs_queue_ordered_fn() argument
390 struct btrfs_inode *inode = ordered->inode; in btrfs_queue_ordered_fn()
395 btrfs_init_work(&ordered->work, finish_ordered_fn, NULL); in btrfs_queue_ordered_fn()
396 btrfs_queue_work(wq, &ordered->work); in btrfs_queue_ordered_fn()
399 void btrfs_finish_ordered_extent(struct btrfs_ordered_extent *ordered, in btrfs_finish_ordered_extent() argument
403 struct btrfs_inode *inode = ordered->inode; in btrfs_finish_ordered_extent()
410 ret = can_finish_ordered_extent(ordered, folio, file_offset, len, in btrfs_finish_ordered_extent()
442 if (!uptodate && !test_bit(BTRFS_ORDERED_NOCOW, &ordered->flags)) in btrfs_finish_ordered_extent()
446 btrfs_queue_ordered_fn(ordered); in btrfs_finish_ordered_extent()
729 struct btrfs_ordered_extent *ordered; in btrfs_run_ordered_extent_work() local
731 ordered = container_of(work, struct btrfs_ordered_extent, flush_work); in btrfs_run_ordered_extent_work()
732 btrfs_start_ordered_extent(ordered); in btrfs_run_ordered_extent_work()
733 complete(&ordered->completion); in btrfs_run_ordered_extent_work()
747 struct btrfs_ordered_extent *ordered, *next; in btrfs_wait_ordered_extents() local
765 ordered = list_first_entry(&splice, struct btrfs_ordered_extent, in btrfs_wait_ordered_extents()
768 if (range_end <= ordered->disk_bytenr || in btrfs_wait_ordered_extents()
769 ordered->disk_bytenr + ordered->disk_num_bytes <= range_start) { in btrfs_wait_ordered_extents()
770 list_move_tail(&ordered->root_extent_list, &skipped); in btrfs_wait_ordered_extents()
775 list_move_tail(&ordered->root_extent_list, in btrfs_wait_ordered_extents()
777 refcount_inc(&ordered->refs); in btrfs_wait_ordered_extents()
780 btrfs_init_work(&ordered->flush_work, in btrfs_wait_ordered_extents()
782 list_add_tail(&ordered->work_list, &works); in btrfs_wait_ordered_extents()
783 btrfs_queue_work(fs_info->flush_workers, &ordered->flush_work); in btrfs_wait_ordered_extents()
795 list_for_each_entry_safe(ordered, next, &works, work_list) { in btrfs_wait_ordered_extents()
796 list_del_init(&ordered->work_list); in btrfs_wait_ordered_extents()
797 wait_for_completion(&ordered->completion); in btrfs_wait_ordered_extents()
798 btrfs_put_ordered_extent(ordered); in btrfs_wait_ordered_extents()
885 struct btrfs_ordered_extent *ordered; in btrfs_wait_ordered_range() local
913 ordered = btrfs_lookup_first_ordered_extent(inode, end); in btrfs_wait_ordered_range()
914 if (!ordered) in btrfs_wait_ordered_range()
916 if (ordered->file_offset > orig_end) { in btrfs_wait_ordered_range()
917 btrfs_put_ordered_extent(ordered); in btrfs_wait_ordered_range()
920 if (ordered->file_offset + ordered->num_bytes <= start) { in btrfs_wait_ordered_range()
921 btrfs_put_ordered_extent(ordered); in btrfs_wait_ordered_range()
924 btrfs_start_ordered_extent(ordered); in btrfs_wait_ordered_range()
925 end = ordered->file_offset; in btrfs_wait_ordered_range()
931 if (test_bit(BTRFS_ORDERED_IOERR, &ordered->flags)) in btrfs_wait_ordered_range()
933 btrfs_put_ordered_extent(ordered); in btrfs_wait_ordered_range()
1022 struct btrfs_ordered_extent *ordered; in btrfs_get_ordered_extents_for_logging() local
1024 ordered = rb_entry(n, struct btrfs_ordered_extent, rb_node); in btrfs_get_ordered_extents_for_logging()
1026 if (test_bit(BTRFS_ORDERED_LOGGED, &ordered->flags)) in btrfs_get_ordered_extents_for_logging()
1029 ASSERT(list_empty(&ordered->log_list)); in btrfs_get_ordered_extents_for_logging()
1030 list_add_tail(&ordered->log_list, list); in btrfs_get_ordered_extents_for_logging()
1031 refcount_inc(&ordered->refs); in btrfs_get_ordered_extents_for_logging()
1032 trace_btrfs_ordered_extent_lookup_for_logging(inode, ordered); in btrfs_get_ordered_extents_for_logging()
1155 struct btrfs_ordered_extent *ordered; in btrfs_lock_and_flush_ordered_range() local
1164 ordered = btrfs_lookup_ordered_range(inode, start, in btrfs_lock_and_flush_ordered_range()
1166 if (!ordered) { in btrfs_lock_and_flush_ordered_range()
1177 btrfs_start_ordered_extent(ordered); in btrfs_lock_and_flush_ordered_range()
1178 btrfs_put_ordered_extent(ordered); in btrfs_lock_and_flush_ordered_range()
1192 struct btrfs_ordered_extent *ordered; in btrfs_try_lock_ordered_range() local
1197 ordered = btrfs_lookup_ordered_range(inode, start, end - start + 1); in btrfs_try_lock_ordered_range()
1198 if (!ordered) in btrfs_try_lock_ordered_range()
1201 btrfs_put_ordered_extent(ordered); in btrfs_try_lock_ordered_range()
1209 struct btrfs_ordered_extent *ordered, u64 len) in btrfs_split_ordered_extent() argument
1211 struct btrfs_inode *inode = ordered->inode; in btrfs_split_ordered_extent()
1214 u64 file_offset = ordered->file_offset; in btrfs_split_ordered_extent()
1215 u64 disk_bytenr = ordered->disk_bytenr; in btrfs_split_ordered_extent()
1216 unsigned long flags = ordered->flags; in btrfs_split_ordered_extent()
1222 trace_btrfs_ordered_extent_split(inode, ordered); in btrfs_split_ordered_extent()
1230 if (WARN_ON_ONCE(len >= ordered->num_bytes)) in btrfs_split_ordered_extent()
1233 if (ordered->bytes_left) { in btrfs_split_ordered_extent()
1235 if (WARN_ON_ONCE(ordered->bytes_left != ordered->disk_num_bytes)) in btrfs_split_ordered_extent()
1239 if (WARN_ON_ONCE(ordered->disk_num_bytes != ordered->num_bytes)) in btrfs_split_ordered_extent()
1243 len, 0, flags, ordered->compress_type); in btrfs_split_ordered_extent()
1276 ordered->file_offset += len; in btrfs_split_ordered_extent()
1277 ordered->disk_bytenr += len; in btrfs_split_ordered_extent()
1278 ordered->num_bytes -= len; in btrfs_split_ordered_extent()
1279 ordered->disk_num_bytes -= len; in btrfs_split_ordered_extent()
1280 ordered->ram_bytes -= len; in btrfs_split_ordered_extent()
1282 if (test_bit(BTRFS_ORDERED_IO_DONE, &ordered->flags)) { in btrfs_split_ordered_extent()
1283 ASSERT(ordered->bytes_left == 0); in btrfs_split_ordered_extent()
1286 ordered->bytes_left -= len; in btrfs_split_ordered_extent()
1289 if (test_bit(BTRFS_ORDERED_TRUNCATED, &ordered->flags)) { in btrfs_split_ordered_extent()
1290 if (ordered->truncated_len > len) { in btrfs_split_ordered_extent()
1291 ordered->truncated_len -= len; in btrfs_split_ordered_extent()
1293 new->truncated_len = ordered->truncated_len; in btrfs_split_ordered_extent()
1294 ordered->truncated_len = 0; in btrfs_split_ordered_extent()
1298 list_for_each_entry_safe(sum, tmpsum, &ordered->list, list) { in btrfs_split_ordered_extent()