From patchwork Sun Jan 28 09:22:33 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amir Goldstein X-Patchwork-Id: 10187759 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 329F3602C8 for ; Sun, 28 Jan 2018 09:21:47 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3367228A15 for ; Sun, 28 Jan 2018 09:21:47 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2844728A28; Sun, 28 Jan 2018 09:21:47 +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 494B028A15 for ; Sun, 28 Jan 2018 09:21:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751534AbeA1JVp (ORCPT ); Sun, 28 Jan 2018 04:21:45 -0500 Received: from mail-wm0-f47.google.com ([74.125.82.47]:33256 "EHLO mail-wm0-f47.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751394AbeA1JVk (ORCPT ); Sun, 28 Jan 2018 04:21:40 -0500 Received: by mail-wm0-f47.google.com with SMTP id x4so40606203wmc.0; Sun, 28 Jan 2018 01:21:39 -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=0ZEVGPWi364HqECE7vN8DebOFR27AxeY0KIQmuxlEAo=; b=A15ZdCoZJaGWemauzri6EKRzQO1vW0f+dunaOLABPsfYamZVhGARR6yYzYKSggQ/3K 9vjnjaw/8qNYt4I5JN7/e3k+8h39gjAiG7hrQnYwTt+QtJkRdd6PWCxd38WZYzHDfmJs W0YPLdBbX7T556/0l1XoRlm7AHk4DDD3I+sWUYzCn3Fg+bHaE69FyBbe4Q84Q/nngPHQ 3F5zW/riLGoqc2HSUF/083JVJEyEEdbBI7itbO6viyDmC0oYyoDmA9Fwjo34BL81DswM qpWUhZZZcQpZHgJrRCYsN3OAU5PrXE28kOElFNkhJIKjV6DncNVb3W4LbA0durSc5/NV Bbrg== 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=0ZEVGPWi364HqECE7vN8DebOFR27AxeY0KIQmuxlEAo=; b=tiCc2qAZI8BxORReg6xQUb/AxGvkSu/L/sK2rU6uWbxW5GtM7qJEqm0ahd1M3WuKjr GVCJdW2UODcu/T+hvr4SokiLelqC54smvlLUmhlKB6dmxnH+um4ogadhWvpXEm1YHsRG Fy+fn2E8YMYpWasyjLBhh2YOzQ0WQaETjMy3vMdrAQy4rPqR8gh1YRNMu9KpFhH4MrEJ QpLWCwlr0bAgFhdIyKJ1ZEhVEToIrnfKrMYM4LbdKDS9sAJk0+ApbK7sJTMRV8NMwcCP WCH7fmLKb3YF56ccgORdm7aOb/oIv2LbTKpncF+rA/rQXf2R/BexjZIQWzjGBXXDNfoi X7wQ== X-Gm-Message-State: AKwxytcYa3eS1+dsxQs1tfNqnmYSlgJtj+nrTSrDSjfsonZhj94nlBDT W6xo2cp6AkdVcykXCp/IWUSAuw== X-Google-Smtp-Source: AH8x224O4BjLKA5TqHyQ0GpALlnGbXGSFtnGwZtK3n6Ksrb6q89r7nGWSRY+K2ON9ANAPr/VoexC+Q== X-Received: by 10.28.68.4 with SMTP id r4mr15643771wma.94.1517131298590; Sun, 28 Jan 2018 01:21:38 -0800 (PST) Received: from amir-VirtualBox.ctera.local (bzq-166-168-31-246.red.bezeqint.net. [31.168.166.246]) by smtp.gmail.com with ESMTPSA id l41sm20676260wrl.1.2018.01.28.01.21.37 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 28 Jan 2018 01:21:38 -0800 (PST) From: Amir Goldstein To: Eryu Guan Cc: Miklos Szeredi , linux-unionfs@vger.kernel.org, fstests@vger.kernel.org Subject: [PATCH v3 2/5] overlay: test encode/decode overlay file handles Date: Sun, 28 Jan 2018 11:22:33 +0200 Message-Id: <1517131356-8048-3-git-send-email-amir73il@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1517131356-8048-1-git-send-email-amir73il@gmail.com> References: <1517131356-8048-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 enables 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 | 237 ++++++++++++++++++++++++++++++++++++++++++++++++++ tests/overlay/050.out | 31 +++++++ tests/overlay/group | 1 + 3 files changed, 269 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..ab20b1f --- /dev/null +++ b/tests/overlay/050 @@ -0,0 +1,237 @@ +#! /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 enables 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" +_require_scratch_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 = 1,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 = 1,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