btrfs: remove redundant time check in transaction kthread loop
authorNikolay Borisov <nborisov@suse.com>
Thu, 8 Oct 2020 12:24:28 +0000 (15:24 +0300)
committerDavid Sterba <dsterba@suse.com>
Tue, 8 Dec 2020 14:53:19 +0000 (15:53 +0100)
The value obtained from ktime_get_seconds() is guaranteed to be
monotonically increasing since it's taken from CLOCK_MONOTONIC. As
transaction_kthread obtains a reference to the currently running
transaction under holding btrfs_fs_info::trans_lock it's guaranteed to:

a) see an initialized 'cur', whose start_time is guaranteed to be smaller
   than 'now'

or

b) not obtain a 'cur' and simply go to sleep.

Given this remove the unnecessary check, if it sees
now < cur->start_time this would imply there are far greater problems on
the machine.

Signed-off-by: Nikolay Borisov <nborisov@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/disk-io.c

index d052c20..3f2c5c0 100644 (file)
@@ -1792,8 +1792,7 @@ static int transaction_kthread(void *arg)
 
                now = ktime_get_seconds();
                if (cur->state < TRANS_STATE_COMMIT_START &&
-                   (now < cur->start_time ||
-                    now - cur->start_time < fs_info->commit_interval)) {
+                   now - cur->start_time < fs_info->commit_interval) {
                        spin_unlock(&fs_info->trans_lock);
                        delay = msecs_to_jiffies(5000);
                        goto sleep;