From 781d2873774ac1f0f73c680e4f1940b3b75ad3eb Mon Sep 17 00:00:00 2001 From: Erez Zadok Date: Fri, 15 Aug 2014 23:33:42 -0400 Subject: [PATCH] Wrapfs: properly copy meta-data after AIO operations from lower inode Signed-off-by: Mengyang Li Signed-off-by: Erez Zadok --- fs/wrapfs/file.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/fs/wrapfs/file.c b/fs/wrapfs/file.c index a565d545dbe1..fa28758f7935 100644 --- a/fs/wrapfs/file.c +++ b/fs/wrapfs/file.c @@ -280,7 +280,10 @@ static ssize_t wrapfs_aio_read(struct kiocb *iocb, const struct iovec *iov, err = lower_file->f_op->aio_read(iocb, iov, nr_segs, pos); iocb->ki_filp = file; fput(lower_file); - /* XXX: need to update upper inode atime as needed */ + /* update upper inode atime as needed */ + if (err >= 0 || err == -EIOCBQUEUED) + fsstack_copy_attr_atime(file->f_path.dentry->d_inode, + lower_file->f_path.dentry->d_inode); out: return err; } @@ -304,7 +307,13 @@ static ssize_t wrapfs_aio_write(struct kiocb *iocb, const struct iovec *iov, err = lower_file->f_op->aio_write(iocb, iov, nr_segs, pos); iocb->ki_filp = file; fput(lower_file); - /* XXX: need to update upper inode times/sizes as needed */ + /* update upper inode times/sizes as needed */ + if (err >= 0 || err == -EIOCBQUEUED) { + fsstack_copy_inode_size(file->f_path.dentry->d_inode, + lower_file->f_path.dentry->d_inode); + fsstack_copy_attr_times(file->f_path.dentry->d_inode, + lower_file->f_path.dentry->d_inode); + } out: return err; } -- 2.34.1