kernel-hacking-2024-linux-s.../fs/ocfs2
Mark Fasheh a11f7e63c5 ocfs2: serialize unaligned aio
Fix a corruption that can happen when we have (two or more) outstanding
aio's to an overlapping unaligned region.  Ext4
(e9e3bcecf4) and xfs recently had to fix
similar issues.

In our case what happens is that we can have an outstanding aio on a region
and if a write comes in with some bytes overlapping the original aio we may
decide to read that region into a page before continuing (typically because
of buffered-io fallback).  Since we have no ordering guarantees with the
aio, we can read stale or bad data into the page and then write it back out.

If the i/o is page and block aligned, then we avoid this issue as there
won't be any need to read data from disk.

I took the same approach as Eric in the ext4 patch and introduced some
serialization of unaligned async direct i/o.  I don't expect this to have an
effect on the most common cases of AIO.  Unaligned aio will be slower
though, but that's far more acceptable than data corruption.

Signed-off-by: Mark Fasheh <mfasheh@suse.com>
Signed-off-by: Joel Becker <jlbec@evilplan.org>
2011-07-28 02:07:16 -07:00
..
cluster ocfs2: remove the /sys/o2cb symlink 2011-05-23 23:37:14 -07:00
dlm ocfs2/dlm: Do not migrate resource to a node that is leaving the domain 2011-05-25 21:05:22 -07:00
dlmfs ocfs2: change incorrect 'extern' keyword to 'static' in dlmfs 2011-05-23 23:59:40 -07:00
acl.c Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2 2011-03-28 13:03:31 -07:00
acl.h fs: provide rcu-walk aware permission i_ops 2011-01-07 17:50:29 +11:00
alloc.c ocfs2: Add trace event for trim. 2011-05-23 23:37:20 -07:00
alloc.h ocfs2: Add ocfs2_trim_fs for SSD trim support. 2011-05-23 23:37:18 -07:00
aops.c ocfs2: serialize unaligned aio 2011-07-28 02:07:16 -07:00
aops.h ocfs2: serialize unaligned aio 2011-07-28 02:07:16 -07:00
blockcheck.c ocfs2: Fix metaecc error messages 2010-09-08 14:25:53 +08:00
blockcheck.h
buffer_head_io.c ocfs2: Remove masklog ML_UPTODATE. 2011-02-24 16:22:20 +08:00
buffer_head_io.h
dcache.c ocfs2: fix d_revalidate oopsen on NFS exports 2011-03-10 03:45:07 -05:00
dcache.h Track negative entries v3 2010-09-10 09:18:15 -07:00
dir.c ocfs2: Initialize data_ac (might be used uninitialized) 2011-05-13 11:26:15 -07:00
dir.h
dlmglue.c ocfs2: Bugfix for hard readonly mount 2011-05-31 19:03:44 -07:00
dlmglue.h ocfs2: Fix lockdep warning in reflink. 2010-09-10 09:19:06 -07:00
export.c exportfs: Return the minimum required handle size 2011-03-14 09:15:28 -04:00
export.h
extent_map.c ocfs2: Remove masklog ML_EXTENT_MAP. 2011-02-22 22:27:33 +08:00
extent_map.h
file.c ocfs2: serialize unaligned aio 2011-07-28 02:07:16 -07:00
file.h fs: provide rcu-walk aware permission i_ops 2011-01-07 17:50:29 +11:00
heartbeat.c ocfs2: Remove mlog(0) from fs/ocfs2/heartbeat.c 2011-02-23 21:17:39 +08:00
heartbeat.h
inode.c Fix common misspellings 2011-03-31 11:26:23 -03:00
inode.h ocfs2: serialize unaligned aio 2011-07-28 02:07:16 -07:00
ioctl.c ocfs2: null deref on allocation error 2011-05-31 19:03:45 -07:00
ioctl.h
journal.c ocfs2: Skip mount recovery for hard-ro mounts 2011-05-13 11:27:14 -07:00
journal.h Fix common misspellings 2011-03-31 11:26:23 -03:00
Kconfig ocfs2: Make OCFS2_FS depend on CONFIGFS_FS 2011-01-16 21:22:40 +00:00
localalloc.c ocfs2: Remove EXIT from masklog. 2011-03-07 16:43:21 +08:00
localalloc.h
locks.c ocfs2: remove INODE from unused files. 2011-02-21 11:18:23 +08:00
locks.h
Makefile Ocfs2/move_extents: Add basic framework and source files for extent moving. 2011-05-25 15:17:08 +08:00
mmap.c ocfs2: Remove FILE_IO from masklog. 2011-02-22 21:59:46 +08:00
mmap.h
move_extents.c ocfs2: checking the wrong variable in ocfs2_move_extent() 2011-05-31 19:03:44 -07:00
move_extents.h Ocfs2/move_extents: move/defrag extents within a certain range. 2011-05-25 15:17:12 +08:00
namei.c Fix common misspellings 2011-03-31 11:26:23 -03:00
namei.h
ocfs1_fs_compat.h
ocfs2.h ocfs2: use proper little-endian bitops 2011-05-31 19:03:45 -07:00
ocfs2_fs.h Revert wrong fixes for common misspellings 2011-04-26 23:31:11 -07:00
ocfs2_ioctl.h Ocfs2/move_extents: Adding new ioctl code 'OCFS2_IOC_MOVE_EXT' to ocfs2. 2011-05-25 15:17:08 +08:00
ocfs2_lockid.h
ocfs2_lockingver.h
ocfs2_trace.h ocfs2: Add trace event for trim. 2011-05-23 23:37:20 -07:00
quota.h ocfs2: use system_wq instead of ocfs2_quota_wq 2011-02-01 11:42:42 +01:00
quota_global.c Fix common misspellings 2011-03-31 11:26:23 -03:00
quota_local.c ocfs2: Remove mlog(0) from quota_local.c. 2011-02-23 22:12:48 +08:00
refcounttree.c Ocfs2/refcounttree: Publicize couple of funcs from refcounttree.c 2011-05-25 15:17:08 +08:00
refcounttree.h Ocfs2/refcounttree: Publicize couple of funcs from refcounttree.c 2011-05-25 15:17:08 +08:00
reservations.c ocfs2: Remove masklog ML_RESERVATIONS. 2011-02-23 22:10:56 +08:00
reservations.h Fix common misspellings 2011-03-31 11:26:23 -03:00
resize.c ocfs2: Remove mlog(0) from fs/ocfs2/suballoc.c 2011-02-22 08:24:01 +08:00
resize.h
slot_map.c ocfs2: Remove mlog(0) from fs/ocfs2/slot_map.c 2011-02-22 22:29:08 +08:00
slot_map.h
stack_o2cb.c ocfs2: Print message if user mounts without starting global heartbeat 2010-10-06 17:55:29 -07:00
stack_user.c ocfs2_connection_find() returns pointer to bad structure 2010-11-18 15:41:41 -08:00
stackglue.c
stackglue.h Fix common misspellings 2011-03-31 11:26:23 -03:00
suballoc.c Fix common misspellings 2011-03-31 11:26:23 -03:00
suballoc.h ocfs2: allow return of new inode block location before allocation of the inode 2010-09-08 14:25:59 +08:00
super.c ocfs2: serialize unaligned aio 2011-07-28 02:07:16 -07:00
super.h
symlink.c ocfs2: Remove EXIT from masklog. 2011-03-07 16:43:21 +08:00
symlink.h
sysfile.c ocfs2: Remove mlog(0) from fs/ocfs2/file.c 2011-02-22 22:14:41 +08:00
sysfile.h
uptodate.c ocfs2: Remove masklog ML_UPTODATE. 2011-02-24 16:22:20 +08:00
uptodate.h
ver.c
ver.h
xattr.c Fix common misspellings 2011-03-31 11:26:23 -03:00
xattr.h fs/vfs/security: pass last path component to LSM on inode creation 2011-02-01 11:12:29 -05:00