• Home
  • Raw
  • Download

Lines Matching full:ordered

124  * look find the first ordered struct that has this offset, otherwise
167 * The ordered extent has reserved qgroup space, release now in alloc_ordered_extent()
235 "inconsistency in ordered tree at offset %llu", in insert_ordered_extent()
253 * Add an ordered extent to the per-inode tree.
266 * tree is given a single reference on the ordered extent that was inserted, and
269 * Return: the new ordered extent or error pointer.
291 * when an ordered extent is finished. If the list covers more than one
292 * ordered extent, it is split across multiples.
313 static bool can_finish_ordered_extent(struct btrfs_ordered_extent *ordered, in can_finish_ordered_extent() argument
317 struct btrfs_inode *inode = BTRFS_I(ordered->inode); in can_finish_ordered_extent()
328 * Ordered (Private2) bit indicates whether we still have in can_finish_ordered_extent()
329 * pending io unfinished for the ordered extent. in can_finish_ordered_extent()
339 if (WARN_ON_ONCE(len > ordered->bytes_left)) { in can_finish_ordered_extent()
341 "bad ordered extent accounting, root=%llu ino=%llu OE offset=%llu OE len=%llu to_dec=%llu left=%llu… in can_finish_ordered_extent()
343 ordered->file_offset, ordered->num_bytes, in can_finish_ordered_extent()
344 len, ordered->bytes_left); in can_finish_ordered_extent()
345 ordered->bytes_left = 0; in can_finish_ordered_extent()
347 ordered->bytes_left -= len; in can_finish_ordered_extent()
351 set_bit(BTRFS_ORDERED_IOERR, &ordered->flags); in can_finish_ordered_extent()
353 if (ordered->bytes_left) in can_finish_ordered_extent()
357 * All the IO of the ordered extent is finished, we need to queue in can_finish_ordered_extent()
360 set_bit(BTRFS_ORDERED_IO_DONE, &ordered->flags); in can_finish_ordered_extent()
361 cond_wake_up(&ordered->wait); in can_finish_ordered_extent()
362 refcount_inc(&ordered->refs); in can_finish_ordered_extent()
363 trace_btrfs_ordered_extent_mark_finished(inode, ordered); in can_finish_ordered_extent()
367 static void btrfs_queue_ordered_fn(struct btrfs_ordered_extent *ordered) in btrfs_queue_ordered_fn() argument
369 struct btrfs_inode *inode = BTRFS_I(ordered->inode); in btrfs_queue_ordered_fn()
374 btrfs_init_work(&ordered->work, finish_ordered_fn, NULL, NULL); in btrfs_queue_ordered_fn()
375 btrfs_queue_work(wq, &ordered->work); in btrfs_queue_ordered_fn()
378 bool btrfs_finish_ordered_extent(struct btrfs_ordered_extent *ordered, in btrfs_finish_ordered_extent() argument
382 struct btrfs_inode *inode = BTRFS_I(ordered->inode); in btrfs_finish_ordered_extent()
389 ret = can_finish_ordered_extent(ordered, page, file_offset, len, uptodate); in btrfs_finish_ordered_extent()
393 btrfs_queue_ordered_fn(ordered); in btrfs_finish_ordered_extent()
398 * Mark all ordered extents io inside the specified range finished.
402 * updated to indicate whether the pending ordered io is finished.
407 * This function is called for endio, thus the range must have ordered
431 /* No ordered extents at all */ in btrfs_mark_ordered_io_finished()
444 /* No more ordered extents, exit */ in btrfs_mark_ordered_io_finished()
450 /* Go to next ordered extent and continue */ in btrfs_mark_ordered_io_finished()
465 * Now we are definitely inside one ordered extent. in btrfs_mark_ordered_io_finished()
487 * Finish IO for one ordered extent across a given range. The range can only
488 * contain one ordered extent.
490 * @cached: The cached ordered extent. If not NULL, we can skip the tree
491 * search and use the ordered extent directly.
492 * Will be also used to store the finished ordered extent.
496 * Return true if the ordered extent is finished in the range, and update
500 * NOTE: The range can NOT cross multiple ordered extents.
501 * Thus caller should ensure the range doesn't cross ordered extents.
530 "bad ordered accounting left %llu size %llu", in btrfs_dec_test_ordered_pending()
555 * used to drop a reference on an ordered extent. This will free
582 * remove an ordered extent from the tree. No references are dropped
596 * If this is a free space inode the thread has not acquired the ordered in btrfs_remove_ordered_extent()
681 struct btrfs_ordered_extent *ordered; in btrfs_run_ordered_extent_work() local
683 ordered = container_of(work, struct btrfs_ordered_extent, flush_work); in btrfs_run_ordered_extent_work()
684 btrfs_start_ordered_extent(ordered); in btrfs_run_ordered_extent_work()
685 complete(&ordered->completion); in btrfs_run_ordered_extent_work()
689 * wait for all the ordered extents in a root. This is done when balancing
699 struct btrfs_ordered_extent *ordered, *next; in btrfs_wait_ordered_extents() local
707 ordered = list_first_entry(&splice, struct btrfs_ordered_extent, in btrfs_wait_ordered_extents()
710 if (range_end <= ordered->disk_bytenr || in btrfs_wait_ordered_extents()
711 ordered->disk_bytenr + ordered->disk_num_bytes <= range_start) { in btrfs_wait_ordered_extents()
712 list_move_tail(&ordered->root_extent_list, &skipped); in btrfs_wait_ordered_extents()
717 list_move_tail(&ordered->root_extent_list, in btrfs_wait_ordered_extents()
719 refcount_inc(&ordered->refs); in btrfs_wait_ordered_extents()
722 btrfs_init_work(&ordered->flush_work, in btrfs_wait_ordered_extents()
724 list_add_tail(&ordered->work_list, &works); in btrfs_wait_ordered_extents()
725 btrfs_queue_work(fs_info->flush_workers, &ordered->flush_work); in btrfs_wait_ordered_extents()
737 list_for_each_entry_safe(ordered, next, &works, work_list) { in btrfs_wait_ordered_extents()
738 list_del_init(&ordered->work_list); in btrfs_wait_ordered_extents()
739 wait_for_completion(&ordered->completion); in btrfs_wait_ordered_extents()
740 btrfs_put_ordered_extent(ordered); in btrfs_wait_ordered_extents()
782 * Start IO and wait for a given ordered extent to finish.
797 * If this is a free space inode do not take the ordered extents lockdep in btrfs_start_ordered_extent()
816 * Used to wait on ordered extents across a large range of bytes.
824 struct btrfs_ordered_extent *ordered; in btrfs_wait_ordered_range() local
843 * for any ordered extents that haven't completed yet. This is to make in btrfs_wait_ordered_range()
845 * before the ordered extents complete - to avoid failures (-EEXIST) in btrfs_wait_ordered_range()
846 * when adding the new ordered extents to the ordered tree. in btrfs_wait_ordered_range()
852 ordered = btrfs_lookup_first_ordered_extent(BTRFS_I(inode), end); in btrfs_wait_ordered_range()
853 if (!ordered) in btrfs_wait_ordered_range()
855 if (ordered->file_offset > orig_end) { in btrfs_wait_ordered_range()
856 btrfs_put_ordered_extent(ordered); in btrfs_wait_ordered_range()
859 if (ordered->file_offset + ordered->num_bytes <= start) { in btrfs_wait_ordered_range()
860 btrfs_put_ordered_extent(ordered); in btrfs_wait_ordered_range()
863 btrfs_start_ordered_extent(ordered); in btrfs_wait_ordered_range()
864 end = ordered->file_offset; in btrfs_wait_ordered_range()
866 * If the ordered extent had an error save the error but don't in btrfs_wait_ordered_range()
867 * exit without waiting first for all other ordered extents in in btrfs_wait_ordered_range()
870 if (test_bit(BTRFS_ORDERED_IOERR, &ordered->flags)) in btrfs_wait_ordered_range()
872 btrfs_put_ordered_extent(ordered); in btrfs_wait_ordered_range()
881 * find an ordered extent corresponding to file_offset. return NULL if
910 /* Since the DIO code tries to lock a wide area we need to look for any ordered
953 * Adds all ordered extents to the given list. The list ends up sorted by the
954 * file_offset of the ordered extents.
966 struct btrfs_ordered_extent *ordered; in btrfs_get_ordered_extents_for_logging() local
968 ordered = rb_entry(n, struct btrfs_ordered_extent, rb_node); in btrfs_get_ordered_extents_for_logging()
970 if (test_bit(BTRFS_ORDERED_LOGGED, &ordered->flags)) in btrfs_get_ordered_extents_for_logging()
973 ASSERT(list_empty(&ordered->log_list)); in btrfs_get_ordered_extents_for_logging()
974 list_add_tail(&ordered->log_list, list); in btrfs_get_ordered_extents_for_logging()
975 refcount_inc(&ordered->refs); in btrfs_get_ordered_extents_for_logging()
976 trace_btrfs_ordered_extent_lookup_for_logging(inode, ordered); in btrfs_get_ordered_extents_for_logging()
1007 * Lookup the first ordered extent that overlaps the range
1011 * that this one won't return any ordered extent that does not overlap the range.
1013 * ensures the first ordered extent gets returned.
1030 * And __tree_search() can't return the adjacent ordered extents in btrfs_lookup_first_ordered_range()
1042 * Direct hit, got an ordered extent that starts at in btrfs_lookup_first_ordered_range()
1072 /* No ordered extent in the range */ in btrfs_lookup_first_ordered_range()
1085 * Lock the passed range and ensures all pending ordered extents in it are run
1088 * @inode: Inode whose ordered tree is to be searched
1102 struct btrfs_ordered_extent *ordered; in btrfs_lock_and_flush_ordered_range() local
1111 ordered = btrfs_lookup_ordered_range(inode, start, in btrfs_lock_and_flush_ordered_range()
1113 if (!ordered) { in btrfs_lock_and_flush_ordered_range()
1124 btrfs_start_ordered_extent(ordered); in btrfs_lock_and_flush_ordered_range()
1125 btrfs_put_ordered_extent(ordered); in btrfs_lock_and_flush_ordered_range()
1130 * Lock the passed range and ensure all pending ordered extents in it are run
1139 struct btrfs_ordered_extent *ordered; in btrfs_try_lock_ordered_range() local
1144 ordered = btrfs_lookup_ordered_range(inode, start, end - start + 1); in btrfs_try_lock_ordered_range()
1145 if (!ordered) in btrfs_try_lock_ordered_range()
1148 btrfs_put_ordered_extent(ordered); in btrfs_try_lock_ordered_range()
1154 /* Split out a new ordered extent for this first @len bytes of @ordered. */
1156 struct btrfs_ordered_extent *ordered, u64 len) in btrfs_split_ordered_extent() argument
1158 struct btrfs_inode *inode = BTRFS_I(ordered->inode); in btrfs_split_ordered_extent()
1162 u64 file_offset = ordered->file_offset; in btrfs_split_ordered_extent()
1163 u64 disk_bytenr = ordered->disk_bytenr; in btrfs_split_ordered_extent()
1164 unsigned long flags = ordered->flags; in btrfs_split_ordered_extent()
1170 trace_btrfs_ordered_extent_split(inode, ordered); in btrfs_split_ordered_extent()
1175 * The entire bio must be covered by the ordered extent, but we can't in btrfs_split_ordered_extent()
1178 if (WARN_ON_ONCE(len >= ordered->num_bytes)) in btrfs_split_ordered_extent()
1181 * If our ordered extent had an error there's no point in continuing. in btrfs_split_ordered_extent()
1184 * iterates over all existing ordered extents and sets the flag in btrfs_split_ordered_extent()
1192 /* We cannot split partially completed ordered extents. */ in btrfs_split_ordered_extent()
1193 if (ordered->bytes_left) { in btrfs_split_ordered_extent()
1195 if (WARN_ON_ONCE(ordered->bytes_left != ordered->disk_num_bytes)) in btrfs_split_ordered_extent()
1198 /* We cannot split a compressed ordered extent. */ in btrfs_split_ordered_extent()
1199 if (WARN_ON_ONCE(ordered->disk_num_bytes != ordered->num_bytes)) in btrfs_split_ordered_extent()
1203 len, 0, flags, ordered->compress_type); in btrfs_split_ordered_extent()
1213 node = &ordered->rb_node; in btrfs_split_ordered_extent()
1219 ordered->file_offset += len; in btrfs_split_ordered_extent()
1220 ordered->disk_bytenr += len; in btrfs_split_ordered_extent()
1221 ordered->num_bytes -= len; in btrfs_split_ordered_extent()
1222 ordered->disk_num_bytes -= len; in btrfs_split_ordered_extent()
1223 ordered->ram_bytes -= len; in btrfs_split_ordered_extent()
1225 if (test_bit(BTRFS_ORDERED_IO_DONE, &ordered->flags)) { in btrfs_split_ordered_extent()
1226 ASSERT(ordered->bytes_left == 0); in btrfs_split_ordered_extent()
1229 ordered->bytes_left -= len; in btrfs_split_ordered_extent()
1232 if (test_bit(BTRFS_ORDERED_TRUNCATED, &ordered->flags)) { in btrfs_split_ordered_extent()
1233 if (ordered->truncated_len > len) { in btrfs_split_ordered_extent()
1234 ordered->truncated_len -= len; in btrfs_split_ordered_extent()
1236 new->truncated_len = ordered->truncated_len; in btrfs_split_ordered_extent()
1237 ordered->truncated_len = 0; in btrfs_split_ordered_extent()
1241 list_for_each_entry_safe(sum, tmpsum, &ordered->list, list) { in btrfs_split_ordered_extent()
1249 node = tree_insert(&tree->tree, ordered->file_offset, &ordered->rb_node); in btrfs_split_ordered_extent()
1252 "zoned: inconsistency in ordered tree at offset %llu", in btrfs_split_ordered_extent()
1253 ordered->file_offset); in btrfs_split_ordered_extent()
1258 "zoned: inconsistency in ordered tree at offset %llu", in btrfs_split_ordered_extent()