On 2013-05-23 14:31:43, Paul Taysom wrote: > When msync is called on a memory mapped file, that > data is not flushed to the disk. > > In Linux, msync calls fsync for the file. For ecryptfs, > fsync just calls the lower level file system's fsync. > Changed the ecryptfs fsync code to call filemap_write_and_wait > before calling the lower level fsync. > > Addresses the problem described in http://crbug.com/239536 > > Signed-off-by: Paul Taysom <taysom@xxxxxxxxxxxx> > --- Thanks, Paul! I've pushed this to the eCryptfs next branch: http://git.kernel.org/cgit/linux/kernel/git/tyhicks/ecryptfs.git/log/?h=next I also marked it for the stable kernel as affecting 3.6 and newer. As a side note, we need to make ecryptfs_fsync() more selective about what gets synced by using filemap_write_and_wait_range() and vfs_fsync_range(). Since we're already calling vfs_fsync() for the entire lower file, this patch is good enough for now. Tyler > fs/ecryptfs/file.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/fs/ecryptfs/file.c b/fs/ecryptfs/file.c > index 201f0a0..16f509d 100644 > --- a/fs/ecryptfs/file.c > +++ b/fs/ecryptfs/file.c > @@ -295,6 +295,7 @@ static int ecryptfs_release(struct inode *inode, struct file *file) > static int > ecryptfs_fsync(struct file *file, loff_t start, loff_t end, int datasync) > { > + filemap_write_and_wait(file->f_mapping); > return vfs_fsync(ecryptfs_file_to_lower(file), datasync); > } > > -- > 1.8.2.1 >
Attachment:
signature.asc
Description: Digital signature