diff options
author | Miklos Szeredi <mszeredi@suse.cz> | 2008-07-04 09:35:17 +0200 |
---|---|---|
committer | Jens Axboe <jens.axboe@oracle.com> | 2008-07-04 09:52:14 +0200 |
commit | 32502b8413a77b54b9e19809404109590c32dfb7 (patch) | |
tree | c84b87396be32d529b9902a7261b772b1d919e8b /block/bsg.c | |
parent | ramfs: enable splice write (diff) | |
download | linux-32502b8413a77b54b9e19809404109590c32dfb7.tar.xz linux-32502b8413a77b54b9e19809404109590c32dfb7.zip |
splice: fix generic_file_splice_read() race with page invalidation
If a page was invalidated during splicing from file to a pipe, then
generic_file_splice_read() could return a short or zero count.
This manifested itself in rare I/O errors seen on nfs exported fuse
filesystems. This is because nfsd uses splice_direct_to_actor() to read
files, and fuse uses invalidate_inode_pages2() to invalidate stale data on
open.
Fix by redoing the page find/create if it was found to be truncated
(invalidated).
Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Diffstat (limited to 'block/bsg.c')
0 files changed, 0 insertions, 0 deletions