* [PATCH 07/10] btrfs: fix wrong ctime when adding link
@ 2010-05-20 7:22 Miao Xie
2010-05-20 8:33 ` Christoph Hellwig
2010-05-20 9:01 ` Mike Fedyk
0 siblings, 2 replies; 5+ messages in thread
From: Miao Xie @ 2010-05-20 7:22 UTC (permalink / raw)
To: Chris Mason, Linux Btrfs
the ctime of file has not been updated when I create a link for it.
Steps to reproduce:
# touch file1
# stat -c %Z file1
1273592239
# link flink1 file1
# stat -c %Z file1
1273592239 <-- have not been updated
This patch fix this problem.
Signed-off-by: Miao Xie <miaox@cn.fujitsu.com>
---
fs/btrfs/inode.c | 8 ++++++--
1 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index a85b90c..5271887 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -4218,8 +4218,12 @@ int btrfs_add_link(struct btrfs_trans_handle *trans,
btrfs_i_size_write(parent_inode, parent_inode->i_size +
name_len * 2);
- parent_inode->i_mtime = parent_inode->i_ctime = CURRENT_TIME;
- ret = btrfs_update_inode(trans, root, parent_inode);
+ parent_inode->i_mtime = parent_inode->i_ctime = inode->i_ctime
+ = CURRENT_TIME;
+
+ ret = btrfs_update_inode(trans, root, inode);
+ if (!ret)
+ ret = btrfs_update_inode(trans, root, parent_inode);
}
return ret;
}
--
1.6.5.2
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 07/10] btrfs: fix wrong ctime when adding link
2010-05-20 7:22 [PATCH 07/10] btrfs: fix wrong ctime when adding link Miao Xie
@ 2010-05-20 8:33 ` Christoph Hellwig
2010-05-24 6:37 ` Shi Weihua
2010-05-20 9:01 ` Mike Fedyk
1 sibling, 1 reply; 5+ messages in thread
From: Christoph Hellwig @ 2010-05-20 8:33 UTC (permalink / raw)
To: Miao Xie; +Cc: Chris Mason, Linux Btrfs
On Thu, May 20, 2010 at 03:22:30PM +0800, Miao Xie wrote:
> the ctime of file has not been updated when I create a link for it.
>
> Steps to reproduce:
> # touch file1
> # stat -c %Z file1
> 1273592239
> # link flink1 file1
> # stat -c %Z file1
> 1273592239 <-- have not been updated
>
> This patch fix this problem.
Care to add a test to xfstests to check for this regression?
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 07/10] btrfs: fix wrong ctime when adding link
2010-05-20 7:22 [PATCH 07/10] btrfs: fix wrong ctime when adding link Miao Xie
2010-05-20 8:33 ` Christoph Hellwig
@ 2010-05-20 9:01 ` Mike Fedyk
2010-05-21 9:36 ` Miao Xie
1 sibling, 1 reply; 5+ messages in thread
From: Mike Fedyk @ 2010-05-20 9:01 UTC (permalink / raw)
To: miaox; +Cc: Chris Mason, Linux Btrfs
On Thu, May 20, 2010 at 12:22 AM, Miao Xie <miaox@cn.fujitsu.com> wrote=
:
> the ctime of file has not been updated when I create a link for it.
>
> Steps to reproduce:
> =C2=A0# touch file1
> =C2=A0# stat -c %Z file1
> =C2=A01273592239
> =C2=A0# link flink1 file1
> =C2=A0# stat -c %Z file1
> =C2=A01273592239 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 <-- have n=
ot been updated
>
> This patch fix this problem.
>
> Signed-off-by: Miao Xie <miaox@cn.fujitsu.com>
> ---
> =C2=A0fs/btrfs/inode.c | =C2=A0 =C2=A08 ++++++--
> =C2=A01 files changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
> index a85b90c..5271887 100644
> --- a/fs/btrfs/inode.c
> +++ b/fs/btrfs/inode.c
> @@ -4218,8 +4218,12 @@ int btrfs_add_link(struct btrfs_trans_handle *=
trans,
>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0btrfs_i_size_w=
rite(parent_inode, parent_inode->i_size +
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 name_len * 2);
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 parent_inode->i_mt=
ime =3D parent_inode->i_ctime =3D CURRENT_TIME;
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ret =3D btrfs_upda=
te_inode(trans, root, parent_inode);
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 parent_inode->i_mt=
ime =3D parent_inode->i_ctime =3D inode->i_ctime
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =3D CURRENT_TI=
ME;
> +
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ret =3D btrfs_upda=
te_inode(trans, root, inode);
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 if (!ret)
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 ret =3D btrfs_update_inode(trans, root, parent_inode);
You only update parent inode if write to current inode fails?
Also should you be updating the ctime of parent inode even with link
count of parent inode is not modified (btrfs always reports link count
of 1 on directories)?
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" =
in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 07/10] btrfs: fix wrong ctime when adding link
2010-05-20 9:01 ` Mike Fedyk
@ 2010-05-21 9:36 ` Miao Xie
0 siblings, 0 replies; 5+ messages in thread
From: Miao Xie @ 2010-05-21 9:36 UTC (permalink / raw)
To: Mike Fedyk; +Cc: Chris Mason, Linux Btrfs
on 2010-5-20 17:01, Mike Fedyk wrote:
> On Thu, May 20, 2010 at 12:22 AM, Miao Xie <miaox@cn.fujitsu.com> wrote:
>> the ctime of file has not been updated when I create a link for it.
>>
>> Steps to reproduce:
>> # touch file1
>> # stat -c %Z file1
>> 1273592239
>> # link flink1 file1
>> # stat -c %Z file1
>> 1273592239 <-- have not been updated
>>
>> This patch fix this problem.
>>
>> Signed-off-by: Miao Xie <miaox@cn.fujitsu.com>
>> ---
>> fs/btrfs/inode.c | 8 ++++++--
>> 1 files changed, 6 insertions(+), 2 deletions(-)
>>
>> diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
>> index a85b90c..5271887 100644
>> --- a/fs/btrfs/inode.c
>> +++ b/fs/btrfs/inode.c
>> @@ -4218,8 +4218,12 @@ int btrfs_add_link(struct btrfs_trans_handle *trans,
>>
>> btrfs_i_size_write(parent_inode, parent_inode->i_size +
>> name_len * 2);
>> - parent_inode->i_mtime = parent_inode->i_ctime = CURRENT_TIME;
>> - ret = btrfs_update_inode(trans, root, parent_inode);
>> + parent_inode->i_mtime = parent_inode->i_ctime = inode->i_ctime
>> + = CURRENT_TIME;
>> +
>> + ret = btrfs_update_inode(trans, root, inode);
>> + if (!ret)
>> + ret = btrfs_update_inode(trans, root, parent_inode);
>
> You only update parent inode if write to current inode fails?
I think if write to current inode fails, updating the parent inode is unnecessary,
it is better to do rollback.
>
> Also should you be updating the ctime of parent inode even with link
> count of parent inode is not modified (btrfs always reports link count
> of 1 on directories)?
the i_size of the parent inode is changed, so we must update the ctime of parent inode.
Thanks
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 07/10] btrfs: fix wrong ctime when adding link
2010-05-20 8:33 ` Christoph Hellwig
@ 2010-05-24 6:37 ` Shi Weihua
0 siblings, 0 replies; 5+ messages in thread
From: Shi Weihua @ 2010-05-24 6:37 UTC (permalink / raw)
To: Christoph Hellwig; +Cc: Miao Xie, Chris Mason, Linux Btrfs, xfs
cc xfstests ml
at 2010-5-20 16:33, Christoph Hellwig wrote:
> On Thu, May 20, 2010 at 03:22:30PM +0800, Miao Xie wrote:
>> the ctime of file has not been updated when I create a link for it.
>>
>> Steps to reproduce:
>> # touch file1
>> # stat -c %Z file1
>> 1273592239
>> # link flink1 file1
>> # stat -c %Z file1
>> 1273592239 <-- have not been updated
>>
>> This patch fix this problem.
>
> Care to add a test to xfstests to check for this regression?
did it.
Signed-off-by: Shi Weihua <shiwh@cn.fujitsu.com>
---
diff -urpN xfstests.orig/229 xfstests/229
--- xfstests.orig/229 1970-01-01 08:00:00.000000000 +0800
+++ xfstests/229 2010-05-28 11:27:14.000000000 +0800
@@ -0,0 +1,73 @@
+#! /bin/bash
+# FS QA Test No. 229
+#
+# Check ctime updated or not if file linked
+# See also http://marc.info/?l=linux-btrfs&m=127434439020230&w=2
+#
+#-----------------------------------------------------------------------
+# Copyright (c) 2010 FUJITSU LIMITED. All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it would be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+#-----------------------------------------------------------------------
+#
+# creator
+owner=shiwh@cn.fujitsu.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+_cleanup()
+{
+ if [ -a $TEST_DIR/ouch2 ]; then
+ rm -f $TEST_DIR/ouch2
+ fi
+ if [ -a $TEST_DIR/ouch ]; then
+ rm -f $TEST_DIR/ouch
+ fi
+}
+
+here=`pwd`
+
+# get standard environment, filters and checks
+. ./common.rc
+
+# real QA test starts here
+_supported_fs generic
+# only Linux supports fallocate
+_supported_os Linux
+
+# create a file and get its ctime
+touch $TEST_DIR/ouch
+ctime=`stat -c %Z $TEST_DIR/ouch`
+sleep 1
+
+# create a link to a file and get existing file's ctime
+link $TEST_DIR/ouch $TEST_DIR/ouch2
+ctime2=`stat -c %Z $TEST_DIR/ouch`
+
+# check ctime updated
+if [ $ctime2 -le $ctime ]; then
+ echo "ctime: $ctime -> $ctime2 "
+ echo "Fatal error: ctime not updated after link"
+ _cleanup
+ exit 1
+fi
+
+_cleanup
+
+echo "Test over."
+# success, all done
+status=0
+exit
diff -urpN xfstests.orig/229.out xfstests/229.out
--- xfstests.orig/229.out 1970-01-01 08:00:00.000000000 +0800
+++ xfstests/229.out 2010-05-28 11:27:14.000000000 +0800
@@ -0,0 +1,2 @@
+QA output created by 229
+Test over.
diff -urpN xfstests.orig/group xfstests/group
--- xfstests.orig/group 2010-05-07 23:32:13.000000000 +0800
+++ xfstests/group 2010-05-28 11:27:02.000000000 +0800
@@ -342,3 +342,4 @@ deprecated
226 auto enospc
227 auto fsr
228 rw auto prealloc quick
+229 auto
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2010-05-24 6:37 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-05-20 7:22 [PATCH 07/10] btrfs: fix wrong ctime when adding link Miao Xie
2010-05-20 8:33 ` Christoph Hellwig
2010-05-24 6:37 ` Shi Weihua
2010-05-20 9:01 ` Mike Fedyk
2010-05-21 9:36 ` Miao Xie
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).