forked from Minki/linux
a5135eeab2
Must retrieve size before running filemap_fault so the kernel has an up-to-date size. This should have been caught by xfstests generic/246, but it was masked by orangefs_new_inode, which set i_size to PAGE_SIZE. When nothing caused a getattr prior to a pagefault, i_size was still PAGE_SIZE. Since xfstests only read 10 bytes, it did not catch this bug. When orangefs_new_inode was modified to perform a getattr instead, i_size was set to zero, as it was a newly created file. Then orangefs_file_write_iter did NOT set i_size. Instead it invalidated the attribute cache, which should have caused the next caller to retrieve i_size. But the fault handler did not know it was supposed to retrieve i_size. So during xfstests, i_size was still zero, and filemap_fault returned VM_FAULT_SIGBUS. Fixes xfstests generic/452. Signed-off-by: Martin Brandenburg <martin@omnibond.com> Signed-off-by: Mike Marshall <hubcap@omnibond.com> |
||
---|---|---|
.. | ||
acl.c | ||
dcache.c | ||
devorangefs-req.c | ||
dir.c | ||
downcall.h | ||
file.c | ||
inode.c | ||
Kconfig | ||
Makefile | ||
namei.c | ||
orangefs-bufmap.c | ||
orangefs-bufmap.h | ||
orangefs-cache.c | ||
orangefs-debug.h | ||
orangefs-debugfs.c | ||
orangefs-debugfs.h | ||
orangefs-dev-proto.h | ||
orangefs-kernel.h | ||
orangefs-mod.c | ||
orangefs-sysfs.c | ||
orangefs-sysfs.h | ||
orangefs-utils.c | ||
protocol.h | ||
super.c | ||
symlink.c | ||
upcall.h | ||
waitqueue.c | ||
xattr.c |