* Directory mtime update issue (kernel 2.6.25)
@ 2008-06-18 14:45 Michael-John Turner
2008-06-18 16:33 ` Christoph Hellwig
0 siblings, 1 reply; 5+ messages in thread
From: Michael-John Turner @ 2008-06-18 14:45 UTC (permalink / raw)
To: xfs
Hi all,
I'm a recent convert to XFS and am experiencing something that I consider
rather odd. When I move a directory on the same filesystem, XFS updates the
directory's mtime, which is something I wouldn't expect to happen. I tested
the same set of commands on a tmpfs filesystem and the renamed directory's
mtime doesn't change. Similarly, when I move a file between directories on
an XFS filesystem, the file's mtime doesn't change (as expected).
Is this behaviour correct? I'm running Linux kernel 2.6.25.6 on an x86_64
system, filesystem mounted with the standard options (see below).
For example (~ and ~/tmp are the same filesystem, /home):
[0] mj@majestic:~/tmp$ mount |grep home
/dev/mapper/data-home on /home type xfs (rw)
[0] mj@majestic:~/tmp$ mkdir test
[0] mj@majestic:~/tmp$ ls -ld test
drwxr-sr-x 2 mj mj 6 Jun 18 15:28 test
[0] mj@majestic:~/tmp$ touch -t 200801011530 test
[0] mj@majestic:~/tmp$ ls -ld test
drwxr-sr-x 2 mj mj 6 Jan 1 15:30 test
[0] mj@majestic:~/tmp$ stat test
File: `test'
Size: 6 Blocks: 0 IO Block: 4096 directory
Device: fd00h/64768d Inode: 951267331 Links: 2
Access: (2755/drwxr-sr-x) Uid: ( 1000/ mj) Gid: ( 1000/ mj)
Access: 2008-01-01 15:30:00.000000000 +0000
Modify: 2008-01-01 15:30:00.000000000 +0000
Change: 2008-06-18 15:29:08.173750666 +0100
[0] mj@majestic:~/tmp$ mv test test1
[0] mj@majestic:~/tmp$ ls -ld test1
drwxr-sr-x 2 mj mj 6 Jan 1 15:30 test1
[0] mj@majestic:~/tmp$ mv test1 ..
[0] mj@majestic:~/tmp$ ls -ld ../test1
drwxr-sr-x 2 mj mj 6 Jun 18 15:30 ../test1
File: `../test1'
Size: 6 Blocks: 0 IO Block: 4096 directory
Device: fd00h/64768d Inode: 951267331 Links: 2
Access: (2755/drwxr-sr-x) Uid: ( 1000/ mj) Gid: ( 1000/ mj)
Access: 2008-01-01 15:30:00.000000000 +0000
Modify: 2008-06-18 15:30:02.814078187 +0100
Change: 2008-06-18 15:30:02.814078187 +0100
-mj
--
Michael-John Turner
mj@mjturner.net <> http://mjturner.net/
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Directory mtime update issue (kernel 2.6.25)
2008-06-18 14:45 Directory mtime update issue (kernel 2.6.25) Michael-John Turner
@ 2008-06-18 16:33 ` Christoph Hellwig
2008-06-18 19:10 ` Michael-John Turner
2008-06-18 22:30 ` Michael-John Turner
0 siblings, 2 replies; 5+ messages in thread
From: Christoph Hellwig @ 2008-06-18 16:33 UTC (permalink / raw)
To: Michael-John Turner; +Cc: xfs
On Wed, Jun 18, 2008 at 03:45:34PM +0100, Michael-John Turner wrote:
> Hi all,
>
> I'm a recent convert to XFS and am experiencing something that I consider
> rather odd. When I move a directory on the same filesystem, XFS updates the
> directory's mtime, which is something I wouldn't expect to happen. I tested
> the same set of commands on a tmpfs filesystem and the renamed directory's
> mtime doesn't change. Similarly, when I move a file between directories on
> an XFS filesystem, the file's mtime doesn't change (as expected).
>
> Is this behaviour correct? I'm running Linux kernel 2.6.25.6 on an x86_64
> system, filesystem mounted with the standard options (see below).
Posix says about rename(2):
Upon successful completion, rename() shall mark for update the st_ctime
and st_mtime fields of the parent directory of each file.
It doesn't mention anything about timestampt updates on the renamed
file nor the victim. Ext2 and friends update ctime on the renamed
inode and victim and have this comment:
/*
* Like most other Unix systems, set the ctime for inodes on a
* rename.
* inode_dec_link_count() will mark the inode dirty.
*/
XFS does indeed updated the mtime too for the case when the source is
a directory and we get a new parent but just the ctime in all other
cases, which seems highly dubious to me.
XFS also has an interesting comment on why ctime is updated at all:
/*
* We always want to hit the ctime on the source inode.
* We do it in the if clause above for the 'new_parent &&
* src_is_directory' case, and here we get all the other
* cases. This isn't strictly required by the standards
* since the source inode isn't really being changed,
* but old unix file systems did it and some incremental
* backup programs won't work without it.
*/
Below is an untested patch to always just update the ctime:
Index: linux-2.6-xfs/fs/xfs/xfs_rename.c
===================================================================
--- linux-2.6-xfs.orig/fs/xfs/xfs_rename.c 2008-06-18 18:24:38.000000000 +0200
+++ linux-2.6-xfs/fs/xfs/xfs_rename.c 2008-06-18 18:30:17.000000000 +0200
@@ -336,22 +336,18 @@ xfs_rename(
ASSERT(error != EEXIST);
if (error)
goto abort_return;
- xfs_ichgtime(src_ip, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG);
-
- } else {
- /*
- * We always want to hit the ctime on the source inode.
- * We do it in the if clause above for the 'new_parent &&
- * src_is_directory' case, and here we get all the other
- * cases. This isn't strictly required by the standards
- * since the source inode isn't really being changed,
- * but old unix file systems did it and some incremental
- * backup programs won't work without it.
- */
- xfs_ichgtime(src_ip, XFS_ICHGTIME_CHG);
}
/*
+ * We always want to hit the ctime on the source inode.
+ *
+ * This isn't strictly required by the standards since the source
+ * inode isn't really being changed, but old unix file systems did
+ * it and some incremental backup programs won't work without it.
+ */
+ xfs_ichgtime(src_ip, XFS_ICHGTIME_CHG);
+
+ /*
* Adjust the link count on src_dp. This is necessary when
* renaming a directory, either within one parent when
* the target existed, or across two parent directories.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Directory mtime update issue (kernel 2.6.25)
2008-06-18 16:33 ` Christoph Hellwig
@ 2008-06-18 19:10 ` Michael-John Turner
2008-06-19 8:21 ` Christoph Hellwig
2008-06-18 22:30 ` Michael-John Turner
1 sibling, 1 reply; 5+ messages in thread
From: Michael-John Turner @ 2008-06-18 19:10 UTC (permalink / raw)
To: Christoph Hellwig; +Cc: xfs
On Wed, Jun 18, 2008 at 12:33:56PM -0400, Christoph Hellwig wrote:
> XFS does indeed updated the mtime too for the case when the source is
> a directory and we get a new parent but just the ctime in all other
> cases, which seems highly dubious to me.
Thanks for the prompt reply and the patch. I'm surprised this hasn't been
mentioned before as every other Unix filesystem I've used has not updated
the moved file's mtime during a rename(2). It's also odd that XFS only
changes the mtime when there's a new parent.
What does everyone else think? Would it be possible to have this patch or a
similar one committed upstream?
-mj
--
Michael-John Turner
mj@mjturner.net <> http://mjturner.net/
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Directory mtime update issue (kernel 2.6.25)
2008-06-18 16:33 ` Christoph Hellwig
2008-06-18 19:10 ` Michael-John Turner
@ 2008-06-18 22:30 ` Michael-John Turner
1 sibling, 0 replies; 5+ messages in thread
From: Michael-John Turner @ 2008-06-18 22:30 UTC (permalink / raw)
To: Christoph Hellwig; +Cc: xfs
On Wed, Jun 18, 2008 at 12:33:56PM -0400, Christoph Hellwig wrote:
> Below is an untested patch to always just update the ctime:
Just a quick update - the patch does the trick and changes the rename(2)
behaviour to be what I expect. Now, when a directory is renamed, its mtime
doesn't change, even if it has a new parent.
-mj
--
Michael-John Turner
mj@mjturner.net <> http://mjturner.net/
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Directory mtime update issue (kernel 2.6.25)
2008-06-18 19:10 ` Michael-John Turner
@ 2008-06-19 8:21 ` Christoph Hellwig
0 siblings, 0 replies; 5+ messages in thread
From: Christoph Hellwig @ 2008-06-19 8:21 UTC (permalink / raw)
To: Michael-John Turner; +Cc: Christoph Hellwig, xfs
On Wed, Jun 18, 2008 at 08:10:45PM +0100, Michael-John Turner wrote:
> Thanks for the prompt reply and the patch. I'm surprised this hasn't been
> mentioned before as every other Unix filesystem I've used has not updated
> the moved file's mtime during a rename(2). It's also odd that XFS only
> changes the mtime when there's a new parent.
>
> What does everyone else think? Would it be possible to have this patch or a
> similar one committed upstream?
The patch also passes xfsqa, so it should be ready now.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2008-06-19 8:20 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-06-18 14:45 Directory mtime update issue (kernel 2.6.25) Michael-John Turner
2008-06-18 16:33 ` Christoph Hellwig
2008-06-18 19:10 ` Michael-John Turner
2008-06-19 8:21 ` Christoph Hellwig
2008-06-18 22:30 ` Michael-John Turner
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox