diff mbox

[v2] Fix caller's argument for _require_command()

Message ID 188af9eed150e2f7efb04b5d634a14ca50fdd694.1428899527.git.zhaolei@cn.fujitsu.com (mailing list archive)
State New, archived
Headers show

Commit Message

Zhaolei April 13, 2015, 4:32 a.m. UTC
From: Zhao Lei <zhaolei@cn.fujitsu.com>

_require_command() only accept 2 arguments, first one is pure command,
and second one is name for error message.

But some caller misused this function, for example,
  DEFRAG_PROG="$BTRFS_UTIL_PROG filesystem defragment"
  _require_command $DEFRAG_PROG defragment
In above code, _require_command get 4 arguments, the caller's
second argument is never used, and the second field of first
argument is treat as "error message" in _require_command.

We fixed above case by adding quotes to _require_command()'s
arguments, it fixed most test case, but introduced a new bug,
in above case, "btrfs filesystem defragment" is not a command,
and always failed in _require_command(), it caused some testcase
not work, as btrfs/005.

This patch fixed above caller.

Changelog v1->v2:
1: Add detail description, suggested by:
   Lukáš Czerner <lczerner@redhat.com>
2: Add missed Reported-by.
3: Make $XFSDUMP_PROG always be a pure command, to avoid special
   handling for it.

Reported-by: Filipe David Manana <fdmanana@gmail.com>
Suggested-by: Lukáš Czerner <lczerner@redhat.com>
Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com>
---
 common/defrag | 13 +++++++++----
 common/rc     |  3 ---
 tests/xfs/195 |  2 +-
 3 files changed, 10 insertions(+), 8 deletions(-)

Comments

Eryu Guan April 13, 2015, 5:57 a.m. UTC | #1
On Mon, Apr 13, 2015 at 12:32:43PM +0800, Zhaolei wrote:
> From: Zhao Lei <zhaolei@cn.fujitsu.com>
> 
> _require_command() only accept 2 arguments, first one is pure command,
> and second one is name for error message.
> 
> But some caller misused this function, for example,
>   DEFRAG_PROG="$BTRFS_UTIL_PROG filesystem defragment"
>   _require_command $DEFRAG_PROG defragment
> In above code, _require_command get 4 arguments, the caller's
> second argument is never used, and the second field of first
> argument is treat as "error message" in _require_command.
> 
> We fixed above case by adding quotes to _require_command()'s
> arguments, it fixed most test case, but introduced a new bug,
> in above case, "btrfs filesystem defragment" is not a command,
> and always failed in _require_command(), it caused some testcase
> not work, as btrfs/005.
> 
> This patch fixed above caller.
> 
> Changelog v1->v2:
> 1: Add detail description, suggested by:
>    Lukáš Czerner <lczerner@redhat.com>
> 2: Add missed Reported-by.
> 3: Make $XFSDUMP_PROG always be a pure command, to avoid special
>    handling for it.
> 
> Reported-by: Filipe David Manana <fdmanana@gmail.com>
> Suggested-by: Lukáš Czerner <lczerner@redhat.com>
> Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com>
> ---
>  common/defrag | 13 +++++++++----
>  common/rc     |  3 ---
>  tests/xfs/195 |  2 +-
>  3 files changed, 10 insertions(+), 8 deletions(-)
> 
> diff --git a/common/defrag b/common/defrag
> index f923dc0..b44ef98 100644
> --- a/common/defrag
> +++ b/common/defrag
> @@ -22,22 +22,27 @@
>  
>  _require_defrag()
>  {
> +    local defrag_cmd
> +
>      case "$FSTYP" in
>      xfs)
> -        DEFRAG_PROG="$XFS_FSR_PROG"
> +        defrag_cmd="$XFS_FSR_PROG"
> +        DEFRAG_PROG="$defrag_cmd"
>  	;;
>      ext4|ext4dev)
> -        DEFRAG_PROG="$E4DEFRAG_PROG"
> +        defrag_cmd="$E4DEFRAG_PROG"
> +        DEFRAG_PROG="$defrag_cmd"
>  	;;
>      btrfs)
> -	DEFRAG_PROG="$BTRFS_UTIL_PROG filesystem defragment"
> +        defrag_cmd="$BTRFS_UTIL_PROG"
> +        DEFRAG_PROG="defrag_cmd filesystem defragment"
>  	;;
>      *)
>          _notrun "defragmentation not supported for fstype \"$FSTYP\""
>  	;;
>      esac
>  
> -    _require_command "$DEFRAG_PROG" defragment
> +    _require_command "$defrag_cmd" defragment
>      _require_xfs_io_command "fiemap"
>  }
>  
> diff --git a/common/rc b/common/rc
> index c1a50f2..02ac02a 100644
> --- a/common/rc
> +++ b/common/rc
> @@ -2923,9 +2923,6 @@ init_rc()
>  		$DF_PROG $TEST_DEV
>  		exit 1
>  	fi
> -	# Figure out if we need to add -F ("foreign", deprecated) option to xfs_io
> -	xfs_io -c stat $TEST_DIR 2>&1 | grep -q "is not on an XFS filesystem" && \
> -	export XFS_IO_PROG="$XFS_IO_PROG -F"

