All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/3] overlay/017: Remove constant st_ino/d_ino test for hardlinks
@ 2017-11-18  5:58 Chandan Rajendra
  2017-11-18  5:58 ` [PATCH 2/3] overlay/018: Add constant d_ino test Chandan Rajendra
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Chandan Rajendra @ 2017-11-18  5:58 UTC (permalink / raw)
  To: fstests, amir73il; +Cc: Chandan Rajendra, linux-unionfs, eguan

Constant st_ino/d_ino for hardlinks requires "index" config
feature/mount option to be enabled. overlay/018 already tests constant
st_ino feature for hardlinks. A future commit will add constant d_ino
test to overlay/018 test.

Signed-off-by: Chandan Rajendra <chandan@linux.vnet.ibm.com>
---
 tests/overlay/017 | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/tests/overlay/017 b/tests/overlay/017
index e9c8525..03955d0 100755
--- a/tests/overlay/017
+++ b/tests/overlay/017
@@ -72,10 +72,8 @@ mknod $lowerdir/chrdev c 1 1
 mknod $lowerdir/blkdev b 1 1
 mknod $lowerdir/fifo p
 $here/src/af_unix $lowerdir/socket
-touch $lowerdir/hardlink1
-ln $lowerdir/hardlink1 $lowerdir/hardlink2
 
-FILES="dir file symlink chrdev blkdev fifo socket hardlink1 hardlink2"
+FILES="dir file symlink chrdev blkdev fifo socket"
 
 # Record inode numbers in format <ino> <basename>
 function record_inode_numbers()
-- 
2.9.5

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 2/3] overlay/018: Add constant d_ino test
  2017-11-18  5:58 [PATCH 1/3] overlay/017: Remove constant st_ino/d_ino test for hardlinks Chandan Rajendra
@ 2017-11-18  5:58 ` Chandan Rajendra
  2017-11-18 20:35   ` Amir Goldstein
  2017-11-18  5:58 ` [PATCH 3/3] overlay: Test hardlink breakage on non-samefs setup Chandan Rajendra
  2017-11-18 20:34 ` [PATCH 1/3] overlay/017: Remove constant st_ino/d_ino test for hardlinks Amir Goldstein
  2 siblings, 1 reply; 6+ messages in thread
From: Chandan Rajendra @ 2017-11-18  5:58 UTC (permalink / raw)
  To: fstests, amir73il; +Cc: Chandan Rajendra, linux-unionfs, eguan

Constant d_ino for hardlinks is possible only when "index" config
feature/mount option is enabled.

Signed-off-by: Chandan Rajendra <chandan@linux.vnet.ibm.com>
---
 tests/overlay/018 | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/tests/overlay/018 b/tests/overlay/018
index a4f67d1..6e026c1 100755
--- a/tests/overlay/018
+++ b/tests/overlay/018
@@ -50,6 +50,7 @@ _supported_fs overlay
 _supported_os Linux
 _require_scratch
 _require_scratch_feature index
+_require_test_program "t_dir_type"
 
 rm -f $seqres.full
 
@@ -65,14 +66,15 @@ ln $lowerdir/foo $lowerdir/bar
 # Record inode numbers in format <ino> <nlink>
 function record_ino_nlink()
 {
-	ls -li $FILES | awk '{ print $1, $3 }' > $1
+	ls -li $FILES | awk '{ print $1, $3, $10}' > $1
 }
 
 # Check inode numbers match recorded inode numbers
 function check_ino_nlink()
 {
-	before=$1
-	after=$2
+	dir=$1
+	before=$2
+	after=$3
 
 	record_ino_nlink $after
 
@@ -80,6 +82,13 @@ function check_ino_nlink()
 	#   Compare before..after - expect silence
 	# We use diff -u so out.bad will tell us which stage failed
 	diff -u $before $after
+
+	# Test constant readdir(3)/getdents(2) d_ino -
+	#   Expect to find file by inode number
+	cat $before | while read ino nlink f; do
+		$here/src/t_dir_type $dir $ino | grep -q $(basename $f) || \
+			echo "$(basename $f) not found by ino $ino (from $before)"
+	done
 }
 
 # Enable overlay index feature to prevent breaking hardlinks on copy up
@@ -104,14 +113,14 @@ echo "one" >> $bar
 
 echo "== After write one =="
 cat $FILES
-check_ino_nlink $tmp.before $tmp.after_one
+check_ino_nlink $SCRATCH_MNT $tmp.before $tmp.after_one
 
 # Verify that the hardlinks survive a mount cycle
 _scratch_cycle_mount index=on
 
 echo "== After mount cycle =="
 cat $FILES
-check_ino_nlink $tmp.after_one $tmp.after_cycle
+check_ino_nlink $SCRATCH_MNT $tmp.after_one $tmp.after_cycle
 
 # Drop caches to get the copied up hardlink out of cache
 echo 3 > /proc/sys/vm/drop_caches
@@ -121,7 +130,7 @@ echo "two" >> $foo
 
 echo "== After write two =="
 cat $FILES
-check_ino_nlink $tmp.after_one $tmp.after_two
+check_ino_nlink $SCRATCH_MNT $tmp.after_one $tmp.after_two
 
 status=0
 exit
-- 
2.9.5

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 3/3] overlay: Test hardlink breakage on non-samefs setup
  2017-11-18  5:58 [PATCH 1/3] overlay/017: Remove constant st_ino/d_ino test for hardlinks Chandan Rajendra
  2017-11-18  5:58 ` [PATCH 2/3] overlay/018: Add constant d_ino test Chandan Rajendra
