btrfs: mark transaction id check as unlikely at btrfs_mark_buffer_dirty()
authorFilipe Manana <fdmanana@suse.com>
Tue, 12 Sep 2023 12:04:31 +0000 (13:04 +0100)
committerDavid Sterba <dsterba@suse.com>
Thu, 12 Oct 2023 14:44:07 +0000 (16:44 +0200)
At btrfs_mark_buffer_dirty(), having a transaction id mismatch is never
expected to happen and it usually means there's a bug or some memory
corruption due to a bitflip for example. So mark the condition as unlikely
to optimize code generation as well as to make it obvious for human
readers that it is a very unexpected condition.

Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/disk-io.c

index d906368..163f37a 100644 (file)
@@ -4403,7 +4403,7 @@ void btrfs_mark_buffer_dirty(struct btrfs_trans_handle *trans,
        /* This is an active transaction (its state < TRANS_STATE_UNBLOCKED). */
        ASSERT(trans->transid == fs_info->generation);
        btrfs_assert_tree_write_locked(buf);
-       if (transid != fs_info->generation) {
+       if (unlikely(transid != fs_info->generation)) {
                btrfs_abort_transaction(trans, -EUCLEAN);
                btrfs_crit(fs_info,
 "dirty buffer transid mismatch, logical %llu found transid %llu running transid %llu",