kernel_optimize_test/fs
David Chinner 585e6d8856 [XFS] Fix a synchronous buftarg flush deadlock when freezing.
At the last stage of a freeze, we flush the buftarg synchronously over and
over again until it succeeds twice without skipping any buffers.

The delwri list flush skips pinned buffers, but tries to flush all others.
It removes the buffers from the delwri list, then tries to lock them one
at a time as it traverses the list to issue the I/O. It holds them locked
until we issue all of the I/O and then unlocks them once we've waited for
it to complete.

The problem is that during a freeze, the filesystem may still be doing
stuff - like flushing delalloc data buffers - in the background and hence
we can be trying to lock buffers that were on the delwri list at the same
time. Hence we can get ABBA deadlocks between threads doing allocation and
the buftarg flush (freeze) thread.

Fix it by skipping locked (and pinned) buffers as we traverse the delwri
buffer list.

SGI-PV: 957195
SGI-Modid: xfs-linux-melb:xfs-kern:27535a

Signed-off-by: David Chinner <dgc@sgi.com>
Signed-off-by: Tim Shimmin <tes@sgi.com>
2007-02-10 18:32:29 +11:00
..
9p [PATCH] v9fs_vfs_mkdir(): fix a double free 2007-02-09 09:25:47 -08:00
adfs [PATCH] adfs: fix filename handling 2007-01-05 23:55:22 -08:00
affs
afs
autofs
autofs4
befs
bfs
cifs [CIFS] Minor cleanup 2007-02-06 20:43:30 +00:00
coda
configfs configfs: Zero terminate data in configfs attribute writes. 2007-02-07 12:17:08 -08:00
cramfs
debugfs
devpts
dlm [PATCH] dlm: use kern_recvmsg() 2007-02-09 09:14:06 -08:00
ecryptfs [CRYPTO] api: Remove deprecated interface 2007-02-07 09:21:00 +11:00
efs
exportfs
ext2
ext3
ext4
fat
freevxfs
fuse [PATCH] fuse: fix bug in control filesystem mount 2007-01-30 08:26:45 -08:00
gfs2 [GFS2] make gfs2_writepages() static 2007-02-07 10:48:48 -05:00
hfs
hfsplus
hostfs [PATCH] uml: fix mknod 2007-01-30 08:26:44 -08:00
hpfs
hppfs
hugetlbfs [PATCH] hugetlb: preserve hugetlb pte dirty state 2007-02-09 09:25:46 -08:00
isofs
jbd
jbd2
jffs Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 2007-01-18 10:34:51 +11:00
jffs2 Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 2007-01-18 10:34:51 +11:00
jfs JFS: Remove incorrect kgdb define 2007-01-26 10:14:36 -06:00
lockd [PATCH] fs/lockd/clntlock.c: add missing newlines to dprintk's 2007-01-30 08:26:45 -08:00
minix
msdos
ncpfs
nfs [PATCH] Remove warning: VFS is out of sync with lock manager 2007-01-30 16:01:35 -08:00
nfs_common
nfsd [PATCH] endianness bug: ntohl() misspelled as >> 24 in fh_verify(). 2007-02-01 16:17:06 -08:00
nls
ntfs [PATCH] ntfs: kmap_atomic() atomicity fix 2007-01-30 16:01:35 -08:00
ocfs2 [PATCH] ocfs2 heartbeat: clean up bio submission code 2007-02-07 12:15:58 -08:00
openpromfs
partitions
proc [PATCH] procfs: Fix listing of /proc/NOT_A_TGID/task 2007-02-01 16:22:41 -08:00
qnx4
ramfs [PATCH] ramfs breaks without CONFIG_BLOCK 2006-12-30 10:56:42 -08:00
reiserfs [PATCH] resierfs: avoid tail packing if an inode was ever mmapped 2007-01-23 07:52:06 -08:00
romfs
smbfs
sysfs sysfs: Shadow directory support 2007-02-07 10:37:14 -08:00
sysv
udf
ufs [PATCH] ufs: restore back support of openstep 2007-02-09 09:25:46 -08:00
vfat
xfs [XFS] Fix a synchronous buftarg flush deadlock when freezing. 2007-02-10 18:32:29 +11:00
aio.c [PATCH] aio: fix buggy put_ioctx call in aio_complete - v2 2007-02-03 11:26:06 -08:00
attr.c
bad_inode.c [PATCH] fix memory corruption from misinterpreted bad_inode_ops return values 2007-01-05 23:55:23 -08:00
binfmt_aout.c
binfmt_elf_fdpic.c [PATCH] core-dumping unreadable binaries via PT_INTERP 2007-01-26 13:51:00 -08:00
binfmt_elf.c [PATCH] core-dumping unreadable binaries via PT_INTERP 2007-01-26 13:51:00 -08:00
binfmt_em86.c
binfmt_flat.c [PATCH] uclinux: correctly remap bin_fmtflat exe allocated mem regions 2007-02-09 10:45:33 -08:00
binfmt_misc.c
binfmt_script.c
binfmt_som.c
bio.c
block_dev.c [PATCH] revert blockdev direct io back to 2.6.19 version 2007-02-03 11:26:06 -08:00
buffer.c [PATCH] Fix try_to_free_buffer() locking 2007-01-29 20:20:42 -08:00
char_dev.c
compat_ioctl.c
compat.c
dcache.c
dcookies.c
direct-io.c
dnotify.c
dquot.c
drop_caches.c
eventpoll.c
exec.c
fcntl.c
fifo.c
file_table.c
file.c
filesystems.c
fs-writeback.c Write back inode data pages even when the inode itself is locked 2007-01-26 12:53:20 -08:00
generic_acl.c
inode.c
inotify_user.c
inotify.c
internal.h
ioctl.c
ioprio.c
Kconfig [PATCH] ocfs2: drop INET from Kconfig, not needed 2007-02-07 12:14:27 -08:00
Kconfig.binfmt
libfs.c
locks.c
Makefile
mbcache.c
mpage.c
namei.c
namespace.c
nfsctl.c
no-block.c
open.c
pipe.c
pnode.c
pnode.h
posix_acl.c
quota_v1.c
quota_v2.c
quota.c
read_write.c
read_write.h
readdir.c
select.c
seq_file.c
splice.c
stack.c
stat.c
super.c [PATCH] Revert bd_mount_mutex back to a semaphore 2007-01-11 18:18:21 -08:00
sync.c
utimes.c
xattr_acl.c
xattr.c