|
@@ -132,6 +132,11 @@ int ecryptfs_write(struct inode *ecryptfs_inode, char *data, loff_t offset,
|
|
|
size_t num_bytes = (PAGE_CACHE_SIZE - start_offset_in_page);
|
|
|
loff_t total_remaining_bytes = ((offset + size) - pos);
|
|
|
|
|
|
+ if (fatal_signal_pending(current)) {
|
|
|
+ rc = -EINTR;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
if (num_bytes > total_remaining_bytes)
|
|
|
num_bytes = total_remaining_bytes;
|
|
|
if (pos < offset) {
|
|
@@ -193,15 +198,19 @@ int ecryptfs_write(struct inode *ecryptfs_inode, char *data, loff_t offset,
|
|
|
}
|
|
|
pos += num_bytes;
|
|
|
}
|
|
|
- if ((offset + size) > ecryptfs_file_size) {
|
|
|
- i_size_write(ecryptfs_inode, (offset + size));
|
|
|
+ if (pos > ecryptfs_file_size) {
|
|
|
+ i_size_write(ecryptfs_inode, pos);
|
|
|
if (crypt_stat->flags & ECRYPTFS_ENCRYPTED) {
|
|
|
- rc = ecryptfs_write_inode_size_to_metadata(
|
|
|
+ int rc2;
|
|
|
+
|
|
|
+ rc2 = ecryptfs_write_inode_size_to_metadata(
|
|
|
ecryptfs_inode);
|
|
|
- if (rc) {
|
|
|
+ if (rc2) {
|
|
|
printk(KERN_ERR "Problem with "
|
|
|
"ecryptfs_write_inode_size_to_metadata; "
|
|
|
- "rc = [%d]\n", rc);
|
|
|
+ "rc = [%d]\n", rc2);
|
|
|
+ if (!rc)
|
|
|
+ rc = rc2;
|
|
|
goto out;
|
|
|
}
|
|
|
}
|