linux_dsm_epyc7002/fs
Miao Xie c018daecea Btrfs: protect fs_info->alloc_start
fs_info->alloc_start is a 64bits variant, can be accessed by
multi-task, but it is not protected strictly, it can be changed
while we are accessing it. On 32bit machine, we will get wrong
value because we access it by two instructions.(In fact, it is
also possible that the same problem happens on the 64bit machine,
because the compiler may split the 64bit operation into two 32bit
operation.)

For example:
Assuming -> alloc_start is 0x0000 0000 0001 0000 at the beginning,
then we remount and set ->alloc_start to 0x0000 0100 0000 0000.
	Task0 			Task1
				load high 32 bits
	set high 32 bits
	set low 32 bits
				load low 32 bits

Task1 will get 0.

This patch fixes this problem by using two locks to protect it
	fs_info->chunk_mutex
	sb->s_umount
On the read side, we just need get one of these two locks, and on
the write side, we must lock all of them.

Signed-off-by: Miao Xie <miaox@cn.fujitsu.com>
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
2013-02-20 12:59:02 -05:00
..
9p
adfs
affs
afs
autofs4
befs
bfs
btrfs Btrfs: protect fs_info->alloc_start 2013-02-20 12:59:02 -05:00
cachefiles
ceph Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client 2012-10-29 08:49:25 -07:00
cifs Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2012-12-01 13:29:55 -08:00
coda
configfs
cramfs
debugfs
devpts
dlm
ecryptfs
efs
exofs
exportfs
ext2
ext3 ext3: Avoid underflow of in ext3_trim_fs() 2012-11-19 21:36:12 +01:00
ext4 ext4: fix unjournaled inode bitmap modification 2012-10-28 22:24:57 -04:00
fat
freevxfs
fscache
fuse
gfs2 GFS2: Test bufdata with buffer locked and gfs2_log_lock held 2012-11-07 09:43:03 +00:00
hfs
hfsplus
hostfs
hpfs
hppfs
hugetlbfs
isofs
jbd jbd: Fix lock ordering bug in journal_unmap_buffer() 2012-11-23 15:17:18 +01:00
jbd2
jffs2 jffs2: Fix lock acquisition order bug in jffs2_write_begin 2012-11-09 17:02:50 +02:00
jfs
lockd
logfs
minix
ncpfs
nfs nfs_lookup_revalidate(): fix a leak 2012-11-29 22:04:36 -05:00
nfs_common
nfsd
nilfs2
nls
notify fanotify: fix FAN_Q_OVERFLOW case of fanotify_read() 2012-11-18 09:30:00 -10:00
ntfs
ocfs2
omfs
openpromfs
proc proc: check vma->vm_file before dereferencing 2012-11-26 17:41:24 -08:00
pstore pstore: Fix NULL pointer dereference in console writes 2012-11-14 18:30:21 -08:00
qnx4
qnx6
quota
ramfs
reiserfs reiserfs: Move quota calls out of write lock 2012-11-19 21:34:33 +01:00
romfs
squashfs
sysfs
sysv
ubifs
udf
ufs
xfs xfs: drop buffer io reference when a bad bio is built 2012-11-17 09:36:57 -06:00
aio.c
anon_inodes.c
attr.c
bad_inode.c
binfmt_aout.c
binfmt_elf_fdpic.c
binfmt_elf.c
binfmt_em86.c
binfmt_flat.c
binfmt_misc.c
binfmt_script.c
binfmt_som.c
bio-integrity.c
bio.c
block_dev.c vfs: fix O_DIRECT read past end of block device 2012-12-08 08:28:26 -08:00
buffer.c vfs: clear to the end of the buffer on partial buffer reads 2012-12-05 10:32:59 -08:00
char_dev.c
compat_binfmt_elf.c
compat_ioctl.c
compat.c
coredump.c
coredump.h
dcache.c
dcookies.c
direct-io.c direct-io: don't read inode->i_blkbits multiple times 2012-11-29 12:38:44 -08:00
drop_caches.c
eventfd.c
eventpoll.c revert "epoll: support for disabling items, and a self-test app" 2012-11-09 06:41:46 +01:00
exec.c
fcntl.c
fhandle.c
fifo.c
file_table.c
file.c fix off-by-one in argument passed by iterate_fd() to callbacks 2012-11-29 23:01:30 -05:00
filesystems.c
fs_struct.c
fs-writeback.c writeback: put unused inodes to LRU after writeback completion 2012-11-26 17:41:24 -08:00
generic_acl.c
inode.c writeback: put unused inodes to LRU after writeback completion 2012-11-26 17:41:24 -08:00
internal.h writeback: put unused inodes to LRU after writeback completion 2012-11-26 17:41:24 -08:00
ioctl.c
ioprio.c
Kconfig
Kconfig.binfmt
libfs.c
locks.c
Makefile
mbcache.c
mount.h
mpage.c
namei.c lookup_one_len: don't accept . and .. 2012-11-29 22:17:21 -05:00
namespace.c
no-block.c
open.c
pipe.c
pnode.c
pnode.h
posix_acl.c
proc_namespace.c
read_write.c
read_write.h
readdir.c
select.c
seq_file.c
signalfd.c
splice.c
stack.c
stat.c
statfs.c
super.c
sync.c
timerfd.c
utimes.c
xattr_acl.c
xattr.c