@ 2017-11-18  5:58 ` Chandan Rajendra
  2017-11-18 20:36   ` Amir Goldstein
  2017-11-18 20:34 ` [PATCH 1/3] overlay/017: Remove constant st_ino/d_ino test for hardlinks Amir Goldstein
  2 siblings, 1 reply; 6+ messages in thread
From: Chandan Rajendra @ 2017-11-18  5:58 UTC (permalink / raw)
  To: fstests, amir73il; +Cc: Chandan Rajendra, linux-unionfs, eguan

This commit adds a test to check hardlink breakage when the overlayfs
instance is composed of two different underlying filesystem instances.

For example,
$ mount -t xfs /dev/loop0 /mnt/test
$ mount -t xfs /dev/loop1 /mnt/scratch
$ mkdir /mnt/scratch/upper
$ mkdir /mnt/scratch/work
$ mount -t overlay overlay -o lowerdir=/mnt/test \
        -o upperdir=/mnt/scratch/upper \
        -o workdir=/mnt/scratch/work /mnt/merge

Signed-off-by: Chandan Rajendra <chandan@linux.vnet.ibm.com>
---
 tests/overlay/044     | 145 ++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/overlay/044.out |  21 ++++++++
 tests/overlay/group   |   1 +
 3 files changed, 167 insertions(+)
 create mode 100755 tests/overlay/044
 create mode 100644 tests/overlay/044.out

diff --git a/tests/overlay/044 b/tests/overlay/044
new file mode 100755
index 0000000..9c0ff04
--- /dev/null
+++ b/tests/overlay/044
@@ -0,0 +1,145 @@
+#! /bin/bash
+# FSQA Test No. 044
+#
+# Test hardlink breakage on non-samefs setup
+# This is a variant of overlay/018 to test.
+#
+# This simple test demonstrates a known issue with overlayfs:
+# - file A and B are hardlinked in lower
+# - modify A to trigger copy up
+# - file A is no longer a hardlink of file B
+#
+#-----------------------------------------------------------------------
+#
+# Copyright (C) 2017 IBM Corporation. All Rights Reserved.
+# Author: Chandan Rajendra <chandan@linux.vnet.ibm.com>
+#
+# 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
+#-----------------------------------------------------------------------
+#
+
+seq=`basename $0`
+seqres=$RESULT_DIR/$seq
+echo "QA output created by $seq"
+
+tmp=/tmp/$$
+status=1	# failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	rm -f $tmp.*
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+
+# real QA test starts here
+_supported_fs overlay
+_supported_os Linux
+_require_scratch
+_require_test
+_require_scratch_feature index
+_require_test_program "t_dir_type"
+
+rm -f $seqres.full
+
+# Record inode numbers in format <ino> <nlink>
+function record_ino_nlink()
+{
+	ls -li $FILES | awk '{ print $1, $3, $10}' > $1
+}
+
+# Check inode numbers match recorded inode numbers
+function check_ino_nlink()
+{
+	dir=$1
+	before=$2
+	after=$3
+
+	record_ino_nlink $after
+
+	# Test constant stat(2) st_ino/st_nlink -
+	#   Compare before..after - expect silence
+	# We use diff -u so out.bad will tell us which stage failed
+	diff -u $before $after
+
+	# Test constant readdir(3)/getdents(2) d_ino -
+	#   Expect to find file by inode number
+	cat $before | while read ino nlink f; do
+		$here/src/t_dir_type $dir $ino | grep -q $(basename $f) || \
+			echo "$(basename $f) not found by ino $ino (from $before)"
+	done
+}
+
+lowerdir=$OVL_BASE_TEST_DIR/$seq-ovl-lower
+rm -rf $lowerdir
+mkdir $lowerdir
+
+# Create 2 hardlinked files in lower
+echo "zero" >> $lowerdir/foo
+ln $lowerdir/foo $lowerdir/bar
+
+_scratch_mkfs >>$seqres.full 2>&1
+
+upperdir=$OVL_BASE_SCRATCH_MNT/$OVL_UPPER
+workdir=$OVL_BASE_SCRATCH_MNT/$OVL_WORK
+
+# Enable overlay index feature to prevent breaking hardlinks on copy up
+OVERLAY_MOUNT_OPTIONS="${OVERLAY_MOUNT_OPTIONS} -o index=on"
+_overlay_scratch_mount_dirs $lowerdir $upperdir $workdir \
+			    $OVERLAY_MOUNT_OPTIONS
+
+rm -f $tmp.*
+
+foo=$SCRATCH_MNT/foo
+bar=$SCRATCH_MNT/bar
+
+FILES="$foo $bar"
+
+echo "== Before copy up =="
+cat $FILES
+record_ino_nlink $tmp.before
+
+# Modify content of one of the hardlinks
+# Intentionally modify the last hardlink in $FILES, so after mount cycle
+# when reading the first file in $FILES, last file won't be in inode/dcache
+echo "one" >> $bar
+
+echo "== After write one =="
+cat $FILES
+check_ino_nlink $SCRATCH_MNT $tmp.before $tmp.after_one
+
+# Verify that the hardlinks survive a mount cycle
+$UMOUNT_PROG $SCRATCH_MNT
+_overlay_scratch_mount_dirs $lowerdir $upperdir $workdir \
+			    $OVERLAY_MOUNT_OPTIONS
+
+echo "== After mount cycle =="
+cat $FILES
+check_ino_nlink $SCRATCH_MNT $tmp.after_one $tmp.after_cycle
+
+# Drop caches to get the copied up hardlink out of cache
+echo 3 > /proc/sys/vm/drop_caches
+
+# Modify content of the other hardlink
+echo "two" >> $foo
+
+echo "== After write two =="
+cat $FILES
+check_ino_nlink $SCRATCH_MNT $tmp.after_one $tmp.after_two
+
+status=0
+exit
diff --git a/tests/overlay/044.out b/tests/overlay/044.out
new file mode 100644
index 0000000..8e519e8
--- /dev/null
+++ b/tests/overlay/044.out
@@ -0,0 +1,21 @@
+QA output created by 044
+== Before copy up ==
+zero
+zero
+== After write one ==
+zero
+one
+zero
+one
+== After mount cycle ==
+zero
+one
+zero
+one
+== After write two ==
+zero
+one
+two
+zero
+one
+two
diff --git a/tests/overlay/group b/tests/overlay/group
index a99ff07..b32c6cd 100644
--- a/tests/overlay/group
+++ b/tests/overlay/group
@@ -46,3 +46,4 @@
 041 auto quick copyup nonsamefs
 042 auto quick copyup hardlink
 043 auto quick copyup nonsamefs
+044 auto quick copyup hardlink nonsamefs
-- 
2.9.5

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/3] overlay/017: Remove constant st_ino/d_ino test for hardlinks
  2017-11-18  5:58 [PATCH 1/3] overlay/017: Remove constant st_ino/d_ino test for hardlinks Chandan Rajendra
  2017-11-18  5:58 ` [PATCH 2/3] overlay/018: Add constant d_ino test Chandan Rajendra
  2017-11-18  5:58 ` [PATCH 3/3] overlay: Test hardlink breakage on non-samefs setup Chandan Rajendra
@ 2017-11-18 20:34 ` Amir Goldstein
  2 siblings, 0 replies; 6+ messages in thread
