| OLD | NEW |
| 1 /** | 1 /** |
| 2 * eCryptfs: Linux filesystem encryption layer | 2 * eCryptfs: Linux filesystem encryption layer |
| 3 * | 3 * |
| 4 * Copyright (C) 2007 International Business Machines Corp. | 4 * Copyright (C) 2007 International Business Machines Corp. |
| 5 * Author(s): Michael A. Halcrow <mahalcro@us.ibm.com> | 5 * Author(s): Michael A. Halcrow <mahalcro@us.ibm.com> |
| 6 * | 6 * |
| 7 * This program is free software; you can redistribute it and/or | 7 * This program is free software; you can redistribute it and/or |
| 8 * modify it under the terms of the GNU General Public License as | 8 * modify it under the terms of the GNU General Public License as |
| 9 * published by the Free Software Foundation; either version 2 of the | 9 * published by the Free Software Foundation; either version 2 of the |
| 10 * License, or (at your option) any later version. | 10 * License, or (at your option) any later version. |
| (...skipping 26 matching lines...) Expand all Loading... |
| 37 * Returns bytes written on success; less than zero on error | 37 * Returns bytes written on success; less than zero on error |
| 38 */ | 38 */ |
| 39 int ecryptfs_write_lower(struct inode *ecryptfs_inode, char *data, | 39 int ecryptfs_write_lower(struct inode *ecryptfs_inode, char *data, |
| 40 loff_t offset, size_t size) | 40 loff_t offset, size_t size) |
| 41 { | 41 { |
| 42 struct ecryptfs_inode_info *inode_info; | 42 struct ecryptfs_inode_info *inode_info; |
| 43 mm_segment_t fs_save; | 43 mm_segment_t fs_save; |
| 44 ssize_t rc; | 44 ssize_t rc; |
| 45 | 45 |
| 46 inode_info = ecryptfs_inode_to_private(ecryptfs_inode); | 46 inode_info = ecryptfs_inode_to_private(ecryptfs_inode); |
| 47 mutex_lock(&inode_info->lower_file_mutex); |
| 47 BUG_ON(!inode_info->lower_file); | 48 BUG_ON(!inode_info->lower_file); |
| 49 inode_info->lower_file->f_pos = offset; |
| 48 fs_save = get_fs(); | 50 fs_save = get_fs(); |
| 49 set_fs(get_ds()); | 51 set_fs(get_ds()); |
| 50 » rc = vfs_write(inode_info->lower_file, data, size, &offset); | 52 » rc = vfs_write(inode_info->lower_file, data, size, |
| 53 » » &inode_info->lower_file->f_pos); |
| 51 set_fs(fs_save); | 54 set_fs(fs_save); |
| 55 mutex_unlock(&inode_info->lower_file_mutex); |
| 52 mark_inode_dirty_sync(ecryptfs_inode); | 56 mark_inode_dirty_sync(ecryptfs_inode); |
| 53 return rc; | 57 return rc; |
| 54 } | 58 } |
| 55 | 59 |
| 56 /** | 60 /** |
| 57 * ecryptfs_write_lower_page_segment | 61 * ecryptfs_write_lower_page_segment |
| 58 * @ecryptfs_inode: The eCryptfs inode | 62 * @ecryptfs_inode: The eCryptfs inode |
| 59 * @page_for_lower: The page containing the data to be written to the | 63 * @page_for_lower: The page containing the data to be written to the |
| 60 * lower file | 64 * lower file |
| 61 * @offset_in_page: The offset in the @page_for_lower from which to | 65 * @offset_in_page: The offset in the @page_for_lower from which to |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 224 * Returns bytes read on success; 0 on EOF; less than zero on error | 228 * Returns bytes read on success; 0 on EOF; less than zero on error |
| 225 */ | 229 */ |
| 226 int ecryptfs_read_lower(char *data, loff_t offset, size_t size, | 230 int ecryptfs_read_lower(char *data, loff_t offset, size_t size, |
| 227 struct inode *ecryptfs_inode) | 231 struct inode *ecryptfs_inode) |
| 228 { | 232 { |
| 229 struct ecryptfs_inode_info *inode_info = | 233 struct ecryptfs_inode_info *inode_info = |
| 230 ecryptfs_inode_to_private(ecryptfs_inode); | 234 ecryptfs_inode_to_private(ecryptfs_inode); |
| 231 mm_segment_t fs_save; | 235 mm_segment_t fs_save; |
| 232 ssize_t rc; | 236 ssize_t rc; |
| 233 | 237 |
| 238 mutex_lock(&inode_info->lower_file_mutex); |
| 234 BUG_ON(!inode_info->lower_file); | 239 BUG_ON(!inode_info->lower_file); |
| 240 inode_info->lower_file->f_pos = offset; |
| 235 fs_save = get_fs(); | 241 fs_save = get_fs(); |
| 236 set_fs(get_ds()); | 242 set_fs(get_ds()); |
| 237 » rc = vfs_read(inode_info->lower_file, data, size, &offset); | 243 » rc = vfs_read(inode_info->lower_file, data, size, |
| 244 » » &inode_info->lower_file->f_pos); |
| 238 set_fs(fs_save); | 245 set_fs(fs_save); |
| 246 mutex_unlock(&inode_info->lower_file_mutex); |
| 239 return rc; | 247 return rc; |
| 240 } | 248 } |
| 241 | 249 |
| 242 /** | 250 /** |
| 243 * ecryptfs_read_lower_page_segment | 251 * ecryptfs_read_lower_page_segment |
| 244 * @page_for_ecryptfs: The page into which data for eCryptfs will be | 252 * @page_for_ecryptfs: The page into which data for eCryptfs will be |
| 245 * written | 253 * written |
| 246 * @offset_in_page: Offset in @page_for_ecryptfs from which to start | 254 * @offset_in_page: Offset in @page_for_ecryptfs from which to start |
| 247 * writing | 255 * writing |
| 248 * @size: The number of bytes to write into @page_for_ecryptfs | 256 * @size: The number of bytes to write into @page_for_ecryptfs |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 338 SetPageUptodate(ecryptfs_page); | 346 SetPageUptodate(ecryptfs_page); |
| 339 unlock_page(ecryptfs_page); | 347 unlock_page(ecryptfs_page); |
| 340 page_cache_release(ecryptfs_page); | 348 page_cache_release(ecryptfs_page); |
| 341 pos += num_bytes; | 349 pos += num_bytes; |
| 342 data_offset += num_bytes; | 350 data_offset += num_bytes; |
| 343 } | 351 } |
| 344 out: | 352 out: |
| 345 return rc; | 353 return rc; |
| 346 } | 354 } |
| 347 #endif /* 0 */ | 355 #endif /* 0 */ |
| OLD | NEW |