From patchwork Wed Sep 11 13:15:16 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kaixu Xia X-Patchwork-Id: 11141071 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2746814DB for ; Wed, 11 Sep 2019 13:15:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id F08E9206A5 for ; Wed, 11 Sep 2019 13:15:26 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="lK4+07D4" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727837AbfIKNP0 (ORCPT ); Wed, 11 Sep 2019 09:15:26 -0400 Received: from mail-pg1-f171.google.com ([209.85.215.171]:46360 "EHLO mail-pg1-f171.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728140AbfIKNPX (ORCPT ); Wed, 11 Sep 2019 09:15:23 -0400 Received: by mail-pg1-f171.google.com with SMTP id m3so11477610pgv.13; Wed, 11 Sep 2019 06:15:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=to:cc:from:subject:message-id:date:user-agent:mime-version :content-language:content-transfer-encoding; bh=Zl47yPfH6Kr1EkOq5zkhn2geLdB2W2XZBg+b14i8BaI=; b=lK4+07D4HLclYc6K+rIPH98Jp7NOWEEDtlBhNKrVCPU3iTLUlSNfL//7qqN+ORHmA1 Q2/xWvRIG/oTJfCq64vB+O3XKSYWukbl9y6L73Xk6u9Wm64Qh6ESizJSMQcg7sOYkXAN eP2uf6r3p5ZEDA8V10TxZXTlrYYljFSD8bDyD3pHze4acH2CpRqkNw9fbgkKf0cE4lWm 5ekgUhJ+/RTaO3s+5lVCZ/phgqDPwg8paFOnBCtg6XWhlF0EWEDm6vRiANDEiZbKWkvx TeKY7/VgxEem8jRJSoWsm4t74eqaJ/ElptfKacmiGAPZZhOZLNC2t8Eu68D1PDCMa9/J ySOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:to:cc:from:subject:message-id:date:user-agent :mime-version:content-language:content-transfer-encoding; bh=Zl47yPfH6Kr1EkOq5zkhn2geLdB2W2XZBg+b14i8BaI=; b=L01sBVY4nsAWUQm2WDNdnNa6PTzhOhAVNaQrk2Vmw8RfdJEmE1qkZ1uf1K57AHsLD9 4awosMJCMFKTskSrrIyHPmpd9YOGlH4BbOvUCOABIoYUtD2rfzo1p8WIYglxMTx3CHB9 80xtcvomSnOzLCF3zq96XMkSEskSyBgev/8bWsSMeX8ET9rKkUPjldA863uydMbOjfRf nvgPdWqbU0od5jURBlzvqvHOdLBOWiqQcpP2ghQlOMxZaxH6bUWkNnOwr+MmAPvf5Rwh La5KNgHkUrJg6y2fPUqYeQcKmeY40PuuTf9pNBw+MrQktf8Lc70cAVWX/+2MJTSVdWD4 cAUw== X-Gm-Message-State: APjAAAWouW82Q/CVRNFL1mj1j5oi4Vi9ggzsM5PVzWvm5tYBrDJXN3DK eRZ0r0VdHMs4/S4zpI+N3Q== X-Google-Smtp-Source: APXvYqyBzr/77EVk89VRsZoRnsDqDe8KmT7Ns0dDL87RbdGPS86b3te4ZiaDbvNMppOn8jpus8J0Xg== X-Received: by 2002:aa7:8c56:: with SMTP id e22mr979004pfd.255.1568207720742; Wed, 11 Sep 2019 06:15:20 -0700 (PDT) Received: from [10.76.90.34] ([203.205.141.123]) by smtp.gmail.com with ESMTPSA id w26sm23706249pfi.140.2019.09.11.06.15.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 11 Sep 2019 06:15:20 -0700 (PDT) To: fstests@vger.kernel.org Cc: linux-xfs@vger.kernel.org, Eryu Guan , "Darrick J. Wong" , newtongao@tencent.com, jasperwang@tencent.com From: kaixuxia Subject: [PATCH 1/2] common: check if a given rename flag is supported in _requires_renameat2 Message-ID: <719f7bb3-96db-7563-56d8-56ed765fabc4@gmail.com> Date: Wed, 11 Sep 2019 21:15:16 +0800 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.9.0 MIME-Version: 1.0 Content-Language: en-US Sender: fstests-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: fstests@vger.kernel.org Some testcases may require a special rename flag, such as RENAME_WHITEOUT, so add support check for if a given rename flag is supported in _requires_renameat2. Signed-off-by: kaixuxia --- common/renameat2 | 41 +++++++++++++++++++++++++++++++++++++++-- tests/generic/024 | 13 +++---------- tests/generic/025 | 13 +++---------- tests/generic/078 | 13 +++---------- 4 files changed, 48 insertions(+), 32 deletions(-) diff --git a/common/renameat2 b/common/renameat2 index f8d6d4f..7bb81e0 100644 --- a/common/renameat2 +++ b/common/renameat2 @@ -103,10 +103,47 @@ _rename_tests() # _requires_renameat2() { + local flags=$1 + local rename_dir=$TEST_DIR/$$ + if test ! -x src/renameat2; then _notrun "renameat2 binary not found" fi - if ! src/renameat2 -t; then - _notrun "kernel doesn't support renameat2 syscall" + + if test -z "$flags"; then + src/renameat2 -t + [ $? -eq 0 ] || _notrun "kernel doesn't support renameat2 syscall" + return fi + + case $flags in + "noreplace") + mkdir $rename_dir + touch $rename_dir/foo + if ! src/renameat2 -t -n $rename_dir/foo $rename_dir/bar; then + rm -f $rename_dir/foo $rename_dir/bar; rmdir $rename_dir + _notrun "fs doesn't support RENAME_NOREPLACE" + fi + ;; + "exchange") + mkdir $rename_dir + touch $rename_dir/foo $rename_dir/bar + if ! src/renameat2 -t -x $rename_dir/foo $rename_dir/bar; then + rm -f $rename_dir/foo $rename_dir/bar; rmdir $rename_dir + _notrun "fs doesn't support RENAME_EXCHANGE" + fi + ;; + "whiteout") + mkdir $rename_dir + touch $rename_dir/foo $rename_dir/bar + if ! src/renameat2 -t -w $rename_dir/foo $rename_dir/bar; then + rm -f $rename_dir/foo $rename_dir/bar; rmdir $rename_dir + _notrun "fs doesn't support RENAME_WHITEOUT" + fi + ;; + *) + _notrun "only support noreplace,exchange,whiteout rename flags, please check." + ;; + esac + rm -fr $rename_dir } diff --git a/tests/generic/024 b/tests/generic/024 index 2888c66..9c1161a 100755 --- a/tests/generic/024 +++ b/tests/generic/024 @@ -29,20 +29,13 @@ _supported_fs generic _supported_os Linux _require_test -_requires_renameat2 +_requires_renameat2 noreplace _require_test_symlinks -rename_dir=$TEST_DIR/$$ -mkdir $rename_dir -touch $rename_dir/foo -if ! src/renameat2 -t -n $rename_dir/foo $rename_dir/bar; then - rm -f $rename_dir/foo $rename_dir/bar; rmdir $rename_dir - _notrun "fs doesn't support RENAME_NOREPLACE" -fi -rm -f $rename_dir/foo $rename_dir/bar - # real QA test starts here +rename_dir=$TEST_DIR/$$ +mkdir $rename_dir _rename_tests $rename_dir -n rmdir $rename_dir diff --git a/tests/generic/025 b/tests/generic/025 index 0310efa..1ee9ad6 100755 --- a/tests/generic/025 +++ b/tests/generic/025 @@ -29,20 +29,13 @@ _supported_fs generic _supported_os Linux _require_test -_requires_renameat2 +_requires_renameat2 exchange _require_test_symlinks -rename_dir=$TEST_DIR/$$ -mkdir $rename_dir -touch $rename_dir/foo $rename_dir/bar -if ! src/renameat2 -t -x $rename_dir/foo $rename_dir/bar; then - rm -f $rename_dir/foo $rename_dir/bar; rmdir $rename_dir - _notrun "fs doesn't support RENAME_EXCHANGE" -fi -rm -f $rename_dir/foo $rename_dir/bar - # real QA test starts here +rename_dir=$TEST_DIR/$$ +mkdir $rename_dir _rename_tests $rename_dir -x rmdir $rename_dir diff --git a/tests/generic/078 b/tests/generic/078 index 9608574..37f3201 100755 --- a/tests/generic/078 +++ b/tests/generic/078 @@ -29,20 +29,13 @@ _supported_fs generic _supported_os Linux _require_test -_requires_renameat2 +_requires_renameat2 whiteout _require_test_symlinks -rename_dir=$TEST_DIR/$$ -mkdir $rename_dir -touch $rename_dir/foo $rename_dir/bar -if ! src/renameat2 -t -w $rename_dir/foo $rename_dir/bar; then - rm -f $rename_dir/foo $rename_dir/bar; rmdir $rename_dir - _notrun "fs doesn't support RENAME_WHITEOUT" -fi -rm -f $rename_dir/foo $rename_dir/bar - # real QA test starts here +rename_dir=$TEST_DIR/$$ +mkdir $rename_dir _rename_tests $rename_dir -w rmdir $rename_dir From patchwork Wed Sep 11 13:17:08 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kaixu Xia X-Patchwork-Id: 11141075 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id AC7F5112B for ; Wed, 11 Sep 2019 13:17:29 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 87957206A5 for ; Wed, 11 Sep 2019 13:17:29 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="oeY1WK1w" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727803AbfIKNR3 (ORCPT ); Wed, 11 Sep 2019 09:17:29 -0400 Received: from mail-pg1-f195.google.com ([209.85.215.195]:33142 "EHLO mail-pg1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726341AbfIKNR3 (ORCPT ); Wed, 11 Sep 2019 09:17:29 -0400 Received: by mail-pg1-f195.google.com with SMTP id n190so11531294pgn.0; Wed, 11 Sep 2019 06:17:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=to:cc:from:subject:message-id:date:user-agent:mime-version :content-language:content-transfer-encoding; bh=SJuemVKdakoe9Qe78wYoOM+kizpfsD6VTjlf19fgmGY=; b=oeY1WK1wwIzcaysTFUNOdC+20FDh5ICtl5LFDT8S+uY5797Jr9h36kxn4+IBnMOtS+ EuppzHxd2EiWehLQO13hlC0/b/Z9EKY+Uj0gWCiD4Big45K1yX6WAUmk3rkS8s2mo0b4 GwrvEWiRhNvOBVFjPVyCqR+MHEBNslBqXxxpwR/NTijMbdh4bfCItMwmStkzWYxKJTob 7lAQ13E/4qU+teSfDkSJTxRbFsfH9RmhN3amArTYZSCkLR45U5x6tnktYfiGvDPwgFwu xPwsV1S3NT/BTlcTa+PvlULMKlWfMu/auyLga3/AQtAYWfthcPOq2UHT4bJSGCAEZ9jf l2Bw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:to:cc:from:subject:message-id:date:user-agent :mime-version:content-language:content-transfer-encoding; bh=SJuemVKdakoe9Qe78wYoOM+kizpfsD6VTjlf19fgmGY=; b=OgsQw97ft5W0gEFeID/TkyFf+4/5t+9E8zpKs2AuAIsUbvYcLQcbuhYaHnzT/xoIv3 GC/cvv1kP3/zLtBGfrB4DZsG908GPBzN/5mA2UmWoZlAhpHWFFoxM8PGFwAH+OVWoAGv 2XD/FXPzqHEN6gFV11pLw63EasIqWawjsaM7JoTOJxo1RTvFod53gHQKx9XK3U194ZRE bnstJxFyarJu5XZQ/OgFMiqC1QHU3FPpL/KchH8PAvAeCYV3awaqwfSpMBd+9JMu6P1P dsLK2VAi7XBD8o9upHYCiZ1fRgiyDwfT7wL9yXAS0HGZIwbtNjbm2w2j0RNp4K3AAa10 hN3Q== X-Gm-Message-State: APjAAAWGTWj5FWW8+wRgVgA84G8Ztki2DfYyj0jpQVonQv9Gsv3jZ3Uf bns5oGWZl+u+6u7TbVvge39hBkI= X-Google-Smtp-Source: APXvYqwYs08jQiHaYbTlRQvVHoX5HrfLmfpJ435bu15zbkMzsz2ii4w2ZO04pFYLyrUVUZWj/ydOjQ== X-Received: by 2002:a63:1521:: with SMTP id v33mr2670356pgl.21.1568207847646; Wed, 11 Sep 2019 06:17:27 -0700 (PDT) Received: from [10.76.90.34] ([203.205.141.123]) by smtp.gmail.com with ESMTPSA id k4sm2621026pjl.9.2019.09.11.06.17.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 11 Sep 2019 06:17:27 -0700 (PDT) To: fstests@vger.kernel.org Cc: linux-xfs@vger.kernel.org, Eryu Guan , "Darrick J. Wong" , newtongao@tencent.com, jasperwang@tencent.com From: kaixuxia Subject: [PATCH 2/2] xfs: test the deadlock between the AGI and AGF with RENAME_WHITEOUT Message-ID: <58163375-dcd9-b954-c8d2-89fef20b8246@gmail.com> Date: Wed, 11 Sep 2019 21:17:08 +0800 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.9.0 MIME-Version: 1.0 Content-Language: en-US Sender: fstests-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: fstests@vger.kernel.org There is ABBA deadlock bug between the AGI and AGF when performing rename() with RENAME_WHITEOUT flag, and add this testcase to make sure the rename() call works well. Signed-off-by: kaixuxia --- tests/xfs/512 | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ tests/xfs/512.out | 2 ++ tests/xfs/group | 1 + 3 files changed, 102 insertions(+) create mode 100755 tests/xfs/512 create mode 100644 tests/xfs/512.out diff --git a/tests/xfs/512 b/tests/xfs/512 new file mode 100755 index 0000000..754f102 --- /dev/null +++ b/tests/xfs/512 @@ -0,0 +1,99 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2019 Tencent. All Rights Reserved. +# +# FS QA Test 512 +# +# Test the ABBA deadlock case between the AGI and AGF When performing +# rename operation with RENAME_WHITEOUT flag. +# +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 +. ./common/renameat2 + +rm -f $seqres.full + +# real QA test starts here +_supported_fs xfs +_supported_os Linux +_require_scratch_nocheck +_requires_renameat2 whiteout + +prepare_file() +{ + # create many small files for the rename with RENAME_WHITEOUT + i=0 + while [ $i -le $files ]; do + file=$SCRATCH_MNT/f$i + echo > $file >/dev/null 2>&1 + let i=$i+1 + done +} + +rename_whiteout() +{ + # create the rename targetdir + renamedir=$SCRATCH_MNT/renamedir + mkdir $renamedir + + # a long filename could increase the possibility that target_dp + # allocate new blocks(acquire the AGF lock) to store the filename + longnamepre=FFFsafdsagafsadfagasdjfalskdgakdlsglkasdg + + # now try to do rename with RENAME_WHITEOUT flag + i=0 + while [ $i -le $files ]; do + src/renameat2 -w $SCRATCH_MNT/f$i $renamedir/$longnamepre$i >/dev/null 2>&1 + let i=$i+1 + done +} + +create_file() +{ + # create the targetdir + createdir=$SCRATCH_MNT/createdir + mkdir $createdir + + # try to create file at the same time to hit the deadlock + i=0 + while [ $i -le $files ]; do + file=$createdir/f$i + echo > $file >/dev/null 2>&1 + let i=$i+1 + done +} + +_scratch_mkfs_xfs -bsize=1024 -dagcount=1 >> $seqres.full 2>&1 || + _fail "mkfs failed" +_scratch_mount + +files=250000 + +prepare_file +rename_whiteout & +create_file & + +wait +echo Silence is golden + +# Failure comes in the form of a deadlock. + +# success, all done +status=0 +exit diff --git a/tests/xfs/512.out b/tests/xfs/512.out new file mode 100644 index 0000000..0aabdef --- /dev/null +++ b/tests/xfs/512.out @@ -0,0 +1,2 @@ +QA output created by 512 +Silence is golden diff --git a/tests/xfs/group b/tests/xfs/group index a7ad300..ed250d6 100644 --- a/tests/xfs/group +++ b/tests/xfs/group @@ -509,3 +509,4 @@ 509 auto ioctl 510 auto ioctl quick 511 auto quick quota +512 auto rename