From: Amir Goldstein @ 2017-11-18 20:34 UTC (permalink / raw)
  To: Chandan Rajendra; +Cc: fstests, overlayfs, Eryu Guan

On Sat, Nov 18, 2017 at 7:58 AM, Chandan Rajendra
<chandan@linux.vnet.ibm.com> wrote:
> Constant st_ino/d_ino for hardlinks requires "index" config
> feature/mount option to be enabled. overlay/018 already tests constant
> st_ino feature for hardlinks. A future commit will add constant d_ino
> test to overlay/018 test.
>
> Signed-off-by: Chandan Rajendra <chandan@linux.vnet.ibm.com>

Looks good and tested.

Thanks,
Amir.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 2/3] overlay/018: Add constant d_ino test
  2017-11-18  5:58 ` [PATCH 2/3] overlay/018: Add constant d_ino test Chandan Rajendra
@ 2017-11-18 20:35   ` Amir Goldstein
  0 siblings, 0 replies; 6+ messages in thread
From: Amir Goldstein @ 2017-11-18 20:35 UTC (permalink / raw)
  To: Chandan Rajendra; +Cc: fstests, overlayfs, Eryu Guan

On Sat, Nov 18, 2017 at 7:58 AM, Chandan Rajendra
<chandan@linux.vnet.ibm.com> wrote:
> Constant d_ino for hardlinks is possible only when "index" config
> feature/mount option is enabled.
>
> Signed-off-by: Chandan Rajendra <chandan@linux.vnet.ibm.com>

