btrfs: remove FLUSH_DELAYED_REFS from data ENOSPC flushing
Since we unconditionally commit the transaction now we no longer need to run the delayed refs to make sure our total_bytes_pinned value is uptodate, we can simply commit the transaction. Remove this stage from the data flushing list. Reviewed-by: Nikolay Borisov <nborisov@suse.com> Signed-off-by: Josef Bacik <josef@toxicpanda.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
Родитель
c416a30cdd
Коммит
0480855392
|
@ -1080,21 +1080,6 @@ static void btrfs_preempt_reclaim_metadata_space(struct work_struct *work)
|
||||||
* immediately re-usable, it comes in the form of a delayed ref, which must be
|
* immediately re-usable, it comes in the form of a delayed ref, which must be
|
||||||
* run and then the transaction must be committed.
|
* run and then the transaction must be committed.
|
||||||
*
|
*
|
||||||
* FLUSH_DELAYED_REFS
|
|
||||||
* The above two cases generate delayed refs that will affect
|
|
||||||
* ->total_bytes_pinned. However this counter can be inconsistent with
|
|
||||||
* reality if there are outstanding delayed refs. This is because we adjust
|
|
||||||
* the counter based solely on the current set of delayed refs and disregard
|
|
||||||
* any on-disk state which might include more refs. So for example, if we
|
|
||||||
* have an extent with 2 references, but we only drop 1, we'll see that there
|
|
||||||
* is a negative delayed ref count for the extent and assume that the space
|
|
||||||
* will be freed, and thus increase ->total_bytes_pinned.
|
|
||||||
*
|
|
||||||
* Running the delayed refs gives us the actual real view of what will be
|
|
||||||
* freed at the transaction commit time. This stage will not actually free
|
|
||||||
* space for us, it just makes sure that may_commit_transaction() has all of
|
|
||||||
* the information it needs to make the right decision.
|
|
||||||
*
|
|
||||||
* COMMIT_TRANS
|
* COMMIT_TRANS
|
||||||
* This is where we reclaim all of the pinned space generated by running the
|
* This is where we reclaim all of the pinned space generated by running the
|
||||||
* iputs
|
* iputs
|
||||||
|
@ -1107,7 +1092,6 @@ static void btrfs_preempt_reclaim_metadata_space(struct work_struct *work)
|
||||||
static const enum btrfs_flush_state data_flush_states[] = {
|
static const enum btrfs_flush_state data_flush_states[] = {
|
||||||
FLUSH_DELALLOC_WAIT,
|
FLUSH_DELALLOC_WAIT,
|
||||||
RUN_DELAYED_IPUTS,
|
RUN_DELAYED_IPUTS,
|
||||||
FLUSH_DELAYED_REFS,
|
|
||||||
COMMIT_TRANS,
|
COMMIT_TRANS,
|
||||||
ALLOC_CHUNK_FORCE,
|
ALLOC_CHUNK_FORCE,
|
||||||
};
|
};
|
||||||
|
|
Загрузка…
Ссылка в новой задаче