Revision 7fb5409df092589b86cc9412d926879cb572b7f0 authored by Jan Kara on 10 February 2008, 06:08:38 UTC, committed by Theodore Ts'o on 10 February 2008, 06:08:38 UTC
We cannot start transaction in ext4_direct_IO() and just let it last
during the whole write because dio_get_page() acquires mmap_sem which
ranks above transaction start (e.g. because we have dependency chain
mmap_sem->PageLock->journal_start, or because we update atime while
holding mmap_sem) and thus deadlocks could happen. We solve the problem
by starting a transaction separately for each ext4_get_block() call.

We *could* have a problem that we allocate a block and before its data
are written out the machine crashes and thus we expose stale data. But
that does not happen because for hole-filling generic code falls back to
buffered writes and for file extension, we add inode to orphan list and
thus in case of crash, journal replay will truncate inode back to the
original size.

Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Mingming Cao <cmm@us.ibm.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>

1 parent 8009f9f
History
File Mode Size
9p
adfs
affs
afs
autofs
autofs4
befs
bfs
cifs
coda
configfs
cramfs
debugfs
devpts
dlm
ecryptfs
efs
exportfs
ext2
ext3
ext4
fat
freevxfs
fuse
gfs2
hfs
hfsplus
hostfs
hpfs
hppfs
hugetlbfs
isofs
jbd
jbd2
jffs2
jfs
lockd
minix
msdos
ncpfs
nfs
nfs_common
nfsd
nls
ntfs
ocfs2
openpromfs
partitions
proc
qnx4
ramfs
reiserfs
romfs
smbfs
sysfs
sysv
udf
ufs
vfat
xfs
Kconfig -rw-r--r-- 76.1 KB
Kconfig.binfmt -rw-r--r-- 5.4 KB
Makefile -rw-r--r-- 3.8 KB
aio.c -rw-r--r-- 45.3 KB
anon_inodes.c -rw-r--r-- 5.2 KB
attr.c -rw-r--r-- 4.7 KB
bad_inode.c -rw-r--r-- 8.1 KB
binfmt_aout.c -rw-r--r-- 15.0 KB
binfmt_elf.c -rw-r--r-- 53.4 KB
binfmt_elf_fdpic.c -rw-r--r-- 47.4 KB
binfmt_em86.c -rw-r--r-- 2.8 KB
binfmt_flat.c -rw-r--r-- 26.7 KB
binfmt_misc.c -rw-r--r-- 15.5 KB
binfmt_script.c -rw-r--r-- 2.7 KB
binfmt_som.c -rw-r--r-- 7.8 KB
bio.c -rw-r--r-- 28.2 KB
block_dev.c -rw-r--r-- 35.1 KB
buffer.c -rw-r--r-- 86.5 KB
char_dev.c -rw-r--r-- 13.2 KB
compat.c -rw-r--r-- 53.0 KB
compat_binfmt_elf.c -rw-r--r-- 3.4 KB
compat_ioctl.c -rw-r--r-- 84.3 KB
dcache.c -rw-r--r-- 55.4 KB
dcookies.c -rw-r--r-- 6.4 KB
direct-io.c -rw-r--r-- 34.2 KB
dnotify.c -rw-r--r-- 4.3 KB
dquot.c -rw-r--r-- 55.9 KB
drop_caches.c -rw-r--r-- 1.4 KB
eventfd.c -rw-r--r-- 5.1 KB
eventpoll.c -rw-r--r-- 36.6 KB
exec.c -rw-r--r-- 40.6 KB
fcntl.c -rw-r--r-- 14.3 KB
fifo.c -rw-r--r-- 3.1 KB
file.c -rw-r--r-- 6.3 KB
file_table.c -rw-r--r-- 8.5 KB
filesystems.c -rw-r--r-- 5.5 KB
fs-writeback.c -rw-r--r-- 22.3 KB
generic_acl.c -rw-r--r-- 4.2 KB
inode.c -rw-r--r-- 37.8 KB
inotify.c -rw-r--r-- 20.2 KB
inotify_user.c -rw-r--r-- 18.2 KB
internal.h -rw-r--r-- 934 bytes
ioctl.c -rw-r--r-- 4.5 KB
ioprio.c -rw-r--r-- 5.0 KB
libfs.c -rw-r--r-- 19.5 KB
locks.c -rw-r--r-- 57.0 KB
mbcache.c -rw-r--r-- 18.3 KB
mpage.c -rw-r--r-- 19.9 KB
namei.c -rw-r--r-- 68.9 KB
namespace.c -rw-r--r-- 48.1 KB
nfsctl.c -rw-r--r-- 2.4 KB
no-block.c -rw-r--r-- 663 bytes
open.c -rw-r--r-- 26.1 KB
pipe.c -rw-r--r-- 24.4 KB
pnode.c -rw-r--r-- 7.7 KB
pnode.h -rw-r--r-- 1.0 KB
posix_acl.c -rw-r--r-- 8.5 KB
quota.c -rw-r--r-- 12.2 KB
quota_v1.c -rw-r--r-- 5.7 KB
quota_v2.c -rw-r--r-- 20.1 KB
read_write.c -rw-r--r-- 17.6 KB
read_write.h -rw-r--r-- 542 bytes
readdir.c -rw-r--r-- 6.8 KB
select.c -rw-r--r-- 20.8 KB
seq_file.c -rw-r--r-- 10.9 KB
signalfd.c -rw-r--r-- 6.6 KB
splice.c -rw-r--r-- 39.7 KB
stack.c -rw-r--r-- 1.1 KB
stat.c -rw-r--r-- 10.6 KB
super.c -rw-r--r-- 22.0 KB
sync.c -rw-r--r-- 7.0 KB
timerfd.c -rw-r--r-- 6.7 KB
utimes.c -rw-r--r-- 5.1 KB
xattr.c -rw-r--r-- 14.3 KB
xattr_acl.c -rw-r--r-- 2.3 KB

back to top