I think we should keep the "-F" option, as xfs_io comes with
distrobutions like RHEL6 still needs "-F" to proceed on non-xfs fs.

[root@dhcp-66-86-3 xfstests]# xfs_io -f -c "pwrite 0 1k" testfile
xfs_io: specified file ["testfile"] is not on an XFS filesystem

Thanks,
Eryu
>  }
>  
>  # get real device path name by following link
> diff --git a/tests/xfs/195 b/tests/xfs/195
> index 21fcb00..075022d 100755
> --- a/tests/xfs/195
> +++ b/tests/xfs/195
> @@ -65,7 +65,7 @@ _supported_os Linux
>  
>  _require_test
>  _require_user
> -_require_command "$XFSDUMP_PROG" xfsdump
> +[ "$XFSDUMP_PROG" = "" ] && _notrun "xfsdump not found"
>  
>  echo "Preparing subtree"
>  mkdir $TEST_DIR/d
> -- 
> 1.8.5.1
> 
> --
> 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
Zhaolei April 13, 2015, 6:39 a.m. UTC | #2
Hi, Eryu

Thanks for review.

> -----Original Message-----
> From: Eryu Guan [mailto:eguan@redhat.com]
> Sent: Monday, April 13, 2015 1:57 PM
> To: Zhaolei
> Cc: fstests@vger.kernel.org
> Subject: Re: [PATCH v2] Fix caller's argument for _require_command()
> 
> On Mon, Apr 13, 2015 at 12:32:43PM +0800, Zhaolei wrote:
> > From: Zhao Lei <zhaolei@cn.fujitsu.com>
> >
> > _require_command() only accept 2 arguments, first one is pure command,
> > and second one is name for error message.
> >
> > But some caller misused this function, for example,
> >   DEFRAG_PROG="$BTRFS_UTIL_PROG filesystem defragment"
> >   _require_command $DEFRAG_PROG defragment In above code,
> > _require_command get 4 arguments, the caller's second argument is
> > never used, and the second field of first argument is treat as "error
> > message" in _require_command.
> >
> > We fixed above case by adding quotes to _require_command()'s
> > arguments, it fixed most test case, but introduced a new bug, in above
> > case, "btrfs filesystem defragment" is not a command, and always
> > failed in _require_command(), it caused some testcase not work, as
> > btrfs/005.
> >
> > This patch fixed above caller.
> >
> > Changelog v1->v2:
> > 1: Add detail description, suggested by:
> >    Lukáš Czerner <lczerner@redhat.com>
> > 2: Add missed Reported-by.
> > 3: Make $XFSDUMP_PROG always be a pure command, to avoid special
> >    handling for it.
> >
> > Reported-by: Filipe David Manana <fdmanana@gmail.com>
> > Suggested-by: Lukáš Czerner <lczerner@redhat.com>
> > Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com>
> > ---
> >  common/defrag | 13 +++++++++----
> >  common/rc     |  3 ---
> >  tests/xfs/195 |  2 +-
> >  3 files changed, 10 insertions(+), 8 deletions(-)
> >
> > diff --git a/common/defrag b/common/defrag index f923dc0..b44ef98
> > 100644
> > --- a/common/defrag
> > +++ b/common/defrag
> > @@ -22,22 +22,27 @@
> >
> >  _require_defrag()
> >  {
> > +    local defrag_cmd
> > +
> >      case "$FSTYP" in
> >      xfs)
> > -        DEFRAG_PROG="$XFS_FSR_PROG"
> > +        defrag_cmd="$XFS_FSR_PROG"
> > +        DEFRAG_PROG="$defrag_cmd"
> >  	;;
> >      ext4|ext4dev)
> > -        DEFRAG_PROG="$E4DEFRAG_PROG"
> > +        defrag_cmd="$E4DEFRAG_PROG"
> > +        DEFRAG_PROG="$defrag_cmd"
> >  	;;
> >      btrfs)
> > -	DEFRAG_PROG="$BTRFS_UTIL_PROG filesystem defragment"
> > +        defrag_cmd="$BTRFS_UTIL_PROG"
> > +        DEFRAG_PROG="defrag_cmd filesystem defragment"
> >  	;;
> >      *)
> >          _notrun "defragmentation not supported for fstype \"$FSTYP\""
> >  	;;
> >      esac
> >
> > -    _require_command "$DEFRAG_PROG" defragment
> > +    _require_command "$defrag_cmd" defragment
> >      _require_xfs_io_command "fiemap"
> >  }
> >
> > diff --git a/common/rc b/common/rc
> > index c1a50f2..02ac02a 100644
> > --- a/common/rc
> > +++ b/common/rc
> > @@ -2923,9 +2923,6 @@ init_rc()
> >  		$DF_PROG $TEST_DEV
> >  		exit 1
> >  	fi
> > -	# Figure out if we need to add -F ("foreign", deprecated) option to xfs_io
> > -	xfs_io -c stat $TEST_DIR 2>&1 | grep -q "is not on an XFS filesystem" && \
> > -	export XFS_IO_PROG="$XFS_IO_PROG -F"
> 
> I think we should keep the "-F" option, as xfs_io comes with distrobutions like
> RHEL6 still needs "-F" to proceed on non-xfs fs.
> 
> [root@dhcp-66-86-3 xfstests]# xfs_io -f -c "pwrite 0 1k" testfile
> xfs_io: specified file ["testfile"] is not on an XFS filesystem
> 
I keep -F in v1, and v2 deleted above -F support by suggestion of
Lukáš Czerner <lczerner@redhat.com>, who is also author of
these code block.

