Btrfs: use bit operation for ->fs_state
authorMiao Xie <miaox@cn.fujitsu.com>
Tue, 29 Jan 2013 10:14:48 +0000 (10:14 +0000)
committerJosef Bacik <jbacik@fusionio.com>
Wed, 20 Feb 2013 17:59:09 +0000 (12:59 -0500)
commit87533c475187c1420794a2e164bc67a7974f1327
tree699709da85c0a6c284cf37fe7026fbaf4768e6ab
parentde98ced9e743656d108de41841797def0f5cb951
Btrfs: use bit operation for ->fs_state

There is no lock to protect fs_info->fs_state, it will introduce
some problems, such as the value may be covered by the other task
when several tasks modify it. For example:
Task0 - CPU0 Task1 - CPU1
mov %fs_state rax
or $0x1 rax
mov %fs_state rax
or $0x2 rax
mov rax %fs_state
mov rax %fs_state
The expected value is 3, but in fact, it is 2.

Though this problem doesn't happen now (because there is only one
flag currently), the code is error prone, if we add other flags,
the above problem will happen to a certainty.

Now we use bit operation for it to fix the above problem.
In this way, we can make the code more robust and be easy to
add new flags.

Signed-off-by: Miao Xie <miaox@cn.fujitsu.com>
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
fs/btrfs/ctree.h
fs/btrfs/disk-io.c
fs/btrfs/file.c
fs/btrfs/scrub.c
fs/btrfs/super.c
fs/btrfs/transaction.c