diff mbox

btrfs: add test for seeing unseen fsync errors on newly open files

Message ID ee4f2765-0d4d-19a3-2cbe-6e7ad8892fdd@cn.fujitsu.com (mailing list archive)
State New, archived
Headers show

Commit Message

Lu Fengqi May 9, 2018, 12:58 p.m. UTC
On 05/08/2018 08:56 PM, Jeff Layton wrote:
> From: Jeff Layton <jlayton@redhat.com>
> 
> This adds a regression test for the following kernel patch:
> 
>      errseq: Always report a writeback error once
> 
> This is motivated by some rather odd behavior done by the PostgreSQL
> project. The main database writers will offload the fsync calls to a
> separate process, which can open files after a writeback error has
> already occurred.
> 
> This used to work with older kernels that reported the error to only
> one fd, but with the errseq_t changes we lost the ability to see
> errors that occurred before the open. The above patch restores that
> behavior.
> 
> Signed-off-by: Jeff Layton <jlayton@redhat.com>
> ---
>   tests/btrfs/999     | 110 ++++++++++++++++++++++++++++++++++++++++++++
>   tests/btrfs/999.out |   5 ++
>   tests/btrfs/group   |   1 +
>   3 files changed, 116 insertions(+)
>   create mode 100755 tests/btrfs/999
>   create mode 100644 tests/btrfs/999.out
> 
> diff --git a/tests/btrfs/999 b/tests/btrfs/999
> new file mode 100755
> index 000000000000..0f68942a91da
> --- /dev/null
> +++ b/tests/btrfs/999
> @@ -0,0 +1,110 @@
> +#! /bin/bash
> +# FS QA Test No. 999
> +#
> +# Open a file and write to it and fsync. Then flip the data device to throw
> +# errors, write to it again and call sync. Close the file, reopen it and
> +# then call fsync on it. Is the error reported?
> +#
> +#-----------------------------------------------------------------------
> +# Copyright (c) 2018, Jeff Layton <jlayton@redhat.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"
> +
> +here=`pwd`
> +tmp=/tmp/$$
> +status=1    # failure is the default!
> +trap "_cleanup; exit \$status" 0 1 2 3 15
> +
> +_cleanup()
> +{
> +	cd /
> +	rm -rf $tmp.* $testdir
> +	_dmerror_cleanup
> +}
> +
> +# get standard environment, filters and checks
> +. ./common/rc
> +. ./common/filter
> +. ./common/dmerror
> +
> +# real QA test starts here
> +_supported_os Linux
> +_supported_fs btrfs
> +# This test uses "dm" without taking into account the data could be on
> +# realtime subvolume, thus the test will fail with rtinherit=1
> +_require_no_rtinherit
> +_require_scratch_dev_pool
> +
> +_require_dm_target error
> +
> +rm -f $seqres.full
> +
> +# bring up dmerror device
> +_scratch_unmount

# diff -u tests/btrfs/999.out results/btrfs/999.out.bad

The above _require_scratch_dev_pool has already umounted the scratch.
diff mbox

Patch

--- tests/btrfs/999.out 2018-05-09 13:01:21.605173303 +0800
+++ results/btrfs/999.out.bad 2018-05-09 20:50:46.721383569 +0800
@@ -1,4 +1,5 @@ 
  QA output created by 999
+umount: /mnt/scratch: not mounted.
  Format and mount
  The following fsync should fail with EIO:
  fsync: Input/output error