From: Boaz Harrosh <bharrosh@panasas.com>
To: Nick Piggin <npiggin@suse.de>
Cc: Al Viro <viro@ZenIV.linux.org.uk>, Christoph Hellwig <hch@lst.de>,
linux-fsdevel@vger.kernel.org
Subject: Re: [patch] fix truncate inode time modification breakage
Date: Tue, 01 Jun 2010 17:10:05 +0300 [thread overview]
Message-ID: <4C0514BD.9070101@panasas.com> (raw)
In-Reply-To: <20100601133923.GT9453@laptop>
On 06/01/2010 04:39 PM, Nick Piggin wrote:
> It appears that I've broken inode time modifications on tmpfs/ext2.
> While ftruncate always updates these attributes, truncate must not
> unless size is changed. I hadn't actually understood that until
> Christoph told me.
>
> Confusion is increased because other filesystems get this wrong.
> Those without ->setattr or ->truncate get it wrong by default.
> Others appear to have problems too.
>
> I haven't gone through many yet, but is there any reason not to
> just do it in the vfs?
>
> ---
> fs/ext2/inode.c | 1 -
> fs/open.c | 3 +++
> fs/ramfs/file-nommu.c | 5 -----
> mm/shmem.c | 5 +++--
> 4 files changed, 6 insertions(+), 8 deletions(-)
>
> Index: linux-2.6/fs/ext2/inode.c
> ===================================================================
> --- linux-2.6.orig/fs/ext2/inode.c
> +++ linux-2.6/fs/ext2/inode.c
> @@ -1203,7 +1203,6 @@ int ext2_setsize(struct inode *inode, lo
>
> __ext2_truncate_blocks(inode, newsize);
>
> - inode->i_mtime = inode->i_ctime = CURRENT_TIME_SEC;
OK I was just investigating this. Please forgive my noviceness here:
So i_mtime is modifications time. i_ctime is creation time?
if I do ftrunc() (like dd skip=x) don't I want modification time changed
but creation time unchanged?
if I do chmod/chown do I want modification-time changed creation not?
open+truncate both m an c changed?
modification-time: is it any aspect of the file has changed? or just the actual data / size?
Confused?
Boaz
> if (inode_needs_sync(inode)) {
> sync_mapping_buffers(inode->i_mapping);
> ext2_sync_inode (inode);
> Index: linux-2.6/fs/open.c
> ===================================================================
> --- linux-2.6.orig/fs/open.c
> +++ linux-2.6/fs/open.c
> @@ -55,6 +55,9 @@ int do_truncate(struct dentry *dentry, l
> newattrs.ia_valid |= ret | ATTR_FORCE;
>
> mutex_lock(&dentry->d_inode->i_mutex);
> + /* Unlike ftruncate, truncate only updates times when size changes */
> + if (length != dentry->d_inode->i_size)
> + newattrs.ia_valid |= ATTR_MTIME|ATTR_CTIME;
> ret = notify_change(dentry, &newattrs);
> mutex_unlock(&dentry->d_inode->i_mutex);
> return ret;
> Index: linux-2.6/mm/shmem.c
> ===================================================================
> --- linux-2.6.orig/mm/shmem.c
> +++ linux-2.6/mm/shmem.c
> @@ -764,10 +764,11 @@ done2:
> static int shmem_notify_change(struct dentry *dentry, struct iattr *attr)
> {
> struct inode *inode = dentry->d_inode;
> + loff_t newsize = attr->ia_size;
> int error;
>
> - if (S_ISREG(inode->i_mode) && (attr->ia_valid & ATTR_SIZE)) {
> - loff_t newsize = attr->ia_size;
> + if (S_ISREG(inode->i_mode) && (attr->ia_valid & ATTR_SIZE) &&
> + newsize != inode->i_size) {
> struct page *page = NULL;
>
> if (newsize < inode->i_size) {
> Index: linux-2.6/fs/ramfs/file-nommu.c
> ===================================================================
> --- linux-2.6.orig/fs/ramfs/file-nommu.c
> +++ linux-2.6/fs/ramfs/file-nommu.c
> @@ -175,11 +175,6 @@ static int ramfs_nommu_setattr(struct de
> ret = ramfs_nommu_resize(inode, ia->ia_size, size);
> if (ret < 0 || ia->ia_valid == ATTR_SIZE)
> goto out;
> - } else {
> - /* we skipped the truncate but must still update
> - * timestamps
> - */
> - ia->ia_valid |= ATTR_MTIME|ATTR_CTIME;
> }
> }
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2010-06-01 14:10 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-06-01 13:39 [patch] fix truncate inode time modification breakage Nick Piggin
2010-06-01 13:48 ` Christoph Hellwig
2010-06-01 13:56 ` Nick Piggin
2010-06-02 19:55 ` [patch v2] " Nick Piggin
2010-06-02 20:08 ` Filesystem setattr/truncate notes and problems Nick Piggin
2010-06-03 7:28 ` Christoph Hellwig
2010-06-03 7:32 ` Christoph Hellwig
2010-06-03 9:50 ` Nick Piggin
2010-06-03 9:18 ` Nick Piggin
2010-06-03 9:26 ` Nick Piggin
2010-06-03 8:18 ` [patch v2] fix truncate inode time modification breakage Miklos Szeredi
2010-06-03 8:40 ` Boaz Harrosh
2010-06-03 9:05 ` Miklos Szeredi
2010-06-03 12:13 ` Boaz Harrosh
2010-06-03 9:14 ` Nick Piggin
2010-06-03 9:28 ` Miklos Szeredi
2010-06-03 10:07 ` Nick Piggin
2010-06-03 10:58 ` Miklos Szeredi
2010-06-03 11:09 ` Christoph Hellwig
2010-06-03 12:01 ` [patch v3] " Nick Piggin
2010-06-03 11:49 ` [patch v2] " Nick Piggin
2010-06-03 12:03 ` Miklos Szeredi
2010-06-01 14:10 ` Boaz Harrosh [this message]
2010-06-01 14:32 ` [patch] " Nick Piggin
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=4C0514BD.9070101@panasas.com \
--to=bharrosh@panasas.com \
--cc=hch@lst.de \
--cc=linux-fsdevel@vger.kernel.org \
--cc=npiggin@suse.de \
--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.