Btrfs: remove the time check in btrfs_commit_transaction()
authorMiao Xie <miaox@cn.fujitsu.com>
Wed, 15 May 2013 07:48:30 +0000 (07:48 +0000)
committerJosef Bacik <jbacik@fusionio.com>
Fri, 14 Jun 2013 15:29:50 +0000 (11:29 -0400)
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>
fs/btrfs/transaction.c

index 75e7b15..5e75ff4 100644 (file)
@@ -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;
-
-       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);
+       ret = btrfs_flush_all_pending_stuffs(trans, root);
+       if (ret)
+               goto cleanup_transaction;
 
-               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;