Looks good and tested.

Thanks,
Amir.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 3/3] overlay: Test hardlink breakage on non-samefs setup
  2017-11-18  5:58 ` [PATCH 3/3] overlay: Test hardlink breakage on non-samefs setup Chandan Rajendra
@ 2017-11-18 20:36   ` Amir Goldstein
  0 siblings, 0 replies; 6+ messages in thread
From: Amir Goldstein @ 2017-11-18 20:36 UTC (permalink / raw)
  To: Chandan Rajendra; +Cc: fstests, overlayfs, Eryu Guan

On Sat, Nov 18, 2017 at 7:58 AM, Chandan Rajendra
<chandan@linux.vnet.ibm.com> wrote:
> This commit adds a test to check hardlink breakage when the overlayfs
> instance is composed of two different underlying filesystem instances.
>
> For example,
> $ mount -t xfs /dev/loop0 /mnt/test
> $ mount -t xfs /dev/loop1 /mnt/scratch
> $ mkdir /mnt/scratch/upper
> $ mkdir /mnt/scratch/work
> $ mount -t overlay overlay -o lowerdir=/mnt/test \
>         -o upperdir=/mnt/scratch/upper \
>         -o workdir=/mnt/scratch/work /mnt/merge
>
> Signed-off-by: Chandan Rajendra <chandan@linux.vnet.ibm.com>

Looks good and tested.

Thanks,
Amir.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2017-11-18 20:36 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-11-18  5:58 [PATCH 1/3] overlay/017: Remove constant st_ino/d_ino test for hardlinks Chandan Rajendra
2017-11-18  5:58 ` [PATCH 2/3] overlay/018: Add constant d_ino test Chandan Rajendra
2017-11-18 20:35   ` Amir Goldstein
2017-11-18  5:58 ` [PATCH 3/3] overlay: Test hardlink breakage on non-samefs setup Chandan Rajendra
2017-11-18 20:36   ` Amir Goldstein
2017-11-18 20:34 ` [PATCH 1/3] overlay/017: Remove constant st_ino/d_ino test for hardlinks Amir Goldstein

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.