All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andy Lutomirski <luto@amacapital.net>
To: linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	Linux FS Devel <linux-fsdevel@vger.kernel.org>
Cc: Dave Chinner <david@fromorbit.com>, Jan Kara <jack@suse.cz>,
	Al Viro <viro@zeniv.linux.org.uk>,
	Andy Lutomirski <luto@amacapital.net>
Subject: [PATCH v2 0/3] Rework mtime and ctime updates on mmaped writes
Date: Fri, 21 Dec 2012 13:28:25 -0800	[thread overview]
Message-ID: <cover.1356124965.git.luto@amacapital.net> (raw)

Writes via mmap currently update mtime and ctime in ->page_mkwrite.
This is unfortunate from a performance and a correctness point of view.
The file times should be updated after writes, not before (so that every
write eventually results in a fresh timestamp).  This is needed for
POSIX compliance.  More importantly (for me), ->page_mkwrite is called
periodically even on mlocked pages, and some filesystems can sleep in
mark_inode_dirty.

This patchset attempts to fix both issues at once.  It adds a new
address_space flag AS_CMTIME that is set atomically whenever the system
transfers a pte dirty bit to a struct page backed by the address_space.
This can happen with various locks held and when low on memory.

Later on, whenever syncing an inode (which happens indirectly in msync)
or whenever a vma is torn down, if AS_CMTIME is set, then the file times
are updated.  This happens in a context from which (I think) it's safe
to dirty inodes.

One nice property of this approach is that it requires no fs-specific
work.  It's actually quite a bit simpler than I expected.

I've tested this, and mtime and ctime are updated on munmap, exit, MS_SYNC,
and fsync after writing via mmap.  The times are also updated 30 seconds
after writing, all by themselves :)  xfstest #215 also passes.Lockdep has
no complaints.

Changes from v1:
 - inode_update_time_writable now locks against the fs freezer
 - Minor cleanups
 - Major changelog improvements

Andy Lutomirski (3):
  mm: Explicitly track when the page dirty bit is transferred from a
    pte
  mm: Update file times when inodes are written after mmaped writes
  Remove file_update_time from all mkwrite paths

 fs/9p/vfs_file.c        |  3 ---
 fs/btrfs/inode.c        |  4 +--
 fs/buffer.c             |  6 -----
 fs/ceph/addr.c          |  3 ---
 fs/ext4/inode.c         |  1 -
 fs/gfs2/file.c          |  3 ---
 fs/inode.c              | 72 ++++++++++++++++++++++++++++++++++++++-----------
 fs/nilfs2/file.c        |  1 -
 fs/sysfs/bin.c          |  2 --
 include/linux/fs.h      |  1 +
 include/linux/mm.h      |  1 +
 include/linux/pagemap.h |  3 +++
 mm/filemap.c            |  1 -
 mm/memory-failure.c     |  4 +--
 mm/memory.c             |  5 +---
 mm/mmap.c               |  4 +++
 mm/page-writeback.c     | 42 +++++++++++++++++++++++++++--
 mm/rmap.c               |  9 ++++---
 18 files changed, 115 insertions(+), 50 deletions(-)

-- 
1.7.11.7

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

WARNING: multiple messages have this Message-ID (diff)
From: Andy Lutomirski <luto@amacapital.net>
To: linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	Linux FS Devel <linux-fsdevel@vger.kernel.org>
Cc: Dave Chinner <david@fromorbit.com>, Jan Kara <jack@suse.cz>,
	Al Viro <viro@zeniv.linux.org.uk>,
	Andy Lutomirski <luto@amacapital.net>
Subject: [PATCH v2 0/3] Rework mtime and ctime updates on mmaped writes
Date: Fri, 21 Dec 2012 13:28:25 -0800	[thread overview]
Message-ID: <cover.1356124965.git.luto@amacapital.net> (raw)

Writes via mmap currently update mtime and ctime in ->page_mkwrite.
This is unfortunate from a performance and a correctness point of view.
The file times should be updated after writes, not before (so that every
write eventually results in a fresh timestamp).  This is needed for
POSIX compliance.  More importantly (for me), ->page_mkwrite is called
periodically even on mlocked pages, and some filesystems can sleep in
mark_inode_dirty.

