android_kernel_google_msm/fs
Junxiao Bi 9939834ccd ocfs2: fix journal commit deadlock
commit 136f49b9171074872f2a14ad0ab10486d1ba13ca upstream.

For buffer write, page lock will be got in write_begin and released in
write_end, in ocfs2_write_end_nolock(), before it unlock the page in
ocfs2_free_write_ctxt(), it calls ocfs2_run_deallocs(), this will ask
for the read lock of journal->j_trans_barrier.  Holding page lock and
ask for journal->j_trans_barrier breaks the locking order.

This will cause a deadlock with journal commit threads, ocfs2cmt will
get write lock of journal->j_trans_barrier first, then it wakes up
kjournald2 to do the commit work, at last it waits until done.  To
commit journal, kjournald2 needs flushing data first, it needs get the
cache page lock.

Since some ocfs2 cluster locks are holding by write process, this
deadlock may hung the whole cluster.

unlock pages before ocfs2_run_deallocs() can fix the locking order, also
put unlock before ocfs2_commit_trans() to make page lock is unlocked
before j_trans_barrier to preserve unlocking order.

Signed-off-by: Junxiao Bi <junxiao.bi@oracle.com>
Reviewed-by: Wengang Wang <wen.gang.wang@oracle.com>
Reviewed-by: Mark Fasheh <mfasheh@suse.de>
Cc: Joel Becker <jlbec@evilplan.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Zefan Li <lizefan@huawei.com>
2015-04-14 17:33:47 +08:00
..
9p
adfs
affs
afs
autofs4 autofs - remove autofs dentry mount check 2013-05-11 13:48:06 -07:00
befs
bfs
btrfs Btrfs: fix fs corruption on transaction abort if device supports discard 2015-04-14 17:33:45 +08:00
cachefiles fs: cachefiles: add support for large files in filesystem caching 2014-06-07 16:02:04 -07:00
ceph introduce SIZE_MAX 2014-07-31 12:54:53 -07:00
cifs CIFS: Fix wrong directory attributes after rename 2014-09-25 11:49:11 +08:00
coda
configfs configfs: fix race between dentry put and lookup 2013-11-29 10:50:37 -08:00
cramfs
debugfs debugfs: debugfs_remove_recursive() must not rely on list_empty(d_subdirs) 2013-08-14 22:57:07 -07:00
devpts devpts: plug the memory leak in kill_sb 2013-12-04 10:50:14 -08:00
dlm
ecryptfs eCryptfs: Remove buggy and unnecessary write in file name decode routine 2015-04-14 17:33:43 +08:00
efs
exofs ore: Fix wrong math in allocation of per device BIO 2014-02-13 11:51:11 -08:00
exportfs
ext2 ext2: Fix fs corruption in ext2_get_xip_mem() 2014-09-25 11:49:19 +08:00
ext3 ext3: Don't check quota format when there are no quota files 2015-02-02 17:05:00 +08:00
ext4 ext4: bail out from make_indexed_dir() on first error 2015-02-02 17:05:09 +08:00
fat fat: fix possible overflow for fat_clusters 2013-06-07 12:49:12 -07:00
freevxfs
fscache fs/fscache/stats.c: fix memory leak 2013-05-07 19:51:55 -07:00
fuse fuse: hotfix truncate_pagecache() issue 2014-03-11 16:10:04 -07:00
gfs2 GFS2: Fix incorrect invalidation for DIO/buffered I/O 2014-01-08 09:42:12 -08:00
hfs
hfsplus hfsplus: fix potential overflow in hfsplus_file_truncate() 2013-04-25 21:19:54 -07:00
hostfs
hpfs hpfs: deadlock and race in directory lseek() 2014-02-13 11:51:18 -08:00
hppfs
hugetlbfs hugetlbfs: fix mmap failure in unaligned size request 2013-05-19 10:54:48 -07:00
isofs isofs: Fix infinite looping over CE entries 2015-04-14 17:33:47 +08:00
jbd jbd: Fix lock ordering bug in journal_unmap_buffer() 2012-12-03 11:47:10 -08:00
jbd2 ext4/jbd2: don't wait (forever) for stale tid caused by wraparound 2014-03-11 16:10:05 -07:00
jffs2 jffs2: remove from wait queue after schedule() 2014-04-26 17:13:20 -07:00
jfs jfs: fix error path in ialloc 2013-11-13 12:01:48 +09:00
lockd lockd: Try to reconnect if statd has moved 2015-02-02 17:04:42 +08:00
logfs
minix
ncpfs ncpfs: return proper error from NCP_IOC_SETROOT ioctl 2015-04-14 17:33:46 +08:00
nfs NFSv4: Ensure that we remove NFSv4.0 delegations when state has expired 2015-02-02 17:05:20 +08:00
nfs_common
nfsd nfsd: Fix slot wake up race in the nfsv4.1 callback code 2015-04-14 17:33:37 +08:00
nilfs2 nilfs2: fix data loss with mmap() 2014-12-01 18:02:38 +08:00
nls
notify fanotify: enable close-on-exec on events' fd when requested in fanotify_init() 2015-02-02 17:04:49 +08:00
ntfs
ocfs2 ocfs2: fix journal commit deadlock 2015-04-14 17:33:47 +08:00
omfs
openpromfs
proc genirq: Prevent proc race against freeing of irq descriptors 2015-04-14 17:33:46 +08:00
pstore pstore: Avoid deadlock in panic and emergency-restart path 2013-03-04 06:06:43 +08:00
qnx4
qnx6
quota quota: Fix race between dqput() and dquot_scan_active() 2014-03-11 16:10:02 -07:00
ramfs fs: ramfs: file-nommu: add SetPageUptodate() 2012-07-16 09:04:45 -07:00
reiserfs reiserfs: fix race in readdir 2014-05-06 07:51:44 -07:00
romfs
squashfs
sysfs sysfs: fix use after free in case of concurrent read/write and readdir 2013-05-07 19:51:54 -07:00
sysv
ubifs UBIFS: fix free log space calculation 2015-02-02 17:04:36 +08:00
udf udf: avoid info leak on export 2013-03-28 12:12:27 -07:00
ufs
xfs xfs: underflow bug in xfs_attrlist_by_handle() 2013-12-20 07:34:19 -08:00
aio.c aio: fix possible invalid memory access when DEBUG is enabled 2013-05-01 09:41:03 -07:00
anon_inodes.c
attr.c vfs: increment iversion when a file is truncated 2012-06-10 00:36:12 +09:00
bad_inode.c
binfmt_aout.c
binfmt_elf.c coredump: prevent double-free on an error path in core dumper 2012-10-07 08:32:27 -07:00
binfmt_elf_fdpic.c
binfmt_em86.c exec: use -ELOOP for max recursion depth 2013-03-28 12:12:28 -07:00
binfmt_flat.c
binfmt_misc.c exec: use -ELOOP for max recursion depth 2013-03-28 12:12:28 -07:00
binfmt_script.c exec: use -ELOOP for max recursion depth 2013-03-28 12:12:28 -07:00
binfmt_som.c
bio-integrity.c
bio.c SCSI: sg: Fix user memory corruption when SG_IO is interrupted by a signal 2013-09-07 21:58:16 -07:00
block_dev.c writeback: Fix periodic writeback after fs mount 2013-07-28 16:26:08 -07:00
buffer.c vfs: fix data corruption when blocksize < pagesize for mmaped data 2015-02-02 17:04:52 +08:00
char_dev.c
compat.c Fix: compat_rw_copy_check_uvector() misuse in aio, readv, writev, and security keys 2013-03-14 11:29:51 -07:00
compat_binfmt_elf.c
compat_ioctl.c fs/compat_ioctl.c: VIDEO_SET_SPU_PALETTE missing error check 2012-10-31 10:02:55 -07:00
dcache.c Nest rename_lock inside vfsmount_lock 2013-11-29 10:50:33 -08:00
dcookies.c
direct-io.c fs: Fix possible use-after-free with AIO 2013-03-04 06:06:41 +08:00
drop_caches.c
eventfd.c
eventpoll.c epoll: prevent missed events on EPOLL_CTL_MOD 2013-01-17 08:50:54 -08:00
exec.c exec/ptrace: fix get_dumpable() incorrect tests 2013-11-29 10:50:34 -08:00
fcntl.c
fhandle.c
fifo.c fifo: Do not restart open() if it already found a partner 2012-07-19 08:58:56 -07:00
file.c fs/file.c:fdtable: avoid triggering OOMs from alloc_fdmem 2014-02-22 10:32:45 -08:00
file_table.c
filesystems.c
fs-writeback.c writeback: fix a subtle race condition in I_DIRTY clearing 2015-04-14 17:33:41 +08:00
fs_struct.c
generic_acl.c
inode.c vfs: Revert spurious fix to spinning prevention in prune_icache_sb 2013-04-16 21:27:26 -07:00
internal.h
ioctl.c
ioprio.c block: Fix computation of merged request priority 2015-02-02 17:05:17 +08:00
Kconfig
Kconfig.binfmt
libfs.c
locks.c locks: allow __break_lease to sleep even when break_time is 0 2014-05-13 14:11:31 +02:00
Makefile
mbcache.c
mount.h
mpage.c
namei.c don't bugger nd->seq on set_root_rcu() from follow_dotdot_rcu() 2014-12-01 18:02:31 +08:00
namespace.c mnt: Prevent pivot_root from creating a loop in the mount tree 2015-02-02 17:04:50 +08:00
no-block.c
open.c vfs: canonicalize create mode in build_open_flags() 2012-09-14 10:00:05 -07:00
pipe.c vfs: fix pipe counter breakage 2013-03-14 11:29:51 -07:00
pnode.c get rid of propagate_umount() mistakenly treating slaves as busy. 2014-12-01 18:02:21 +08:00
pnode.h
posix_acl.c posix_acl: handle NULL ACL in posix_acl_equiv_mode 2014-06-07 16:02:02 -07:00
proc_namespace.c
read_write.c
read_write.h
readdir.c
select.c posix_types.h: Cleanup stale __NFDBITS and related definitions 2012-08-09 08:31:39 -07:00
seq_file.c
signalfd.c
splice.c tcp: fix MSG_SENDPAGE_NOTLAST logic 2013-01-11 09:07:14 -08:00
stack.c
stat.c VFS: make vfs_fstat() use f[get|put]_light() 2014-06-07 16:02:04 -07:00
statfs.c vfs: allow O_PATH file descriptors for fstatfs() 2013-10-22 09:02:25 +01:00
super.c fs: Fix theoretical division by 0 in super_cache_scan(). 2015-02-02 17:04:48 +08:00
sync.c
timerfd.c
utimes.c
xattr.c
xattr_acl.c