From patchwork Tue Nov 14 11:09:48 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chandan Rajendra X-Patchwork-Id: 10057373 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 195C8601D3 for ; Tue, 14 Nov 2017 11:09:25 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 19646295AA for ; Tue, 14 Nov 2017 11:09:25 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0E060295A9; Tue, 14 Nov 2017 11:09:25 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 53E78295A9 for ; Tue, 14 Nov 2017 11:09:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752092AbdKNLJX (ORCPT ); Tue, 14 Nov 2017 06:09:23 -0500 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:57834 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751831AbdKNLJW (ORCPT ); Tue, 14 Nov 2017 06:09:22 -0500 Received: from pps.filterd (m0098421.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id vAEB4FTx086565 for ; Tue, 14 Nov 2017 06:09:21 -0500 Received: from e31.co.us.ibm.com (e31.co.us.ibm.com [32.97.110.149]) by mx0a-001b2d01.pphosted.com with ESMTP id 2e7uwvb0y7-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Tue, 14 Nov 2017 06:09:21 -0500 Received: from localhost by e31.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 14 Nov 2017 04:09:20 -0700 Received: from b03cxnp08026.gho.boulder.ibm.com (9.17.130.18) by e31.co.us.ibm.com (192.168.1.131) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Tue, 14 Nov 2017 04:09:18 -0700 Received: from b03ledav001.gho.boulder.ibm.com (b03ledav001.gho.boulder.ibm.com [9.17.130.232]) by b03cxnp08026.gho.boulder.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id vAEB9Hpe852446; Tue, 14 Nov 2017 04:09:17 -0700 Received: from b03ledav001.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id CFF736E03A; Tue, 14 Nov 2017 04:09:17 -0700 (MST) Received: from localhost.localdomain.com (unknown [9.102.2.249]) by b03ledav001.gho.boulder.ibm.com (Postfix) with ESMTP id 096B36E035; Tue, 14 Nov 2017 04:09:15 -0700 (MST) From: Chandan Rajendra To: fstests@vger.kernel.org, amir73il@gmail.com Cc: Chandan Rajendra , linux-unionfs@vger.kernel.org, eguan@redhat.com Subject: [PATCH V2] overlay: Test consistent st_ino numbers for non-samefs scenario Date: Tue, 14 Nov 2017 16:39:48 +0530 X-Mailer: git-send-email 2.9.5 X-TM-AS-GCONF: 00 x-cbid: 17111411-8235-0000-0000-00000C8F6082 X-IBM-SpamModules-Scores: X-IBM-SpamModules-Versions: BY=3.00008065; HX=3.00000241; KW=3.00000007; PH=3.00000004; SC=3.00000240; SDB=6.00945699; UDB=6.00477295; IPR=6.00725996; BA=6.00005689; NDR=6.00000001; ZLA=6.00000005; ZF=6.00000009; ZB=6.00000000; ZP=6.00000000; ZH=6.00000000; ZU=6.00000002; MB=3.00018008; XFM=3.00000015; UTC=2017-11-14 11:09:20 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17111411-8236-0000-0000-00003E6F568E Message-Id: <20171114110948.31345-1-chandan@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-11-14_05:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1709140000 definitions=main-1711140151 Sender: fstests-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: fstests@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP This commit adds a test to verify consistent st_ino feature 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 The goal of this test is to verify that overlayfs returns consistent st_ino for the following scenarios, - Copy-up of lowerdir files - Rename files and drop dentry/inode cache - Remount the overlayfs instance Signed-off-by: Chandan Rajendra --- Changelog: v1->v2: Address review comments provided by Amir. 1. To succeed, the test now requires the underlying base filesystems to provide 32-bit inode numbers or the user to provide "xino" mount option. The test also requires that either overlayfs 'index' config feature to be enabled by default or to be enabled by using the 'index=on' mount option. 2. Require $TEST_DEV for use as Overlayfs' lowerdir. 3. Pass $OVERLAY_MOUNT_OPTIONS as argument to _overlay_scratch_mount_dirs(). tests/overlay/043 | 167 ++++++++++++++++++++++++++++++++++++++++++++++++++ tests/overlay/043.out | 2 + tests/overlay/group | 1 + 3 files changed, 170 insertions(+) create mode 100755 tests/overlay/043 create mode 100644 tests/overlay/043.out diff --git a/tests/overlay/043 b/tests/overlay/043 new file mode 100755 index 0000000..5778564 --- /dev/null +++ b/tests/overlay/043 @@ -0,0 +1,167 @@ +#! /bin/bash +# FSQA Test No. 043 +# +# Test constant inode numbers on non-samefs setup +# This is a variant of overlay/017 to test constant st_ino numbers for +# non-samefs setup. +# +# This simple test demonstrates a known issue with overlayfs: +# - stat file A shows inode number X +# - modify A to trigger copy up +# - stat file A shows inode number Y != X +# +# Also test if d_ino of readdir entries changes after copy up +# and if inode numbers persist after rename, drop caches and +# mount cycle. +# +# This test succeeds when either the underlying filesystems provide 32-bit +# inode numbers or when the xino mount option is provided. This test +# also requires that either overlayfs 'index' config feature to be enabled by +# default or to be enabled by using the 'index=on' mount option. +# +#----------------------------------------------------------------------- +# +# Copyright (C) 2017 IBM Corporation. All Rights Reserved. +# Author: Chandan Rajendra +# +# 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" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + 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_test_program "af_unix" +_require_test_program "t_dir_type" + +rm -f $seqres.full + +lowerdir=$OVL_BASE_TEST_DIR/$seq-ovl-lower +rm -rf $lowerdir +mkdir $lowerdir + +# Create our test files. +mkdir $lowerdir/dir +touch $lowerdir/file +ln -s $lowerdir/file $lowerdir/symlink +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 + +_scratch_mkfs >>$seqres.full 2>&1 + +upperdir=$OVL_BASE_SCRATCH_MNT/$OVL_UPPER +workdir=$OVL_BASE_SCRATCH_MNT/$OVL_WORK + +_overlay_scratch_mount_dirs $lowerdir $upperdir $workdir \ + $OVERLAY_MOUNT_OPTIONS + +FILES="dir file symlink chrdev blkdev fifo socket hardlink1 hardlink2" + +# Record inode numbers in format +function record_inode_numbers() +{ + dir=$1 + outfile=$2 + + for f in $FILES; do + ls -id $dir/$f + done | \ + while read ino file; do + echo $ino `basename $file` >> $outfile + done +} + +# Check inode numbers match recorder inode numbers +function check_inode_numbers() +{ + dir=$1 + before=$2 + after=$3 + + record_inode_numbers $dir $after + + # Test constant stat(2) st_ino - + # 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 f; do + $here/src/t_dir_type $dir $ino | grep -q $f || \ + echo "$f not found by ino $ino (from $before)" + done +} + +rm -f $tmp.* +testdir=$SCRATCH_MNT/test +mkdir -p $testdir + +# Record inode numbers before copy up +record_inode_numbers $SCRATCH_MNT $tmp.before + +for f in $FILES; do + # chown -h modifies all those file types + chown -h 100 $SCRATCH_MNT/$f +done + +# Compare inode numbers before/after copy up +check_inode_numbers $SCRATCH_MNT $tmp.before $tmp.after_copyup + +for f in $FILES; do + # move to another dir + mv $SCRATCH_MNT/$f $testdir/ +done + +echo 3 > /proc/sys/vm/drop_caches + +# Compare inode numbers before/after rename and drop caches +check_inode_numbers $testdir $tmp.after_copyup $tmp.after_move + +# Verify that the inode numbers survive a mount cycle +$UMOUNT_PROG $SCRATCH_MNT +_overlay_scratch_mount_dirs $lowerdir $upperdir $workdir \ + $OVERLAY_MOUNT_OPTIONS + +# Compare inode numbers before/after mount cycle +check_inode_numbers $testdir $tmp.after_move $tmp.after_cycle + +echo "Silence is golden" +status=0 +exit diff --git a/tests/overlay/043.out b/tests/overlay/043.out new file mode 100644 index 0000000..f90f0a5 --- /dev/null +++ b/tests/overlay/043.out @@ -0,0 +1,2 @@ +QA output created by 043 +Silence is golden diff --git a/tests/overlay/group b/tests/overlay/group index 782c39f..a99ff07 100644 --- a/tests/overlay/group +++ b/tests/overlay/group @@ -45,3 +45,4 @@ 040 auto quick 041 auto quick copyup nonsamefs 042 auto quick copyup hardlink +043 auto quick copyup nonsamefs