Btrfs: Add ACCESS_ONCE() to transaction->abort accesses

We may access and update transaction->aborted on the different CPUs without
lock, so we need ACCESS_ONCE() wrapper to prevent the compiler from creating
unsolicited accesses and make sure we can get the right value.

Signed-off-by: Miao Xie <miaox@cn.fujitsu.com>
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
This commit is contained in:
Miao Xie 2013-01-15 06:27:25 +00:00 committed by Josef Bacik
parent e58dd74bcc
commit 8d25a086eb
2 changed files with 3 additions and 2 deletions

View File

@ -267,7 +267,7 @@ void __btrfs_abort_transaction(struct btrfs_trans_handle *trans,
function, line, errstr); function, line, errstr);
return; return;
} }
trans->transaction->aborted = errno; ACCESS_ONCE(trans->transaction->aborted) = errno;
__btrfs_std_error(root->fs_info, function, line, errno, NULL); __btrfs_std_error(root->fs_info, function, line, errno, NULL);
} }
/* /*

View File

@ -1468,7 +1468,8 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans,
goto cleanup_transaction; goto cleanup_transaction;
} }
if (cur_trans->aborted) { /* Stop the commit early if ->aborted is set */
if (unlikely(ACCESS_ONCE(cur_trans->aborted))) {
ret = cur_trans->aborted; ret = cur_trans->aborted;
goto cleanup_transaction; goto cleanup_transaction;
} }