mirror of
https://github.com/torvalds/linux.git
synced 2024-12-27 21:33:00 +00:00
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:
parent
e58dd74bcc
commit
8d25a086eb
@ -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);
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user