CC: Lukáš Czerner <lczerner@redhat.com>

If we suppose xfstests always runs in, and test newest kernel and user tools,
we can remove obsoleted commands.
It not, we should keep them to make xfstests' compatibility.

What is your opinion?

Thanks
Zhaolei

> Thanks,
> Eryu
> >  }
> >
> >  # get real device path name by following link diff --git
> > a/tests/xfs/195 b/tests/xfs/195 index 21fcb00..075022d 100755
> > --- a/tests/xfs/195
> > +++ b/tests/xfs/195
> > @@ -65,7 +65,7 @@ _supported_os Linux
> >
> >  _require_test
> >  _require_user
> > -_require_command "$XFSDUMP_PROG" xfsdump
> > +[ "$XFSDUMP_PROG" = "" ] && _notrun "xfsdump not found"
> >
> >  echo "Preparing subtree"
> >  mkdir $TEST_DIR/d
> > --
> > 1.8.5.1
> >
> > --
> > 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 April 14, 2015, 9:13 p.m. UTC | #3
On Mon, Apr 13, 2015 at 02:39:48PM +0800, Zhao Lei wrote:
> > From: Eryu Guan [mailto:eguan@redhat.com]
> > Sent: Monday, April 13, 2015 1:57 PM
> > To: Zhaolei
> > Cc: fstests@vger.kernel.org
> > Subject: Re: [PATCH v2] Fix caller's argument for _require_command()
> > 
> > On Mon, Apr 13, 2015 at 12:32:43PM +0800, Zhaolei wrote:
> > > From: Zhao Lei <zhaolei@cn.fujitsu.com>
> > >
> > > _require_command() only accept 2 arguments, first one is pure command,
> > > and second one is name for error message.
> > >
.....
> > > diff --git a/common/rc b/common/rc
> > > index c1a50f2..02ac02a 100644
> > > --- a/common/rc
> > > +++ b/common/rc
> > > @@ -2923,9 +2923,6 @@ init_rc()
> > >  		$DF_PROG $TEST_DEV
> > >  		exit 1
> > >  	fi
> > > -	# Figure out if we need to add -F ("foreign", deprecated) option to xfs_io
> > > -	xfs_io -c stat $TEST_DIR 2>&1 | grep -q "is not on an XFS filesystem" && \
> > > -	export XFS_IO_PROG="$XFS_IO_PROG -F"
> > 
> > I think we should keep the "-F" option, as xfs_io comes with distrobutions like
> > RHEL6 still needs "-F" to proceed on non-xfs fs.
> > 
> > [root@dhcp-66-86-3 xfstests]# xfs_io -f -c "pwrite 0 1k" testfile
> > xfs_io: specified file ["testfile"] is not on an XFS filesystem
> > 
> I keep -F in v1, and v2 deleted above -F support by suggestion of
> Lukáš Czerner <lczerner@redhat.com>, who is also author of
> these code block.
> 
> CC: Lukáš Czerner <lczerner@redhat.com>
> 
> If we suppose xfstests always runs in, and test newest kernel and user tools,
> we can remove obsoleted commands.

