mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 04:18:39 +08:00
Btrfs: add a flags field to btrfs_transaction
I want to set some per transaction flags, so instead of adding yet another int lets just convert the current two int indicators to flags and add a flags field for future use. Thanks, Signed-off-by: Josef Bacik <jbacik@fb.com> Signed-off-by: Chris Mason <clm@fb.com>
This commit is contained in:
parent
0b670dc44c
commit
3204d33cda
@ -4066,7 +4066,8 @@ commit_trans:
|
||||
if (IS_ERR(trans))
|
||||
return PTR_ERR(trans);
|
||||
if (have_pinned_space >= 0 ||
|
||||
trans->transaction->have_free_bgs ||
|
||||
test_bit(BTRFS_TRANS_HAVE_FREE_BGS,
|
||||
&trans->transaction->flags) ||
|
||||
need_commit > 0) {
|
||||
ret = btrfs_commit_transaction(trans, root);
|
||||
if (ret)
|
||||
@ -8938,7 +8939,7 @@ again:
|
||||
* back off and let this transaction commit
|
||||
*/
|
||||
mutex_lock(&root->fs_info->ro_block_group_mutex);
|
||||
if (trans->transaction->dirty_bg_run) {
|
||||
if (test_bit(BTRFS_TRANS_DIRTY_BG_RUN, &trans->transaction->flags)) {
|
||||
u64 transid = trans->transid;
|
||||
|
||||
mutex_unlock(&root->fs_info->ro_block_group_mutex);
|
||||
|
@ -239,10 +239,9 @@ loop:
|
||||
* commit the transaction.
|
||||
*/
|
||||
atomic_set(&cur_trans->use_count, 2);
|
||||
cur_trans->have_free_bgs = 0;
|
||||
atomic_set(&cur_trans->pending_ordered, 0);
|
||||
cur_trans->flags = 0;
|
||||
cur_trans->start_time = get_seconds();
|
||||
cur_trans->dirty_bg_run = 0;
|
||||
|
||||
memset(&cur_trans->delayed_refs, 0, sizeof(cur_trans->delayed_refs));
|
||||
|
||||
@ -1837,7 +1836,7 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans,
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (!cur_trans->dirty_bg_run) {
|
||||
if (!test_bit(BTRFS_TRANS_DIRTY_BG_RUN, &cur_trans->flags)) {
|
||||
int run_it = 0;
|
||||
|
||||
/* this mutex is also taken before trying to set
|
||||
@ -1846,18 +1845,17 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans,
|
||||
* after a extents from that block group have been
|
||||
* allocated for cache files. btrfs_set_block_group_ro
|
||||
* will wait for the transaction to commit if it
|
||||
* finds dirty_bg_run = 1
|
||||
* finds BTRFS_TRANS_DIRTY_BG_RUN set.
|
||||
*
|
||||
* The dirty_bg_run flag is also used to make sure only
|
||||
* one process starts all the block group IO. It wouldn't
|
||||
* The BTRFS_TRANS_DIRTY_BG_RUN flag is also used to make sure
|
||||
* only one process starts all the block group IO. It wouldn't
|
||||
* hurt to have more than one go through, but there's no
|
||||
* real advantage to it either.
|
||||
*/
|
||||
mutex_lock(&root->fs_info->ro_block_group_mutex);
|
||||
if (!cur_trans->dirty_bg_run) {
|
||||
if (!test_and_set_bit(BTRFS_TRANS_DIRTY_BG_RUN,
|
||||
&cur_trans->flags))
|
||||
run_it = 1;
|
||||
cur_trans->dirty_bg_run = 1;
|
||||
}
|
||||
mutex_unlock(&root->fs_info->ro_block_group_mutex);
|
||||
|
||||
if (run_it)
|
||||
@ -2127,7 +2125,7 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans,
|
||||
|
||||
btrfs_finish_extent_commit(trans, root);
|
||||
|
||||
if (cur_trans->have_free_bgs)
|
||||
if (test_bit(BTRFS_TRANS_HAVE_FREE_BGS, &cur_trans->flags))
|
||||
btrfs_clear_space_info_full(root->fs_info);
|
||||
|
||||
root->fs_info->last_trans_committed = cur_trans->transid;
|
||||
|
@ -32,6 +32,9 @@ enum btrfs_trans_state {
|
||||
TRANS_STATE_MAX = 6,
|
||||
};
|
||||
|
||||
#define BTRFS_TRANS_HAVE_FREE_BGS 0
|
||||
#define BTRFS_TRANS_DIRTY_BG_RUN 1
|
||||
|
||||
struct btrfs_transaction {
|
||||
u64 transid;
|
||||
/*
|
||||
@ -48,10 +51,7 @@ struct btrfs_transaction {
|
||||
atomic_t use_count;
|
||||
atomic_t pending_ordered;
|
||||
|
||||
/*
|
||||
* true if there is free bgs operations in this transaction
|
||||
*/
|
||||
int have_free_bgs;
|
||||
unsigned long flags;
|
||||
|
||||
/* Be protected by fs_info->trans_lock when we want to change it. */
|
||||
enum btrfs_trans_state state;
|
||||
@ -81,7 +81,6 @@ struct btrfs_transaction {
|
||||
spinlock_t dropped_roots_lock;
|
||||
struct btrfs_delayed_ref_root delayed_refs;
|
||||
int aborted;
|
||||
int dirty_bg_run;
|
||||
};
|
||||
|
||||
#define __TRANS_FREEZABLE (1U << 0)
|
||||
|
@ -1462,7 +1462,7 @@ again:
|
||||
btrfs_std_error(root->fs_info, ret,
|
||||
"Failed to remove dev extent item");
|
||||
} else {
|
||||
trans->transaction->have_free_bgs = 1;
|
||||
set_bit(BTRFS_TRANS_HAVE_FREE_BGS, &trans->transaction->flags);
|
||||
}
|
||||
out:
|
||||
btrfs_free_path(path);
|
||||
|
Loading…
Reference in New Issue
Block a user