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;
}
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;
}