aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Rosenberg <drosen@google.com>2017-04-24 16:10:21 -0700
committerAmit Pundir <amit.pundir@linaro.org>2017-07-17 10:27:40 +0530
commit26e8a6c4328a5912e44cef0a3b5866c904daace5 (patch)
treee6857cf7fdfb28e96ca6a5daec864d8c0f4c3fb4
parentbeead096f9693c43f43e0a475d68bb57bd04804d (diff)
downloadlinaro-android-26e8a6c4328a5912e44cef0a3b5866c904daace5.tar.gz
ANDROID: sdcardfs: Copy meta-data from lower inode
From wrapfs commit 3ee9b365e38c ("Wrapfs: properly copy meta-data after AIO operations from lower inode") Signed-off-by: Daniel Rosenberg <drosen@google.com> Bug: 35766959 Change-Id: I9a789222e27a17b8d85ce61c45397d1839f9a675
-rw-r--r--fs/sdcardfs/file.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/fs/sdcardfs/file.c b/fs/sdcardfs/file.c
index 1f6921e2ffbf..6076c342dae6 100644
--- a/fs/sdcardfs/file.c
+++ b/fs/sdcardfs/file.c
@@ -358,9 +358,12 @@ ssize_t sdcardfs_read_iter(struct kiocb *iocb, struct iov_iter *iter)
get_file(lower_file); /* prevent lower_file from being released */
iocb->ki_filp = lower_file;
err = lower_file->f_op->read_iter(iocb, iter);
- /* ? wait IO finish to update atime as ecryptfs ? */
iocb->ki_filp = file;
fput(lower_file);
+ /* update upper inode atime as needed */
+ if (err >= 0 || err == -EIOCBQUEUED)
+ fsstack_copy_attr_atime(file->f_path.dentry->d_inode,
+ file_inode(lower_file));
out:
return err;
}
@@ -384,6 +387,13 @@ ssize_t sdcardfs_write_iter(struct kiocb *iocb, struct iov_iter *iter)
err = lower_file->f_op->write_iter(iocb, iter);
iocb->ki_filp = file;
fput(lower_file);
+ /* update upper inode times/sizes as needed */
+ if (err >= 0 || err == -EIOCBQUEUED) {
+ fsstack_copy_inode_size(file->f_path.dentry->d_inode,
+ file_inode(lower_file));
+ fsstack_copy_attr_times(file->f_path.dentry->d_inode,
+ file_inode(lower_file));
+ }
out:
return err;
}