Brian Foster
2032a8a27b
xfs: serialize unaligned dio writes against all other dio writes
...
XFS applies more strict serialization constraints to unaligned
direct writes to accommodate things like direct I/O layer zeroing,
unwritten extent conversion, etc. Unaligned submissions acquire the
exclusive iolock and wait for in-flight dio to complete to ensure
multiple submissions do not race on the same block and cause data
corruption.
This generally works in the case of an aligned dio followed by an
unaligned dio, but the serialization is lost if I/Os occur in the
opposite order. If an unaligned write is submitted first and
immediately followed by an overlapping, aligned write, the latter
submits without the typical unaligned serialization barriers because
there is no indication of an unaligned dio still in-flight. This can
lead to unpredictable results.
To provide proper unaligned dio serialization, require that such
direct writes are always the only dio allowed in-flight at one time
for a particular inode. We already acquire the exclusive iolock and
drain pending dio before submitting the unaligned dio. Wait once
more after the dio submission to hold the iolock across the I/O and
prevent further submissions until the unaligned I/O completes. This
is heavy handed, but consistent with the current pre-submission
serialization for unaligned direct writes.
Signed-off-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Allison Henderson <allison.henderson@oracle.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
2019-03-26 08:37:55 -07:00
..
9p
Pull request for inlusion in 5.1
2019-03-17 09:10:56 -07:00
adfs
affs
afs
Merge branch 'work.mount' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2019-03-12 14:08:19 -07:00
autofs
autofs: clear O_NONBLOCK on the pipe
2019-03-07 18:32:01 -08:00
befs
bfs
bfs: extra sanity checking and static inode bitmap
2019-01-04 13:13:47 -08:00
btrfs
for-5.1-part2-tag
2019-03-12 14:53:57 -07:00
cachefiles
ceph
ceph: add mount option to limit caps count
2019-03-05 18:55:17 +01:00
cifs
CIFS: fix POSIX lock leak and invalid ptr deref
2019-03-14 19:32:36 -05:00
coda
configfs
cramfs
crypto
fscrypt updates for v5.1
2019-03-09 10:54:24 -08:00
debugfs
Merge 5.0-rc6 into driver-core-next
2019-02-11 09:09:02 +01:00
devpts
fs/devpts: always delete dcache dentry-s in dput()
2019-01-24 13:38:30 -05:00
dlm
socket: Rename SO_RCVTIMEO/ SO_SNDTIMEO with _OLD suffixes
2019-02-03 11:17:31 -08:00
ecryptfs
crypto: clarify name of WEAK_KEY request flag
2019-01-25 18:41:52 +08:00
efivarfs
efs
exportfs
ext2
\n
2019-03-07 09:01:33 -08:00
ext4
A large number of bug fixes and cleanups. One new feature to allow
2019-03-12 15:03:21 -07:00
f2fs
f2fs-for-5.1-rc1
2019-03-15 13:42:53 -07:00
fat
fat: enable .splice_write to support splice on O_DIRECT file
2019-03-07 18:32:01 -08:00
freevxfs
fscache
fuse
fuse update for 5.1
2019-03-12 14:46:26 -07:00
gfs2
We've only got three patches ready for this merge window:
2019-03-09 11:52:11 -08:00
hfs
hfsplus
hfsplus: return file attributes on statx
2019-01-04 13:13:47 -08:00
hostfs
hpfs
hpfs: fix spelling mistake "partion" -> "partition"
2019-03-12 09:58:03 -07:00
hugetlbfs
Merge branch 'work.mount' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2019-03-12 14:08:19 -07:00
isofs
jbd2
jbd2: jbd2_get_transaction does not need to return a value
2019-03-01 00:36:57 -05:00
jffs2
jfs
kernfs
Merge branch 'work.mount' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2019-03-12 14:08:19 -07:00
lockd
NFS: Remove print_overflow_msg()
2019-02-13 11:53:45 -05:00
minix
nfs
pNFS: Fix a typo in pnfs_update_layout
2019-03-12 16:04:51 -04:00
nfs_common
nfsd
Miscellaneous NFS server fixes. Probably the most visible bug is one
2019-03-12 15:06:54 -07:00
nilfs2
XArray: Change xa_insert to return -EBUSY
2019-02-06 13:12:15 -05:00
nls
notify
fanotify: Make waits for fanotify events only killable
2019-02-21 11:47:23 +01:00
ntfs
mm: convert totalram_pages and totalhigh_pages variables to atomic
2018-12-28 12:11:47 -08:00
ocfs2
ocfs2: Use zero-sized array and struct_size() in kzalloc()
2019-03-05 21:07:13 -08:00
omfs
openpromfs
orangefs
Merge branch 'work.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2019-03-12 13:27:20 -07:00
overlayfs
ovl: Do not lose security.capability xattr over metadata file copy-up
2019-02-13 11:14:46 +01:00
proc
pidfd patches for v5.1-rc1
2019-03-16 13:47:14 -07:00
pstore
pstore/ram: Avoid needless alloc during header write
2019-02-12 13:45:53 -08:00
qnx4
qnx6
quota
quota: Lock s_umount in exclusive mode for Q_XQUOTA{ON,OFF} quotactls.
2018-12-18 18:29:15 +01:00
ramfs
reiserfs
romfs
squashfs
sysfs
Merge branch 'work.mount' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2019-03-16 10:31:02 -07:00
sysv
tracefs
ubifs
This pull request contains updates for both UBI and UBIFS:
2019-03-13 09:34:35 -07:00
udf
udf: Drop pointless check from udf_sync_fs()
2019-02-21 19:25:36 +01:00
ufs
xfs
xfs: serialize unaligned dio writes against all other dio writes
2019-03-26 08:37:55 -07:00
aio.c
Merge branch 'timers-2038-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2019-03-05 14:08:26 -08:00
anon_inodes.c
attr.c
bad_inode.c
binfmt_aout.c
a.out: remove core dumping support
2019-03-05 10:00:35 -08:00
binfmt_elf.c
fs/binfmt_elf.c: spread const a little
2019-03-07 18:32:01 -08:00
binfmt_elf_fdpic.c
binfmt_em86.c
binfmt_flat.c
binfmt_misc.c
binfmt_script.c
exec: load_script: Do not exec truncated interpreter path
2019-02-18 16:49:36 -08:00
block_dev.c
block: add bio_set_polled() helper
2019-02-24 08:20:17 -07:00
buffer.c
fs: fix guard_bio_eod to check for real EOD errors
2019-02-28 13:59:41 -07:00
char_dev.c
compat.c
compat_binfmt_elf.c
compat_ioctl.c
coredump.c
d_path.c
dax.c
dax: Flush partial PMDs correctly
2019-03-01 17:24:48 -08:00
dcache.c
fs/dcache: Track & report number of negative dentries
2019-01-30 11:02:11 -08:00
dcookies.c
direct-io.c
block: allow bio_for_each_segment_all() to iterate over multi-page bvec
2019-02-15 08:40:11 -07:00
drop_caches.c
fs/drop_caches.c: avoid softlockups in drop_pagecache_sb()
2019-02-01 15:46:24 -08:00
eventfd.c
eventpoll.c
epoll: use rwlock in order to reduce ep_poll_callback() contention
2019-03-07 18:32:01 -08:00
exec.c
exec: increase BINPRM_BUF_SIZE to 256
2019-03-07 18:32:01 -08:00
fcntl.c
fhandle.c
file.c
io_uring-2019-03-06
2019-03-08 14:48:40 -08:00
file_table.c
fs: add fget_many() and fput_many()
2019-02-28 08:24:23 -07:00
filesystems.c
vfs: Implement a filesystem superblock creation/configuration context
2019-02-28 03:29:26 -05:00
fs-writeback.c
writeback: synchronize sync(2) against cgroup writeback membership switches
2019-01-22 14:39:38 -07:00
fs_context.c
vfs: Implement logging through fs_context
2019-02-28 03:29:37 -05:00
fs_parser.c
vfs: Add configuration parser helpers
2019-02-28 03:28:53 -05:00
fs_pin.c
fs_struct.c
fs_types.c
fs: common implementation of file type
2019-01-21 17:48:13 +01:00
inode.c
fs/inode.c: inode_set_flags(): replace opencoded set_mask_bits()
2019-03-05 21:07:13 -08:00
internal.h
vfs: Add configuration parser helpers
2019-02-28 03:28:53 -05:00
io_uring.c
mm: refactor readahead defines in mm.h
2019-03-12 10:04:01 -07:00
ioctl.c
Remove 'type' argument from access_ok() function
2019-01-03 18:57:57 -08:00
iomap.c
iomap: wire up the iopoll method
2019-02-24 08:20:17 -07:00
Kconfig
Merge branch 'work.mount' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2019-03-12 14:08:19 -07:00
Kconfig.binfmt
libfs.c
locks.c
locking/percpu-rwsem: Remove preempt_disable variants
2019-02-28 07:55:37 +01:00
Makefile
Merge branch 'work.mount' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2019-03-12 14:08:19 -07:00
mbcache.c
mount.h
saner handling of temporary namespaces
2019-01-30 17:44:07 -05:00
mpage.c
block: allow bio_for_each_segment_all() to iterate over multi-page bvec
2019-02-15 08:40:11 -07:00
namei.c
Merge branch 'work.mount' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2019-03-12 14:08:19 -07:00
namespace.c
Merge branch 'work.mount' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2019-03-12 14:08:19 -07:00
no-block.c
nsfs.c
open.c
pipe.c
Merge branch 'work.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2019-03-12 13:27:20 -07:00
pnode.c
separate copying and locking mount tree on cross-userns copies
2019-01-30 17:14:50 -05:00
pnode.h
separate copying and locking mount tree on cross-userns copies
2019-01-30 17:14:50 -05:00
posix_acl.c
proc_namespace.c
read_write.c
Merge branch 'work.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2019-03-12 13:27:20 -07:00
readdir.c
Remove 'type' argument from access_ok() function
2019-01-03 18:57:57 -08:00
select.c
y2038: syscalls: rename y2038 compat syscalls
2019-02-07 00:13:27 +01:00
seq_file.c
signalfd.c
splice.c
Merge branch 'work.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2019-03-12 13:27:20 -07:00
stack.c
stat.c
fs: move generic stat response attr handling to vfs_getattr_nosec
2019-02-01 01:55:45 -05:00
statfs.c
vfs: add vfs_get_fsid() helper
2019-02-07 16:38:35 +01:00
super.c
vfs: Add some logging to the core users of the fs_context log
2019-02-28 03:29:38 -05:00
sync.c
timerfd.c
y2038: syscalls: rename y2038 compat syscalls
2019-02-07 00:13:27 +01:00
userfaultfd.c
userfaultfd: clear flag if remap event not enabled
2018-12-28 12:11:51 -08:00
utimes.c
y2038: syscalls: rename y2038 compat syscalls
2019-02-07 00:13:27 +01:00
xattr.c