Index: fs/ecryptfs/read_write.c |
diff --git a/fs/ecryptfs/read_write.c b/fs/ecryptfs/read_write.c |
index 70902ce56c61f31b7fb5a0b7b06ea2237afde32c..0cc4fafd6552c3d8ddef02e38a81dad96eb6ff6f 100644 |
--- a/fs/ecryptfs/read_write.c |
+++ b/fs/ecryptfs/read_write.c |
@@ -44,11 +44,15 @@ int ecryptfs_write_lower(struct inode *ecryptfs_inode, char *data, |
ssize_t rc; |
inode_info = ecryptfs_inode_to_private(ecryptfs_inode); |
+ mutex_lock(&inode_info->lower_file_mutex); |
BUG_ON(!inode_info->lower_file); |
+ inode_info->lower_file->f_pos = offset; |
fs_save = get_fs(); |
set_fs(get_ds()); |
- rc = vfs_write(inode_info->lower_file, data, size, &offset); |
+ rc = vfs_write(inode_info->lower_file, data, size, |
+ &inode_info->lower_file->f_pos); |
set_fs(fs_save); |
+ mutex_unlock(&inode_info->lower_file_mutex); |
mark_inode_dirty_sync(ecryptfs_inode); |
return rc; |
} |
@@ -231,11 +235,15 @@ int ecryptfs_read_lower(char *data, loff_t offset, size_t size, |
mm_segment_t fs_save; |
ssize_t rc; |
+ mutex_lock(&inode_info->lower_file_mutex); |
BUG_ON(!inode_info->lower_file); |
+ inode_info->lower_file->f_pos = offset; |
fs_save = get_fs(); |
set_fs(get_ds()); |
- rc = vfs_read(inode_info->lower_file, data, size, &offset); |
+ rc = vfs_read(inode_info->lower_file, data, size, |
+ &inode_info->lower_file->f_pos); |
set_fs(fs_save); |
+ mutex_unlock(&inode_info->lower_file_mutex); |
return rc; |
} |