This patchset attempts to fix both issues at once.  It adds a new
address_space flag AS_CMTIME that is set atomically whenever the system
transfers a pte dirty bit to a struct page backed by the address_space.
This can happen with various locks held and when low on memory.

Later on, whenever syncing an inode (which happens indirectly in msync)
or whenever a vma is torn down, if AS_CMTIME is set, then the file times
are updated.  This happens in a context from which (I think) it's safe
to dirty inodes.

One nice property of this approach is that it requires no fs-specific
work.  It's actually quite a bit simpler than I expected.

I've tested this, and mtime and ctime are updated on munmap, exit, MS_SYNC,
and fsync after writing via mmap.  The times are also updated 30 seconds
after writing, all by themselves :)  xfstest #215 also passes.Lockdep has
no complaints.

Changes from v1:
 - inode_update_time_writable now locks against the fs freezer
 - Minor cleanups
 - Major changelog improvements

Andy Lutomirski (3):
  mm: Explicitly track when the page dirty bit is transferred from a
    pte
  mm: Update file times when inodes are written after mmaped writes
  Remove file_update_time from all mkwrite paths

 fs/9p/vfs_file.c        |  3 ---
 fs/btrfs/inode.c        |  4 +--
 fs/buffer.c             |  6 -----
 fs/ceph/addr.c          |  3 ---
 fs/ext4/inode.c         |  1 -
 fs/gfs2/file.c          |  3 ---
 fs/inode.c              | 72 ++++++++++++++++++++++++++++++++++++++-----------
 fs/nilfs2/file.c        |  1 -
 fs/sysfs/bin.c          |  2 --
 include/linux/fs.h      |  1 +
 include/linux/mm.h      |  1 +
 include/linux/pagemap.h |  3 +++
 mm/filemap.c            |  1 -
 mm/memory-failure.c     |  4 +--
 mm/memory.c             |  5 +---
 mm/mmap.c               |  4 +++
 mm/page-writeback.c     | 42 +++++++++++++++++++++++++++--
 mm/rmap.c               |  9 ++++---
 18 files changed, 115 insertions(+), 50 deletions(-)

-- 
1.7.11.7


             reply	other threads:[~2012-12-21 21:28 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-12-21 21:28 Andy Lutomirski [this message]
2012-12-21 21:28 ` [PATCH v2 0/3] Rework mtime and ctime updates on mmaped writes Andy Lutomirski
2012-12-21 21:28 ` [PATCH v2 1/3] mm: Explicitly track when the page dirty bit is transferred from a pte Andy Lutomirski
2012-12-21 21:28   ` Andy Lutomirski
2012-12-21 21:28 ` [PATCH v2 2/3] mm: Update file times when inodes are written after mmaped writes Andy Lutomirski
2012-12-21 21:28   ` Andy Lutomirski
2012-12-22  8:29   ` Christoph Hellwig
2012-12-22  8:29     ` Christoph Hellwig
2012-12-22  8:43     ` Andy Lutomirski
2012-12-22  8:43       ` Andy Lutomirski
2012-12-31 16:11       ` Jan Kara
2012-12-31 16:11         ` Jan Kara
2013-01-03 17:49         ` Andy Lutomirski
2013-01-03 17:49           ` Andy Lutomirski
2013-01-03 18:56           ` Jan Kara
2013-01-03 18:56             ` Jan Kara
2012-12-24  8:36   ` Zheng Liu
2012-12-24  8:36     ` Zheng Liu
2012-12-21 21:28 ` [PATCH v2 3/3] Remove file_update_time from all mkwrite paths Andy Lutomirski
2012-12-21 21:28   ` Andy Lutomirski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=cover.1356124965.git.luto@amacapital.net \
    --to=luto@amacapital.net \
    --cc=david@fromorbit.com \
    --cc=jack@suse.cz \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=viro@zeniv.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.