No, absolutely not. xfstests needs to run on all sorts of different
kernels and systems, including old vendor kernels. That means
dropping compatibility support for them is not an option until their
QA departments are no longer testing those distros. IOWs, it's going
to be many years before we can drop the "-F" option....

Cheers,

Dave.
diff mbox

Patch

diff --git a/common/defrag b/common/defrag
index f923dc0..b44ef98 100644
--- a/common/defrag
+++ b/common/defrag
@@ -22,22 +22,27 @@ 
 
 _require_defrag()
 {
+    local defrag_cmd
+
     case "$FSTYP" in
     xfs)
-        DEFRAG_PROG="$XFS_FSR_PROG"
+        defrag_cmd="$XFS_FSR_PROG"
+        DEFRAG_PROG="$defrag_cmd"
 	;;
     ext4|ext4dev)
-        DEFRAG_PROG="$E4DEFRAG_PROG"
+        defrag_cmd="$E4DEFRAG_PROG"
+        DEFRAG_PROG="$defrag_cmd"
 	;;
     btrfs)
-	DEFRAG_PROG="$BTRFS_UTIL_PROG filesystem defragment"
+        defrag_cmd="$BTRFS_UTIL_PROG"
+        DEFRAG_PROG="defrag_cmd filesystem defragment"
 	;;
     *)
         _notrun "defragmentation not supported for fstype \"$FSTYP\""
 	;;
     esac
 
-    _require_command "$DEFRAG_PROG" defragment
+    _require_command "$defrag_cmd" defragment
     _require_xfs_io_command "fiemap"
 }
 
diff --git a/common/rc b/common/rc
index c1a50f2..02ac02a 100644
--- a/common/rc
+++ b/common/rc
@@ -2923,9 +2923,6 @@  init_rc()
 		$DF_PROG $TEST_DEV
 		exit 1
 	fi
-	# Figure out if we need to add -F ("foreign", deprecated) option to xfs_io
-	xfs_io -c stat $TEST_DIR 2>&1 | grep -q "is not on an XFS filesystem" && \
-	export XFS_IO_PROG="$XFS_IO_PROG -F"
 }
 
 # get real device path name by following link
diff --git a/tests/xfs/195 b/tests/xfs/195
index 21fcb00..075022d 100755
--- a/tests/xfs/195
+++ b/tests/xfs/195
@@ -65,7 +65,7 @@  _supported_os Linux
 
 _require_test
 _require_user
-_require_command "$XFSDUMP_PROG" xfsdump
+[ "$XFSDUMP_PROG" = "" ] && _notrun "xfsdump not found"
 
 echo "Preparing subtree"
 mkdir $TEST_DIR/d