diff mbox

common: ext4 doesn't support O_DIRECT with encryption

Message ID 1467163975-11183-1-git-send-email-tytso@mit.edu (mailing list archive)
State New, archived
Headers show

Commit Message

Theodore Ts'o June 29, 2016, 1:32 a.m. UTC
Teach _require_odirect to skip the O_DIRECT tests if the ext4 mount
option "test_dummy_encryption" is enabled, since O_DIRECT doesen't
make sense when file system level encryption is enabled, and several
tests which use O_DIRECT --- ext4/301, ext4/304, generic/250 and
generic/252 --- fail when encryption is enabled.

Signed-off-by: Theodore Ts'o <tytso@mit.edu>
---
 common/rc | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

Comments

Eryu Guan June 29, 2016, 9:39 a.m. UTC | #1
On Tue, Jun 28, 2016 at 09:32:55PM -0400, Theodore Ts'o wrote:
> Teach _require_odirect to skip the O_DIRECT tests if the ext4 mount
> option "test_dummy_encryption" is enabled, since O_DIRECT doesen't
> make sense when file system level encryption is enabled, and several
> tests which use O_DIRECT --- ext4/301, ext4/304, generic/250 and
> generic/252 --- fail when encryption is enabled.
> 
> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
> ---
>  common/rc | 18 ++++++++++++------
>  1 file changed, 12 insertions(+), 6 deletions(-)
> 
> diff --git a/common/rc b/common/rc
> index adda940..003400d 100644
> --- a/common/rc
> +++ b/common/rc
> @@ -1933,12 +1933,18 @@ _require_xfs_db_command()
>  # check that kernel and filesystem support direct I/O
>  _require_odirect()
>  {
> -       testfile=$TEST_DIR/$$.direct
> -       $XFS_IO_PROG -F -f -d -c "pwrite 0 20k" $testfile > /dev/null 2>&1
> -       if [ $? -ne 0 ]; then
> -               _notrun "O_DIRECT is not supported"
> -       fi
> -       rm -f $testfile 2>&1 > /dev/null
> +	if [ $FSTYP = "ext4" ] ; then
> +		if echo "$MOUNT_OPTIONS" | grep -q "test_dummy_encryption"
> +		then

I moved 'then' to the end of above line (if ....; then) and queued it up

Reviewed-by: Eryu Guan <eguan@redhat.com>

> +			_notrun "ext4 encryption doesn't support O_DIRECT"
> +		fi
> +	fi
> +	testfile=$TEST_DIR/$$.direct
> +	$XFS_IO_PROG -F -f -d -c "pwrite 0 20k" $testfile > /dev/null 2>&1
> +	if [ $? -ne 0 ]; then
> +		_notrun "O_DIRECT is not supported"
> +	fi
> +	rm -f $testfile 2>&1 > /dev/null
>  }
>  
>  # Check that a fs has enough free space (in 1024b blocks)
> -- 
> 2.5.0
> 
> --
> To unsubscribe from this list: send the line "unsubscribe fstests" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe fstests" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Dave Chinner July 1, 2016, 1:45 a.m. UTC | #2
On Tue, Jun 28, 2016 at 09:32:55PM -0400, Theodore Ts'o wrote:
> Teach _require_odirect to skip the O_DIRECT tests if the ext4 mount
> option "test_dummy_encryption" is enabled, since O_DIRECT doesen't
> make sense when file system level encryption is enabled, and several
> tests which use O_DIRECT --- ext4/301, ext4/304, generic/250 and
> generic/252 --- fail when encryption is enabled.

Stupid question: why isn't ext4 simply falling back to buffered IO
when encryption is enabled on a file? This seems kind of strange to
have direct IO conditionally supported based on mkfs/mount
parameters (or perhaps even per-file configurations)....

Cheers,

Dave.
diff mbox

Patch

diff --git a/common/rc b/common/rc
index adda940..003400d 100644
--- a/common/rc
+++ b/common/rc
@@ -1933,12 +1933,18 @@  _require_xfs_db_command()
 # check that kernel and filesystem support direct I/O
 _require_odirect()
 {
-       testfile=$TEST_DIR/$$.direct
-       $XFS_IO_PROG -F -f -d -c "pwrite 0 20k" $testfile > /dev/null 2>&1
-       if [ $? -ne 0 ]; then
-               _notrun "O_DIRECT is not supported"
-       fi
-       rm -f $testfile 2>&1 > /dev/null
+	if [ $FSTYP = "ext4" ] ; then
+		if echo "$MOUNT_OPTIONS" | grep -q "test_dummy_encryption"
+		then
+			_notrun "ext4 encryption doesn't support O_DIRECT"
+		fi
+	fi
+	testfile=$TEST_DIR/$$.direct
+	$XFS_IO_PROG -F -f -d -c "pwrite 0 20k" $testfile > /dev/null 2>&1
+	if [ $? -ne 0 ]; then
+		_notrun "O_DIRECT is not supported"
+	fi
+	rm -f $testfile 2>&1 > /dev/null
 }
 
 # Check that a fs has enough free space (in 1024b blocks)