All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric Sandeen <sandeen@sandeen.net>
To: Eric Sandeen <sandeen@redhat.com>
Cc: xfs-oss <xfs@oss.sgi.com>
Subject: [PATCH V2] xfstests 279: test mkfs with various sector sizes & alignments
Date: Thu, 01 Mar 2012 22:07:55 -0600	[thread overview]
Message-ID: <4F50479B.2050609@sandeen.net> (raw)
In-Reply-To: <4F5005D1.6040208@redhat.com>

This test uses the scsi_debug module to test mkfs against
various physical & logical sector sizes, and with aligned
and unaligned devices.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
---

Dave, I think this implements all your suggestions (in one way or
another...) except the non-modular scsi_debug.  I don't know
how to manipulate things like offset if it's built in, but
if you want to look... I don't see it.

diff --git a/279 b/279
new file mode 100755
index 0000000..dea7fa7
--- /dev/null
+++ b/279
@@ -0,0 +1,120 @@
+#! /bin/bash
+# FS QA Test No. 279
+#
+# Test mkfs.xfs against various types of devices with varying
+# logical & physical sector sizes and offsets.
+#
+#-----------------------------------------------------------------------
+# Copyright (c) 2012 Red Hat, Inc.  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
+#-----------------------------------------------------------------------
+#
+# creator
+owner=sandeen@redhat.com
+
+seq=`basename $0`
+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
+. ./common.scsi_debug
+
+# real QA test starts here
+_supported_fs xfs
+_supported_os Linux
+
+_require_scsi_debug
+
+rm -f $seq.full
+
+# Remove xfs signature so -f isn't needed to re-mkfs
+_wipe_device()
+{
+	device=$1
+	dd if=/dev/zero of=$device bs=4k count=1 &>/dev/null
+}
+
+_check_mkfs()
+{
+	echo "===================" 
+	echo "mkfs with opts: $@" | sed -e "s,/dev/sd.,DEVICE,"
+	mkfs.xfs $@ 2>/dev/null > $tmp.mkfs.full
+	if [ $? -ne 0 ]; then
+		echo "Failed."
+		return
+	fi
+	echo "Passed."
+	cat $tmp.mkfs.full | _filter_mkfs >> $seq.full 2>$tmp.mkfs
+	. $tmp.mkfs
+	echo "Got sector size: $sectsz"
+	device=`echo $@ | awk '{print $NF}'`
+	_wipe_device $device
+}
+
+# === 4k physical 512b logical aligned
+(
+echo "==================="
+echo "4k physical 512b logical aligned"
+SCSI_DEBUG_DEV=`_get_scsi_debug_dev 4096 512 0 128`
+# sector size should default to 4k
+_check_mkfs $SCSI_DEBUG_DEV
+# blocksize smaller than physical sectorsize should revert to logical sectorsize
+_check_mkfs -b size=2048 -f $SCSI_DEBUG_DEV
+) | tee -a $seq.full
+_put_scsi_debug_dev
+
+
+# === 4k physical 512b logical unaligned
+(
+echo "===================" | tee -a $seq.full
+echo "4k physical 512b logical unaligned" | tee -a $seq.full
+SCSI_DEBUG_DEV=`_get_scsi_debug_dev 4096 512 1 128`
+# should fail on misalignment
+_check_mkfs $SCSI_DEBUG_DEV
+# should fall back to logical sector size with force
+_check_mkfs -f $SCSI_DEBUG_DEV
+# with 4k sector specified should fail without force
+_check_mkfs -s size=4096 $SCSI_DEBUG_DEV
+# with 4k sector specified should fall back to logical sector size with force
+_check_mkfs -s size=4096 -f $SCSI_DEBUG_DEV
+) | tee -a $seq.full
+_put_scsi_debug_dev
+
+# === hard 4k physical / 4k logical
+(
+echo "===================" | tee -a $seq.full
+echo "hard 4k physical / 4k logical" | tee -a $seq.full
+SCSI_DEBUG_DEV=`_get_scsi_debug_dev 4096 4096 0 128`
+# block size smaller than sector size should fail 
+_check_mkfs -b size=2048 $SCSI_DEBUG_DEV
+# sector size smaller than physical sector size should fail
+_check_mkfs -s size=512 $SCSI_DEBUG_DEV
+) | tee -a $seq.full
+_put_scsi_debug_dev
+
+status=0
+exit
diff --git a/279.out b/279.out
new file mode 100644
index 0000000..5c49846
--- /dev/null
+++ b/279.out
@@ -0,0 +1,35 @@
+QA output created by 279
+===================
+4k physical 512b logical aligned
+===================
+mkfs with opts: DEVICE
+Passed.
+Got sector size: 4096
+===================
+mkfs with opts: -b size=2048 -f DEVICE
+Passed.
+Got sector size: 512
+===================
+4k physical 512b logical unaligned
+===================
+mkfs with opts: DEVICE
+Failed.
+===================
+mkfs with opts: -f DEVICE
+Passed.
+Got sector size: 512
+===================
+mkfs with opts: -s size=4096 DEVICE
+Failed.
+===================
+mkfs with opts: -s size=4096 -f DEVICE
+Passed.
+Got sector size: 4096
+===================
+hard 4k physical / 4k logical
+===================
+mkfs with opts: -b size=2048 DEVICE
+Failed.
+===================
+mkfs with opts: -s size=512 DEVICE
+Failed.
diff --git a/common.scsi_debug b/common.scsi_debug
new file mode 100644
index 0000000..9f9177c
--- /dev/null
+++ b/common.scsi_debug
@@ -0,0 +1,62 @@
+##/bin/bash
+#
+# Copyright (c) 2012 Red Hat, Inc
+# All Rights Reserved.
+#
+# Written by Eric Sandeen <sandeen@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
+#
+#
+# Functions useful for tests on unique block devices
+#
+
+_require_scsi_debug()
+{
+	# make sure we have the module and it's not already used
+	modinfo scsi_debug 2>&1 > /dev/null || _notrun "scsi_debug module not found"
+	lsmod | grep -wq scsi_debug && _notrun "scsi_debug module in use"
+	# make sure it has the features we need
+	# logical/physical sectors plus unmap support all went in together
+	modinfo scsi_debug | grep -wq sector_size || _notrun "scsi_debug too old"
+}
+
+# Args: [physical sector size, [logical sector size, [unaligned(0|1), [size in megs]]]]
+_get_scsi_debug_dev()
+{
+	# Defaults to phys 512, logical 512, aligned
+	physical=${1-512}
+	logical=${2-512}
+	unaligned=${3-0}
+	size=${4-128}
+
+	phys_exp=0
+	while [ $logical -lt $physical ]; do
+		let physical=physical/2
+		let phys_exp=phys_exp+1
+	done
+	opts="sector_size=$logical physblk_exp=$phys_exp lowest_aligned=$unaligned dev_size_mb=$size"
+	echo "scsi_debug options $opts" >> $seq.full
+	modprobe scsi_debug $opts
+	[ $? -eq 0 ] || _fail "scsi_debug modprobe failed"
+	sleep 1
+	device=`grep -wl scsi_debug /sys/block/sd*/device/model | awk -F / '{print $4}'`
+	echo "/dev/$device"
+}
+
+_put_scsi_debug_dev()
+{
+	sleep 1
+	rmmod scsi_debug || _fail "Could not remove scsi_debug module"
+}
diff --git a/group b/group
index 6f2d748..7a91f41 100644
--- a/group
+++ b/group
@@ -392,3 +392,4 @@ deprecated
 276 auto rw metadata
 277 auto ioctl quick metadata
 278 repair auto
+279 auto mkfs


_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

  parent reply	other threads:[~2012-03-02  4:07 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-03-01 23:27 [PATCH] xfstests 279: test mkfs with various sector sizes & alignments Eric Sandeen
2012-03-02  0:15 ` Dave Chinner
2012-03-02  3:46   ` Eric Sandeen
2012-03-02  4:28     ` Dave Chinner
2012-03-02  4:07 ` Eric Sandeen [this message]
2012-03-02 16:58   ` [PATCH V3] " Eric Sandeen
2012-03-08 22:25     ` Eric Sandeen
2012-03-08 23:11       ` Dave Chinner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4F50479B.2050609@sandeen.net \
    --to=sandeen@sandeen.net \
    --cc=sandeen@redhat.com \
    --cc=xfs@oss.sgi.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.