From patchwork Fri Jul 19 04:12:31 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Deepa Dinamani X-Patchwork-Id: 11049745 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D6ABA6C5 for ; Fri, 19 Jul 2019 04:20:28 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C6F0D2886F for ; Fri, 19 Jul 2019 04:20:28 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BB828288C5; Fri, 19 Jul 2019 04:20:28 +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=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI 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 1BBBB2886F for ; Fri, 19 Jul 2019 04:20:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727152AbfGSEUR (ORCPT ); Fri, 19 Jul 2019 00:20:17 -0400 Received: from mail-pf1-f171.google.com ([209.85.210.171]:38594 "EHLO mail-pf1-f171.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388945AbfGSEMp (ORCPT ); Fri, 19 Jul 2019 00:12:45 -0400 Received: by mail-pf1-f171.google.com with SMTP id y15so13578817pfn.5 for ; Thu, 18 Jul 2019 21:12:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=cm40CQFuYq+U3aarvSl+8xF2LOwRRiQ9GyrYLqKT/YE=; b=pMUAzftvYMSsyvCs7Zy8bvkDy1SjF1eOa0sq2y3yx7uv+YJ/u0DwiAQlmwEfQOouu3 PXNX749pp+E6C4uG1Gi8iHExKoBDDu5PzP5jigk5tCrdI4nmsTL8FopCWHDqKmLQfVSm nTBW+JH/b9IYPih0AtaZmsH3OCn/T+8JowR3GCmVsZxDc/bx56XUnwni/7d+tohi0BbD ohW1iHvAqcioak0Ajim/1mpfa06yVcWkorxl0mFhNKcCPlK6HA16nYmc4zTgBFk2ltVR unxjg4WzTqC+qE4hOvgonvy4+qZoT671uHTwkBfJdcU3vFK9W9VTpSNTWnQizENDLG69 9pag== 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; bh=cm40CQFuYq+U3aarvSl+8xF2LOwRRiQ9GyrYLqKT/YE=; b=jFuZgWr7kmkkw+FXTS8kfTRxvu628a0d/+PZBcv0CHp3FJ5dXU24wiqO2G5RJyYi6k Vk0VqIdanRS+PJjvSOtPpsFbQcqwWfHqdFteH2HxOUjEO3Jbe1fP2o4AZM1PmP0roBZ/ nYOe1DiZebKvJhIAFvCUhK/MNOrIA0mrhGw8MmG3ZKXc3jCGROIzB64ZcRewNbxIUA1i wip3JGOfu10idEmpgCfUtaLSraNFUsXfRRzMd0WfXS0PSctmCvsNxsstMBWfhijBL46g OunntybAPoVpZv0/jBZUoL02Se1dqrVH3XzPxi6WPvmJwS80EkHnFYPRnV7KlBM569/M 486w== X-Gm-Message-State: APjAAAWnxR4o8HRD2tm4ttcKdTqBWxwtMZ8xg3JmKsLHt8rkiyhLwTO7 cgHWIRBZdP+Yvhyi0TDdPWfOzBDy X-Google-Smtp-Source: APXvYqzSiOYhY3GwgsFWtKI2Ec13WzMHLFF3rBJpNnMbXxwpumlVMYOToRSKjiQXO4OsGRkTXwJcqw== X-Received: by 2002:a63:2807:: with SMTP id o7mr21681094pgo.131.1563509563697; Thu, 18 Jul 2019 21:12:43 -0700 (PDT) Received: from deepa-ubuntu.lan (c-98-234-52-230.hsd1.ca.comcast.net. [98.234.52.230]) by smtp.gmail.com with ESMTPSA id y23sm31221278pfo.106.2019.07.18.21.12.42 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Thu, 18 Jul 2019 21:12:43 -0700 (PDT) From: Deepa Dinamani To: fstests@vger.kernel.org Cc: arnd@arndb.de, y2038@lists.linaro.org Subject: [PATCH] generic/402: fix for updated behavior of timestamp limits Date: Thu, 18 Jul 2019 21:12:31 -0700 Message-Id: <20190719041231.26500-1-deepa.kernel@gmail.com> X-Mailer: git-send-email 2.17.1 Sender: fstests-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: fstests@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The mount behavior will not be altered because of the unsupported timestamps on the filesystems. Adjust the test accordingly. An updated series to be posted after the merge window is hosted at Signed-off-by: Deepa Dinamani --- common/rc | 36 +++++++++--------- tests/generic/402 | 87 ++++++++++++++++--------------------------- tests/generic/402.out | 2 +- 3 files changed, 53 insertions(+), 72 deletions(-) diff --git a/common/rc b/common/rc index 25203bb4..39a2deb0 100644 --- a/common/rc +++ b/common/rc @@ -1959,16 +1959,9 @@ _run_aiodio() return $status } -# this test requires y2038 sysfs switch and filesystem -# timestamp ranges support. -_require_y2038() +_require_timestamp_range() { local device=${1:-$TEST_DEV} - local sysfsdir=/proc/sys/fs/fs-timestamp-check-on - - if [ ! -e $sysfsdir ]; then - _notrun "no kernel support for y2038 sysfs switch" - fi local tsmin tsmax read tsmin tsmax <<<$(_filesystem_timestamp_range $device) @@ -1980,23 +1973,32 @@ _require_y2038() _filesystem_timestamp_range() { local device=${1:-$TEST_DEV} + u32max=$(((1<<32)-1)) + s32min=-$((1<<31)) + s32max=$(((1<<31)-1)) + s64max=$(((1<<63)-1)) + s64min=$((1<<63)) + case $FSTYP in - ext4) + ext2) + echo "$s32min $s32max" + ;; + ext3|ext4) if [ $(dumpe2fs -h $device 2>/dev/null | grep "Inode size:" | cut -d: -f2) -gt 128 ]; then - echo "-2147483648 15032385535" + printf "%d %d\n" $s32min 0x37fffffff else - echo "-2147483648 2147483647" + echo "$s32min $s32max" fi ;; - xfs) - echo "-2147483648 2147483647" - ;; jfs) - echo "0 4294967295" + echo "0 $u32max" ;; - f2fs) - echo "-2147483648 2147483647" + xfs) + echo "$s32min $s32max" + ;; + btrfs) + echo "$s64min $s64max" ;; *) echo "-1 -1" diff --git a/tests/generic/402 b/tests/generic/402 index f742fedd..dd136ec2 100755 --- a/tests/generic/402 +++ b/tests/generic/402 @@ -4,15 +4,10 @@ # # FS QA Test 402 # -# Tests to verify policy for filesystem timestamps for -# supported ranges: -# 1. Verify filesystem rw mount according to sysctl -# timestamp_supported. -# 2. Verify timestamp clamping for timestamps beyond max -# timestamp supported. +# Test to verify filesystem timestamps for supported ranges. # -# Exit status 1: either or both tests above fail. -# Exit status 0: both the above tests pass. +# Exit status 1: test failed. +# Exit status 0: test passed. # seq=`basename $0` seqres=$RESULT_DIR/$seq @@ -49,47 +44,59 @@ check_stat() prev_timestamp="$timestamp;$timestamp" if [ $prev_timestamp != $stat_timestamp ]; then echo "$prev_timestamp != $stat_timestamp" | tee -a $seqres.full + return 1 fi + return 0 } run_test_individual() { + fail=0 file=$1 timestamp=$2 update_time=$3 # check if the time needs update if [ $update_time -eq 1 ]; then - echo "Updating file: $file to timestamp `date -d @$timestamp`" >> $seqres.full + echo "Updating file: $file to timestamp $timestamp" >> $seqres.full $XFS_IO_PROG -f -c "utimes $timestamp 0 $timestamp 0" $file if [ $? -ne 0 ]; then echo "Failed to update times on $file" | tee -a $seqres.full + fail=1 fi fi - tsclamp=$(($timestamp>$tsmax?$tsmax:$timestamp)) - echo "Checking file: $file Updated timestamp is `date -d @$tsclamp`" >> $seqres.full - check_stat $file $tsclamp + tsclamp=$((timestamptsmax?tsmax:timestamp)) + echo "Checking file: $file Updated timestamp is $tsclamp" >> $seqres.full + if ! check_stat $file $tsclamp; then + fail=1 + fi + return $fail } run_test() { + fail=0 update_time=$1 n=1 for TIME in "${TIMESTAMPS[@]}"; do - run_test_individual ${SCRATCH_MNT}/test_$n $TIME $update_time + if ! run_test_individual ${SCRATCH_MNT}/test_$n $TIME $update_time; then + fail=1 + fi ((n++)) done + + return $fail } _scratch_mkfs &>> $seqres.full 2>&1 || _fail "mkfs failed" -_require_y2038 $SCRATCH_DEV +_require_timestamp_range $SCRATCH_DEV read tsmin tsmax <<<$(_filesystem_timestamp_range $SCRATCH_DEV) -echo min supported timestamp $tsmin $(date --date=@$tsmin) >> $seqres.full -echo max supported timestamp $tsmax $(date --date=@$tsmax) >> $seqres.full +echo min supported timestamp $tsmin >> $seqres.full +echo max supported timestamp $tsmax >> $seqres.full # Test timestamps array @@ -97,45 +104,14 @@ declare -a TIMESTAMPS=( $tsmin 0 $tsmax + $((tsmax/2)) $((tsmax+1)) - 4294967295 - 8589934591 - 34359738367 ) -# Max timestamp is hardcoded to Mon Jan 18 19:14:07 PST 2038 -sys_tsmax=2147483647 -echo "max timestamp that needs to be supported by fs for rw mount is" \ - "$((sys_tsmax+1)) $(date --date=@$((sys_tsmax+1)))" >> $seqres.full - -read ts_check <<<$(cat /proc/sys/fs/fs-timestamp-check-on) - _scratch_mount result=$? -if [ $ts_check -ne 0 ]; then - echo "sysctl filesystem timestamp check is on" >> $seqres.full - # check for mount failure if the minimum requirement for max timestamp - # supported is not met. - if [ $sys_tsmax -ge $tsmax ]; then - if [ $result -eq 0 ]; then - echo "mount test failed" | tee -a $seqres.full - exit - fi - else - if [ $result -ne 0 ]; then - echo "failed to mount $SCRATCH_DEV" | tee -a $seqres.full - exit - fi - fi -else - # if sysctl switch is off then mount should succeed always. - echo "sysctl filesystem timestamp check is off" >> $seqres.full - if [ $result -ne 0 ]; then - echo "failed to mount $SCRATCH_DEV and timestamp check is off" >> $seqres.full - exit - fi -fi +status=0 # Begin test case 1 echo "In memory timestamps update test start" >> $seqres.full @@ -143,7 +119,9 @@ echo "In memory timestamps update test start" >> $seqres.full # update time on the file update_time=1 -run_test $update_time +if ! run_test $update_time; then + status=1 +fi echo "In memory timestamps update complete" >> $seqres.full @@ -162,12 +140,13 @@ update_time=0 echo "On disk timestamps update test start" >> $seqres.full # Re-run test -run_test $update_time +if ! run_test $update_time; then + status=1 +fi echo "On disk timestamps update test complete" >> $seqres.full -echo "y2038 inode timestamp tests completed successfully" +echo "inode timestamp tests completed status $status" # success, all done -status=0 -exit +exit $status diff --git a/tests/generic/402.out b/tests/generic/402.out index 6c5b9308..4500e6c7 100644 --- a/tests/generic/402.out +++ b/tests/generic/402.out @@ -1,2 +1,2 @@ QA output created by 402 -y2038 inode timestamp tests completed successfully +inode timestamp tests completed status 0