anfei zhou
931e80e4b3
mm: flush dcache before writing into page to avoid alias
...
The cache alias problem will happen if the changes of user shared mapping
is not flushed before copying, then user and kernel mapping may be mapped
into two different cache line, it is impossible to guarantee the coherence
after iov_iter_copy_from_user_atomic. So the right steps should be:
flush_dcache_page(page);
kmap_atomic(page);
write to page;
kunmap_atomic(page);
flush_dcache_page(page);
More precisely, we might create two new APIs flush_dcache_user_page and
flush_dcache_kern_page to replace the two flush_dcache_page accordingly.
Here is a snippet tested on omap2430 with VIPT cache, and I think it is
not ARM-specific:
int val = 0x11111111;
fd = open("abc", O_RDWR);
addr = mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
*(addr+0) = 0x44444444;
tmp = *(addr+0);
*(addr+1) = 0x77777777;
write(fd, &val, sizeof(int));
close(fd);
The results are not always 0x11111111 0x77777777 at the beginning as expected. Sometimes we see 0x44444444 0x77777777.
Signed-off-by: Anfei <anfei.zhou@gmail.com>
Cc: Russell King <rmk@arm.linux.org.uk>
Cc: Miklos Szeredi <miklos@szeredi.hu>
Cc: Nick Piggin <nickpiggin@yahoo.com.au>
Cc: <linux-arch@vger.kernel.org>
Cc: <stable@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2010-02-02 18:11:21 -08:00
..
9p
fix oops in fs/9p late mount failure
2010-01-26 22:22:27 -05:00
adfs
adfs: remove redundant test on unsigned
2009-09-24 07:21:05 -07:00
affs
fix affs parse_options()
2010-01-26 22:22:25 -05:00
afs
afs: remove manual O_SYNC handling
2009-12-10 15:02:50 +01:00
autofs
trivial: remove unnecessary semicolons
2009-09-21 15:14:58 +02:00
autofs4
autofs4: always use lookup for lookup
2009-12-16 07:19:58 -08:00
befs
fs: Make unload_nls() NULL pointer safe
2009-09-24 07:47:42 -04:00
bfs
Fix failure exits in bfs_fill_super()
2010-01-26 22:22:25 -05:00
btrfs
Merge git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable
2010-01-29 10:27:37 -08:00
cachefiles
Untangling ima mess, part 2: deal with counters
2009-12-16 12:16:47 -05:00
cifs
CIFS shouldn't make mountpoints shrinkable
2010-01-16 13:06:32 -05:00
coda
sysctl: Drop & in front of every proc_handler.
2009-11-18 08:37:40 -08:00
configfs
Fix configfs leak
2010-01-14 09:05:42 -05:00
cramfs
debugfs
get rid of pointless checks after simple_pin_fs()
2010-01-26 22:22:26 -05:00
devpts
devpts_get_tty() should validate inode
2009-12-11 15:18:05 -08:00
dlm
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/teigland/dlm
2009-12-10 09:33:59 -08:00
ecryptfs
ecryptfs: use after free
2010-01-19 22:36:06 -06:00
efs
exofs
exofs: simple_write_end does not mark_inode_dirty
2010-01-05 09:14:32 +02:00
exportfs
nfs: new subdir Documentation/filesystems/nfs
2009-10-27 19:34:04 -04:00
ext2
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6
2009-12-16 12:04:02 -08:00
ext3
ext3: Replace lock/unlock_super() with an explicit lock for resizing
2009-12-23 13:44:12 +01:00
ext4
ext4: Fix quota accounting error with fallocate
2010-01-25 04:00:31 -05:00
fat
Merge git://git.kernel.org/pub/scm/linux/kernel/git/hirofumi/fatfs-2.6
2009-12-16 10:29:26 -08:00
freevxfs
fscache
FS-Cache: Avoid maybe-used-uninitialised warning on variable
2009-12-16 07:20:13 -08:00
fuse
mm: flush dcache before writing into page to avoid alias
2010-02-02 18:11:21 -08:00
gfs2
GFS2: Use GFP_NOFS for alloc structure
2010-02-01 10:01:34 +00:00
hfs
hfs: fix a potential buffer overflow
2009-12-15 08:53:10 -08:00
hfsplus
hfsplus: refuse to mount volumes larger than 2TB
2009-10-29 07:39:27 -07:00
hostfs
hpfs
hpfs: use bitmap_weight()
2009-12-16 07:20:06 -08:00
hppfs
hppfs: handle ->put_link()
2010-01-14 09:05:25 -05:00
hugetlbfs
Untangling ima mess, part 1: alloc_file()
2009-12-16 12:16:47 -05:00
isofs
Merge branch 'for-2.6.33' of git://linux-nfs.org/~bfields/linux
2009-12-16 10:43:34 -08:00
jbd
jbd: jbd-debug and jbd2-debug should be writable
2009-12-23 13:44:13 +01:00
jbd2
jbd2: don't use __GFP_NOFAIL in journal_init_common()
2009-12-23 08:05:15 -05:00
jffs2
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6
2009-12-16 12:04:02 -08:00
jfs
jfs: Fix 32bit build warning
2009-12-22 12:27:35 -05:00
lockd
Merge branch 'for-2.6.33' of git://linux-nfs.org/~bfields/linux
2009-12-16 10:43:34 -08:00
minix
V3 minixfs: add missing directory type checking
2009-09-23 07:39:57 -07:00
ncpfs
tree-wide: fix assorted typos all over the place
2009-12-04 15:39:55 +01:00
nfs
nfs: fix oops in nfs_rename()
2010-01-06 18:48:26 -05:00
nfs_common
nfsd
Merge branch 'for-2.6.33' of git://linux-nfs.org/~bfields/linux
2010-01-06 18:10:15 -08:00
nilfs2
nilfs2: Storage class should be before const qualifier
2009-12-25 13:01:50 +09:00
nls
Merge git://git.kernel.org/pub/scm/linux/kernel/git/hirofumi/fatfs-2.6
2009-09-30 09:31:14 -07:00
notify
inotify: only warn once for inotify problems
2010-01-15 14:49:23 -08:00
ntfs
kill I_LOCK
2009-12-17 11:03:25 -05:00
ocfs2
ocfs2: Handle O_DIRECT when writing to a refcounted cluster.
2009-12-30 19:53:35 -08:00
omfs
tree-wide: fix assorted typos all over the place
2009-12-04 15:39:55 +01:00
openpromfs
partitions
partitions: read whole sector with EFI GPT header
2009-11-23 09:29:58 +01:00
proc
fix autofs/afs/etc. magic mountpoint breakage
2010-01-14 09:05:25 -05:00
qnx4
qnx4: use hweight8
2009-12-16 07:20:18 -08:00
quota
quota: Fix dquot_transfer for filesystems different from ext4
2010-01-11 13:06:41 +01:00
ramfs
nommu: fix shared mmap after truncate shrinkage problems
2010-01-16 12:15:40 -08:00
reiserfs
reiserfs: Fix vmalloc call under reiserfs lock
2010-01-28 13:43:50 +01:00
romfs
fix leak in romfs_fill_super()
2010-01-26 22:22:26 -05:00
smbfs
fs: Make unload_nls() NULL pointer safe
2009-09-24 07:47:42 -04:00
squashfs
const: mark remaining super_operations const
2009-09-22 07:17:24 -07:00
sysfs
sysfs: Add lockdep annotations for the sysfs active reference
2010-01-04 12:34:46 -08:00
sysv
ubifs
lib: Introduce generic list_sort function
2010-01-12 21:02:00 -08:00
udf
udf: Avoid IO in udf_clear_inode
2009-12-14 21:40:04 +01:00
ufs
ufs: NFS support
2009-12-16 07:20:06 -08:00
xfs
xfs: xfs_swap_extents needs to handle dynamic fork offsets
2010-01-15 13:49:07 -06:00
aio.c
aio: remove unused field
2009-12-16 07:20:13 -08:00
anon_inodes.c
Sanitize f_flags helpers
2009-12-22 12:27:34 -05:00
attr.c
truncate: new helpers
2009-09-24 08:41:47 -04:00
bad_inode.c
binfmt_aout.c
Split 'flush_old_exec' into two functions
2010-01-29 08:22:01 -08:00
binfmt_elf.c
Split 'flush_old_exec' into two functions
2010-01-29 08:22:01 -08:00
binfmt_elf_fdpic.c
Split 'flush_old_exec' into two functions
2010-01-29 08:22:01 -08:00
binfmt_em86.c
binfmt_flat.c
Split 'flush_old_exec' into two functions
2010-01-29 08:22:01 -08:00
binfmt_misc.c
binfmt_script.c
binfmt_som.c
Split 'flush_old_exec' into two functions
2010-01-29 08:22:01 -08:00
bio-integrity.c
block: fix bugs in bio-integrity mempool usage
2010-01-30 20:28:19 +01:00
bio.c
block: fix bio_add_page for non trivial merge_bvec_fn case
2010-01-28 15:08:29 +01:00
block_dev.c
Merge branch 'for-linus' into for-2.6.33
2009-11-03 21:14:39 +01:00
buffer.c
Merge branch 'writeback' of git://git.kernel.dk/linux-2.6-block
2009-09-25 09:27:30 -07:00
char_dev.c
fs/char_dev.c: remove useless loop
2009-09-24 07:21:03 -07:00
compat.c
compat.c: Remove dependence on nfsd private headers
2009-12-14 18:12:10 -05:00
compat_binfmt_elf.c
compat_ioctl.c
compat_ioctl: Supress "unknown cmd" message on serial /dev/console
2010-01-20 15:03:26 -08:00
dcache.c
libfs: move EXPORT_SYMBOL for d_alloc_name
2009-12-16 12:16:48 -05:00
dcookies.c
direct-io.c
dio: fix use-after-free
2009-12-17 04:52:13 -05:00
drop_caches.c
sysctl: remove "struct file *" argument of ->proc_handler
2009-09-24 07:21:04 -07:00
eventfd.c
eventfd - allow atomic read and waitqueue remove
2010-01-25 12:26:38 -02:00
eventpoll.c
anonfd: Allow making anon files read-only
2009-12-22 12:27:34 -05:00
exec.c
Fix 'flush_old_exec()/setup_new_exec()' split
2010-02-02 12:37:44 -08:00
fcntl.c
fnctl: f_modown should call write_lock_irqsave/restore
2010-01-26 17:25:38 -08:00
fifo.c
file.c
headers: remove sched.h from interrupt.h
2009-10-11 11:20:58 -07:00
file_table.c
alloc_file(): simplify handling of mnt_clone_write() errors
2009-12-22 12:27:33 -05:00
filesystems.c
fs-writeback.c
writeback: add missing kernel-doc notation
2010-01-02 10:09:44 -08:00
fs_struct.c
generic_acl.c
make generic_acl slightly more generic
2009-12-16 12:16:49 -05:00
inode.c
kill I_LOCK
2009-12-17 11:03:25 -05:00
internal.h
Fix f_flags/f_mode in case of lookup_instantiate_filp() from open(pathname, 3)
2009-12-22 12:27:34 -05:00
ioctl.c
__generic_block_fiemap(): fix for files bigger than 4GB
2009-11-12 07:26:01 -08:00
ioprio.c
Kconfig
Revert "task_struct: make journal_info conditional"
2009-12-17 13:23:24 -08:00
Kconfig.binfmt
libfs.c
libfs: move EXPORT_SYMBOL for d_alloc_name
2009-12-16 12:16:48 -05:00
locks.c
const: make lock_manager_operations const
2009-09-22 07:17:25 -07:00
Makefile
mbcache.c
mpage.c
namei.c
Fix the -ESTALE handling in do_filp_open()
2010-01-14 09:05:26 -05:00
namespace.c
do_add_mount() should sanitize mnt_flags
2010-01-16 13:07:36 -05:00
nfsctl.c
vfs: nfsctl.c un-used nfsd #includes
2009-12-14 18:12:11 -05:00
no-block.c
open.c
Sanitize f_flags helpers
2009-12-22 12:27:34 -05:00
pipe.c
fs: no games with DCACHE_UNHASHED
2009-12-17 10:51:40 -05:00
pnode.c
pnode.h
posix_acl.c
read_write.c
sendfile(): check f_op.splice_write() rather than f_op.sendpage()
2009-11-04 09:09:52 +01:00
read_write.h
readdir.c
select.c
headers: remove sched.h from poll.h
2009-10-04 15:05:10 -07:00
seq_file.c
vfs: seq_file: add helpers for data filling
2009-09-24 07:47:35 -04:00
signalfd.c
anonfd: Allow making anon files read-only
2009-12-22 12:27:34 -05:00
splice.c
sendfile(): check f_op.splice_write() rather than f_op.sendpage()
2009-11-04 09:09:52 +01:00
stack.c
VFS/fsstack: handle 32-bit smp + preempt + large files in fsstack_copy_inode_size
2009-12-17 10:58:17 -05:00
stat.c
Add unlocked version of inode_add_bytes() function
2009-12-23 13:33:54 +01:00
super.c
vfs: get_sb_single() - do not pass options twice
2009-12-23 11:23:43 -08:00
sync.c
fold do_sync_file_range into sys_sync_file_range
2009-12-17 11:03:25 -05:00
timerfd.c
anonfd: Allow making anon files read-only
2009-12-22 12:27:34 -05:00
utimes.c
xattr.c
sanitize xattr handler prototypes
2009-12-16 12:16:49 -05:00
xattr_acl.c
VFS: Use GFP_NOFS in posix_acl_from_xattr()
2009-12-03 11:48:07 +00:00