Btrfs: remove the time check in btrfs_commit_transaction()
We checked the commit time to avoid committing the transaction frequently, but it is unnecessary because: - It made the transaction commit spend more time, and delayed the operation of the external writers(TRANS_START/TRANS_USERSPACE). - Except the space that we have to commit transaction, such as snapshot creation, btrfs doesn't commit the transaction on its own initiative. Signed-off-by: Miao Xie <miaox@cn.fujitsu.com> Signed-off-by: Josef Bacik <jbacik@fusionio.com>
This commit is contained in:
Родитель
3f1e3fa65c
Коммит
581227d0d2
|
@ -1566,10 +1566,7 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans,
|
|||
{
|
||||
struct btrfs_transaction *cur_trans = trans->transaction;
|
||||
struct btrfs_transaction *prev_trans = NULL;
|
||||
DEFINE_WAIT(wait);
|
||||
int ret;
|
||||
int should_grow = 0;
|
||||
unsigned long now = get_seconds();
|
||||
|
||||
ret = btrfs_run_ordered_operations(trans, root, 0);
|
||||
if (ret) {
|
||||
|
@ -1660,28 +1657,14 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans,
|
|||
if (ret)
|
||||
goto cleanup_transaction;
|
||||
|
||||
if (!btrfs_test_opt(root, SSD) &&
|
||||
(now < cur_trans->start_time || now - cur_trans->start_time < 1))
|
||||
should_grow = 1;
|
||||
ret = btrfs_flush_all_pending_stuffs(trans, root);
|
||||
if (ret)
|
||||
goto cleanup_transaction;
|
||||
|
||||
do {
|
||||
WARN_ON(cur_trans != trans->transaction);
|
||||
|
||||
ret = btrfs_flush_all_pending_stuffs(trans, root);
|
||||
if (ret)
|
||||
goto cleanup_transaction;
|
||||
|
||||
prepare_to_wait(&cur_trans->writer_wait, &wait,
|
||||
TASK_UNINTERRUPTIBLE);
|
||||
|
||||
if (extwriter_counter_read(cur_trans) > 0)
|
||||
schedule();
|
||||
else if (should_grow)
|
||||
schedule_timeout(1);
|
||||
|
||||
finish_wait(&cur_trans->writer_wait, &wait);
|
||||
} while (extwriter_counter_read(cur_trans) > 0);
|
||||
wait_event(cur_trans->writer_wait,
|
||||
extwriter_counter_read(cur_trans) == 0);
|
||||
|
||||
/* some pending stuffs might be added after the previous flush. */
|
||||
ret = btrfs_flush_all_pending_stuffs(trans, root);
|
||||
if (ret)
|
||||
goto cleanup_transaction;
|
||||
|
|
Загрузка…
Ссылка в новой задаче