Message ID | d59d6c9790bd3c36b93343ed91be5e0cda7e5f09.1376679411.git.luto@amacapital.net |
---|---|
State | Superseded, archived |
Headers | show |
On Fri, Aug 16, 2013 at 04:22:12PM -0700, Andy Lutomirski wrote: > A fancier implementation could probably avoid an extra journal > transaction by adding a mapping_test_clear_cmtime call in > ext4_writepages, but this should already be a considerable > improvement -- we'll start one transaction per writepages call > instead of one per page. I'd like to see more than just an ext4 implementation - btrfs and XFS are the other main filesystems that should behave identically. Also, it's worthwhile to write a generic xfstest to ensure that they all update the timestamp appropriately - if its' in xfstests, then we can basically guarantee that it won't get randomly regressed in future, and other filesystems can be easily verified as well sa their implement this. Cheers, Dave.
On Mon, Aug 19, 2013 at 7:38 PM, Dave Chinner <david@fromorbit.com> wrote: > On Fri, Aug 16, 2013 at 04:22:12PM -0700, Andy Lutomirski wrote: >> A fancier implementation could probably avoid an extra journal >> transaction by adding a mapping_test_clear_cmtime call in >> ext4_writepages, but this should already be a considerable >> improvement -- we'll start one transaction per writepages call >> instead of one per page. > > I'd like to see more than just an ext4 implementation - btrfs and > XFS are the other main filesystems that should behave identically. Will do. > > Also, it's worthwhile to write a generic xfstest to ensure that they > all update the timestamp appropriately - if its' in xfstests, then > we can basically guarantee that it won't get randomly regressed in > future, and other filesystems can be easily verified as well sa > their implement this. > Is there a guide to writing an xfstest? I've already written it as a standalone C program, so I assume it's easy. --Andy -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Mon, Aug 19, 2013 at 08:30:02PM -0700, Andy Lutomirski wrote: > On Mon, Aug 19, 2013 at 7:38 PM, Dave Chinner <david@fromorbit.com> wrote: > > On Fri, Aug 16, 2013 at 04:22:12PM -0700, Andy Lutomirski wrote: > >> A fancier implementation could probably avoid an extra journal > >> transaction by adding a mapping_test_clear_cmtime call in > >> ext4_writepages, but this should already be a considerable > >> improvement -- we'll start one transaction per writepages call > >> instead of one per page. > > > > I'd like to see more than just an ext4 implementation - btrfs and > > XFS are the other main filesystems that should behave identically. > > Will do. > > > > > Also, it's worthwhile to write a generic xfstest to ensure that they > > all update the timestamp appropriately - if its' in xfstests, then > > we can basically guarantee that it won't get randomly regressed in > > future, and other filesystems can be easily verified as well sa > > their implement this. > > > > Is there a guide to writing an xfstest? Yes. see the readme file in the root directory of the repository. Cheers, Dave.
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index dd32a2e..cee6b45 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -3236,6 +3236,7 @@ static const struct address_space_operations ext4_aops = { .readpages = ext4_readpages, .writepage = ext4_writepage, .writepages = ext4_writepages, + .flush_cmtime = generic_flush_cmtime, .write_begin = ext4_write_begin, .write_end = ext4_write_end, .bmap = ext4_bmap, @@ -3252,6 +3253,7 @@ static const struct address_space_operations ext4_journalled_aops = { .readpages = ext4_readpages, .writepage = ext4_writepage, .writepages = ext4_writepages, + .flush_cmtime = generic_flush_cmtime, .write_begin = ext4_write_begin, .write_end = ext4_journalled_write_end, .set_page_dirty = ext4_journalled_set_page_dirty, @@ -3268,6 +3270,7 @@ static const struct address_space_operations ext4_da_aops = { .readpages = ext4_readpages, .writepage = ext4_writepage, .writepages = ext4_writepages, + .flush_cmtime = generic_flush_cmtime, .write_begin = ext4_da_write_begin, .write_end = ext4_da_write_end, .bmap = ext4_bmap, @@ -5025,7 +5028,6 @@ int ext4_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) int retries = 0; sb_start_pagefault(inode->i_sb); - file_update_time(vma->vm_file); /* Delalloc case is easy... */ if (test_opt(inode->i_sb, DELALLOC) && !ext4_should_journal_data(inode) &&
A fancier implementation could probably avoid an extra journal transaction by adding a mapping_test_clear_cmtime call in ext4_writepages, but this should already be a considerable improvement -- we'll start one transaction per writepages call instead of one per page. Signed-off-by: Andy Lutomirski <luto@amacapital.net> --- fs/ext4/inode.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)