generic: add test for executables on read-only DAX mounts

This adds a regression test for the following kernel patch:

commit 42d4a99b09cb ("ext4: fix fault handling when mounted with -o
dax,ro")

The above patch fixes an issue with ext4 where executables cannot be
run on read-only filesystems mounted with the DAX option.

This issue does not appear to be present in ext2 or XFS, as they
both pass the test.  I've also confirmed outside of the test that
they are both indeed able to execute binaries on read-only DAX
mounts.

Thanks to Randy Dodgen for the bug report and reproduction steps.

Signed-off-by: Ross Zwisler <ross.zwisler@linux.intel.com>
Cc: Randy Dodgen <rdodgen@gmail.com>
Cc: Christoph Hellwig <hch@infradead.org>
Cc: Theodore Ts'o <tytso@mit.edu>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
This commit is contained in:
Ross Zwisler
2017-08-30 22:09:10 -06:00
committed by Eryu Guan
parent 211cb9170c
commit 41ab666990
3 changed files with 77 additions and 0 deletions
+73
View File
@@ -0,0 +1,73 @@
#! /bin/bash
# FS QA Test 452
#
# This is a regression test for kernel patch:
# commit 42d4a99b09cb ("ext4: fix fault handling when mounted with -o dax,ro")
# created by Ross Zwisler <ross.zwisler@linux.intel.com>
#
#-----------------------------------------------------------------------
# Copyright (c) 2017 Intel Corporation. All Rights Reserved.
#
# 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
# remove previous $seqres.full before test
rm -f $seqres.full
# Modify as appropriate.
_supported_fs generic
_supported_os Linux
_require_scratch
# we need to be able to execute binaries on scratch
_exclude_scratch_mount_option "noexec"
# real QA test starts here
# format and mount
_scratch_mkfs > $seqres.full 2>&1
_scratch_mount >> $seqres.full 2>&1
LS=$(which ls --skip-alias --skip-functions)
SCRATCH_LS=$SCRATCH_MNT/ls_on_scratch
cp $LS $SCRATCH_LS
$SCRATCH_LS $SCRATCH_LS | _filter_scratch
_scratch_remount ro
$SCRATCH_LS $SCRATCH_LS | _filter_scratch
# success, all done
status=0
exit
+3
View File
@@ -0,0 +1,3 @@
QA output created by 452
SCRATCH_MNT/ls_on_scratch
SCRATCH_MNT/ls_on_scratch
+1
View File
@@ -454,3 +454,4 @@
449 auto quick acl enospc
450 auto quick rw
451 auto quick rw aio
452 auto quick