From patchwork Tue Jan 30 06:12:19 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amir Goldstein X-Patchwork-Id: 10191361 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 CF8B860388 for ; Tue, 30 Jan 2018 06:11:27 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BE999286E2 for ; Tue, 30 Jan 2018 06:11:27 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B3688286E3; Tue, 30 Jan 2018 06:11:27 +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.8 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, T_DKIM_INVALID 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 D83352892E for ; Tue, 30 Jan 2018 06:11:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752711AbeA3GL0 (ORCPT ); Tue, 30 Jan 2018 01:11:26 -0500 Received: from mail-wr0-f169.google.com ([209.85.128.169]:40924 "EHLO mail-wr0-f169.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752652AbeA3GLZ (ORCPT ); Tue, 30 Jan 2018 01:11:25 -0500 Received: by mail-wr0-f169.google.com with SMTP id i56so9752634wra.7; Mon, 29 Jan 2018 22:11:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ArlKhMvnu+nyUcfQzHE0NAfdW1kUM50sui8VZToLA4U=; b=OuOLBBTkt+BNeNEca/2bB4rcYKxWjwcmBcpMvoVJaIjxv6Iu3qe43TN0n25JG0rmRr HFSl/2e0HJ+jqxLGXVE6F6N5HVb4Ly2f/rs3046ZGZrN4OMfhNGFanTGq71P8FGgdsTF lfeYEpZMCT9gO/8ZE8TCaq67qPiRoZOqprcbcsqFhOn2hClxa6Rt4gJuSBxMhuRD+e4v iw4dcg0HtHwChDUU6VXe2O7RlTH3KyOnPy2YjaX0xZUIKgSX3p0A2gxn6cQNY0N+LDSf daGWRiUvvqz1rIXgmDdDVkBWSRSaS2n2Bn3UU99me6f7Wkwf/7pvaRB1YTTWQAGWqq0N +mWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=ArlKhMvnu+nyUcfQzHE0NAfdW1kUM50sui8VZToLA4U=; b=ZHqX/BKsle/qkxywBSkShds+CO6JZ2WCG5Fm9T01JtDky7Cs85TlGO0TdDmyE8Joyd aHrN5n+WJ4cp5KDU46ssoKtrs6TkqUq/qyZoHpZPwC7FL7Ei8eSsl32+ib5WcprZB1BF YwdxDevEa7UPAwxrrAz88k1TwrnPYepdlTk49fQ/miXOf+9vU7OUUUeZmOvNkS2SXKMx xGV6ctApciwLOVpyCuJFulkYQFU68ux1BSdXknlmBwHgD34CcX7QvNJaLq0/V+OtuBed kQwT9d6ujT2j1H9ckc13pH4dqNzKEx7gwGT9y9itK2qYmnHzYwGl/VwJ6s5HGCl6IWtY M1NQ== X-Gm-Message-State: AKwxytfoQO24RGxTg2uwv+hNwxceBMA4mApzcsYlHmuN08P6OqPMj3Qe W5KNblO2xHk/VpF6jOgxM0k= X-Google-Smtp-Source: AH8x224J0BLen7pWMLSdLzEuIpzQsjPPSwM/s/2AUMYY+RXv8Y8SWzXCu1j45MjRPeqIj9EXH8kYqQ== X-Received: by 10.223.199.207 with SMTP id y15mr20286186wrg.114.1517292683779; Mon, 29 Jan 2018 22:11:23 -0800 (PST) Received: from localhost.localdomain ([141.226.172.80]) by smtp.gmail.com with ESMTPSA id 62sm11384075wrg.57.2018.01.29.22.11.22 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 29 Jan 2018 22:11:23 -0800 (PST) From: Amir Goldstein To: Eryu Guan Cc: Miklos Szeredi , linux-unionfs@vger.kernel.org, fstests@vger.kernel.org Subject: [PATCH v4 2/5] overlay: test encode/decode overlay file handles Date: Tue, 30 Jan 2018 08:12:19 +0200 Message-Id: <1517292742-15624-3-git-send-email-amir73il@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1517292742-15624-1-git-send-email-amir73il@gmail.com> References: <1517292742-15624-1-git-send-email-amir73il@gmail.com> Sender: fstests-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: fstests@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP - Check encode/write/decode/read content of lower/upper file handles - Check encode/decode/write/read content of lower/upper file handles - Check decode/read of unlinked lower/upper files and directories - Check decode/read of lower file handles after copy up, link and unlink This test requires and enables overlayfs NFS export support. NFS export support depends on and requires overlayfs index feature. This test covers only encode/decode of file handles for overlayfs configuration of all layers on the same base fs. Signed-off-by: Amir Goldstein --- tests/overlay/050 | 239 ++++++++++++++++++++++++++++++++++++++++++++++++++ tests/overlay/050.out | 31 +++++++ tests/overlay/group | 1 + 3 files changed, 271 insertions(+) create mode 100755 tests/overlay/050 create mode 100644 tests/overlay/050.out diff --git a/tests/overlay/050 b/tests/overlay/050 new file mode 100755 index 0000000..31d9700 --- /dev/null +++ b/tests/overlay/050 @@ -0,0 +1,239 @@ +#! /bin/bash +# FS QA Test No. 050 +# +# Test encode/decode overlay file handles +# +# - Check encode/write/decode/read content of lower/upper file handles +# - Check encode/decode/write/read content of lower/upper file handles +# - Check decode/read of unlinked lower/upper files and directories +# - Check decode/read of lower file handles after copy up, link and unlink +# +# This test requires and enables overlayfs NFS export support. +# NFS export support depends on and requires overlayfs index feature. +# +#----------------------------------------------------------------------- +# Copyright (C) 2018 CTERA Networks. All Rights Reserved. +# Author: Amir Goldstein +# +# 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_program "open_by_handle" +# We need to require both features together, because nfs_export cannot +# be enabled when index is disabled +_require_scratch_overlay_features index nfs_export + +# All overlay dirs are on scratch partition +lower=$OVL_BASE_SCRATCH_MNT/$OVL_LOWER +upper=$OVL_BASE_SCRATCH_MNT/$OVL_UPPER +work=$OVL_BASE_SCRATCH_MNT/$OVL_WORK + +NUMFILES=1 + +# Create test dir and empty test files +create_test_files() +{ + local dir=$1 + + mkdir -p $dir + $here/src/open_by_handle -cp $dir $NUMFILES +} + +# Create hard links to test files +link_test_files() +{ + local dir=$1 + + $here/src/open_by_handle -l $dir $NUMFILES +} + +# Test encode/decode file handles on overlay mount +test_file_handles() +{ + local dir=$1 + local opt=$2 + + echo test_file_handles $dir $opt | _filter_scratch + $here/src/open_by_handle $opt $dir $NUMFILES +} + +# Re-create lower/upper/work dirs +create_dirs() +{ + _scratch_mkfs +} + +# Mount an overlay on $SCRATCH_MNT with all layers on scratch partition +mount_dirs() +{ + _scratch_mount -o "index=on,nfs_export=on" +} + +# Unmount the overlay without unmounting base fs +unmount_dirs() +{ + $UMOUNT_PROG $SCRATCH_MNT +} + +# Check non-stale file handles of lower/upper files and verify +# that handle encoded before copy up is decoded to upper after +# copy up. Verify reading data from file open by file handle +# and verify access_at() with dirfd open by file handle. +create_dirs +create_test_files $upper/uppertestdir +create_test_files $lower/lowertestdir +mount_dirs +# Check encode/decode of upper regular file handles +test_file_handles $SCRATCH_MNT/uppertestdir +# Check encode/decode of upper dir file handle +test_file_handles $SCRATCH_MNT/uppertestdir -p +# Check encode/write/decode/read/write of upper file handles +test_file_handles $SCRATCH_MNT/uppertestdir -wrap +# Check encode/decode of lower regular file handles before copy up +test_file_handles $SCRATCH_MNT/lowertestdir +# Check encode/decode of lower dir file handles before copy up +test_file_handles $SCRATCH_MNT/lowertestdir -p +# Check encode/write/decode/read/write of lower file handles across copy up +test_file_handles $SCRATCH_MNT/lowertestdir -wrap +unmount_dirs + +# Check copy up after encode/decode of lower/upper files +# (copy up of disconnected dentry to index dir) +create_dirs +create_test_files $upper/uppertestdir +create_test_files $lower/lowertestdir +mount_dirs +# Check encode/decode/write/read of upper regular file handles +test_file_handles $SCRATCH_MNT/uppertestdir -a +test_file_handles $SCRATCH_MNT/uppertestdir -r +# Check encode/decode/write/read of lower regular file handles +test_file_handles $SCRATCH_MNT/lowertestdir -a +test_file_handles $SCRATCH_MNT/lowertestdir -r +unmount_dirs + +# Check non-stale handles to unlinked but open lower/upper files +create_dirs +create_test_files $upper/uppertestdir +create_test_files $upper/uppertestdir.rw +create_test_files $lower/lowertestdir +create_test_files $lower/lowertestdir.rw +mount_dirs +test_file_handles $SCRATCH_MNT/uppertestdir -dk +# Check encode/write/unlink/decode/read of upper regular file handles +test_file_handles $SCRATCH_MNT/uppertestdir.rw -rwdk +test_file_handles $SCRATCH_MNT/lowertestdir -dk +# Check encode/write/unlink/decode/read of lower file handles across copy up +test_file_handles $SCRATCH_MNT/lowertestdir.rw -rwdk +unmount_dirs + +# Check stale handles of unlinked lower/upper files (nlink = 0) +create_dirs +create_test_files $upper/uppertestdir +create_test_files $lower/lowertestdir +mount_dirs +# Check decode of upper file handles after unlink/rmdir (nlink == 0) +test_file_handles $SCRATCH_MNT/uppertestdir -dp +# Check decode of lower file handles after unlink/rmdir (nlink == 0) +test_file_handles $SCRATCH_MNT/lowertestdir -dp +unmount_dirs + +# Check non-stale file handles of linked lower/upper files (nlink = 2,1) +create_dirs +create_test_files $upper/uppertestdir +create_test_files $lower/lowertestdir +mount_dirs +# Check decode/read of upper file handles after link (nlink == 2) +test_file_handles $SCRATCH_MNT/uppertestdir -wlr +# Check decode/read of upper file handles after link + unlink (nlink == 1) +test_file_handles $SCRATCH_MNT/uppertestdir -ur +# Check decode/read of lower file handles after copy up + link (nlink == 2) +test_file_handles $SCRATCH_MNT/lowertestdir -wlr +# Check decode/read of lower file handles after copy up + link + unlink (nlink == 1) +test_file_handles $SCRATCH_MNT/lowertestdir -ur +unmount_dirs + +# Check non-stale file handles of linked lower/upper hardlinks (nlink = 2,1) +create_dirs +create_test_files $upper/uppertestdir +create_test_files $lower/lowertestdir +# Create lower/upper hardlinks +link_test_files $lower/lowertestdir +link_test_files $upper/uppertestdir +mount_dirs +# Check encode/decode of upper hardlink file handles (nlink == 2) +test_file_handles $SCRATCH_MNT/uppertestdir +# Check decode/read of upper hardlink file handles after unlink (nlink == 1) +test_file_handles $SCRATCH_MNT/uppertestdir -wur +# Check encode/decode of lower hardlink file handles before copy up (nlink == 2) +test_file_handles $SCRATCH_MNT/lowertestdir +# Check decode/read of lower hardlink file handles after copy up + unlink (nlink == 1) +test_file_handles $SCRATCH_MNT/lowertestdir -wur +unmount_dirs + +# Check stale file handles of unlinked lower/upper hardlinks (nlink = 2,0) +create_dirs +create_test_files $upper/uppertestdir +create_test_files $lower/lowertestdir +# Create lower/upper hardlinks +link_test_files $lower/lowertestdir +link_test_files $upper/uppertestdir +mount_dirs +# Check encode/decode of upper hardlink file handles (nlink == 2) +test_file_handles $SCRATCH_MNT/uppertestdir +# Check decode of upper hardlink file handles after 2*unlink (nlink == 0) +test_file_handles $SCRATCH_MNT/uppertestdir -d +# Check encode/decode of lower hardlink file handles before copy up (nlink == 2) +test_file_handles $SCRATCH_MNT/lowertestdir +# Check decode of lower hardlink file handles after copy up + 2*unlink (nlink == 0) +test_file_handles $SCRATCH_MNT/lowertestdir -d +unmount_dirs + +# Check non-stale file handles of lower/upper renamed files +create_dirs +create_test_files $upper/uppertestdir +create_test_files $lower/lowertestdir +mount_dirs +# Check decode/read of upper file handles after rename in same upper parent +test_file_handles $SCRATCH_MNT/uppertestdir -wmr +# Check decode/read of lower file handles after copy up + rename in same merge parent +test_file_handles $SCRATCH_MNT/lowertestdir -wmr +unmount_dirs + +status=0 +exit diff --git a/tests/overlay/050.out b/tests/overlay/050.out new file mode 100644 index 0000000..6e3d0be --- /dev/null +++ b/tests/overlay/050.out @@ -0,0 +1,31 @@ +QA output created by 050 +test_file_handles SCRATCH_MNT/uppertestdir +test_file_handles SCRATCH_MNT/uppertestdir -p +test_file_handles SCRATCH_MNT/uppertestdir -wrap +test_file_handles SCRATCH_MNT/lowertestdir +test_file_handles SCRATCH_MNT/lowertestdir -p +test_file_handles SCRATCH_MNT/lowertestdir -wrap +test_file_handles SCRATCH_MNT/uppertestdir -a +test_file_handles SCRATCH_MNT/uppertestdir -r +test_file_handles SCRATCH_MNT/lowertestdir -a +test_file_handles SCRATCH_MNT/lowertestdir -r +test_file_handles SCRATCH_MNT/uppertestdir -dk +test_file_handles SCRATCH_MNT/uppertestdir.rw -rwdk +test_file_handles SCRATCH_MNT/lowertestdir -dk +test_file_handles SCRATCH_MNT/lowertestdir.rw -rwdk +test_file_handles SCRATCH_MNT/uppertestdir -dp +test_file_handles SCRATCH_MNT/lowertestdir -dp +test_file_handles SCRATCH_MNT/uppertestdir -wlr +test_file_handles SCRATCH_MNT/uppertestdir -ur +test_file_handles SCRATCH_MNT/lowertestdir -wlr +test_file_handles SCRATCH_MNT/lowertestdir -ur +test_file_handles SCRATCH_MNT/uppertestdir +test_file_handles SCRATCH_MNT/uppertestdir -wur +test_file_handles SCRATCH_MNT/lowertestdir +test_file_handles SCRATCH_MNT/lowertestdir -wur +test_file_handles SCRATCH_MNT/uppertestdir +test_file_handles SCRATCH_MNT/uppertestdir -d +test_file_handles SCRATCH_MNT/lowertestdir +test_file_handles SCRATCH_MNT/lowertestdir -d +test_file_handles SCRATCH_MNT/uppertestdir -wmr +test_file_handles SCRATCH_MNT/lowertestdir -wmr diff --git a/tests/overlay/group b/tests/overlay/group index 4e138b9..18c26b7 100644 --- a/tests/overlay/group +++ b/tests/overlay/group @@ -50,3 +50,4 @@ 047 auto quick copyup hardlink 048 auto quick copyup hardlink 049 auto quick copyup redirect +050 auto quick copyup hardlink exportfs