From: Eric Sandeen <sandeen@sandeen.net>
To: Dave Chinner <david@fromorbit.com>
Cc: Eric Sandeen <sandeen@redhat.com>, xfs-oss <xfs@oss.sgi.com>
Subject: Re: [PATCH] xfstests 279: test mkfs with various sector sizes & alignments
Date: Thu, 01 Mar 2012 21:46:07 -0600 [thread overview]
Message-ID: <4F50427F.3090204@sandeen.net> (raw)
In-Reply-To: <20120302001500.GC5091@dastard>
On 3/1/12 6:15 PM, Dave Chinner wrote:
> On Thu, Mar 01, 2012 at 05:27:13PM -0600, Eric Sandeen wrote:
>> This test uses the scsi_debug module to test mkfs against
>> various physical & logical sector sizes, and with aligned
>> and unaligned devices.
>>
>> Check out the scenarios in the test, I think I have the right
>> outcomes specified...
>>
>> Hope it's not looking too hacky.
>>
>> Signed-off-by: Eric Sandeen <sandeen@redhat.com>
>> ---
>>
>> diff --git a/279 b/279
>> new file mode 100755
>> index 0000000..b7ad622
>> --- /dev/null
>> +++ b/279
>> @@ -0,0 +1,115 @@
>> +#! /bin/bash
>> +# FS QA Test No. 279
>> +#
>> +# Test mkfs.xfs against various types of devices with varying
>> +# logical & physical sector sizes and offsets.
> ....
>> +seq=`basename $0`
>> +echo "QA output created by $seq"
>> +
>> +here=`pwd`
>> +tmp=/tmp/$$
>> +status=0 # failure is the default!
>
> status=1 means failure is the default....
stupid cut & paste....
>> +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
>> +
>> +_get_sector_size()
>> +{
>> + xfs_db -c "sb 0" -c "p sectsize" $SCSI_DEBUG_DEV | awk '{print $3}'
>> +}
>
> Hmmm. seems unnecessary - can be got from mkfs output.
Thanks, forgot about that trick.
>> +
>> +_wipe_device()
>> +{
>> + device=$1
>> + dd if=/dev/zero of=$device bs=4k count=1 &> /dev/null
>> +}
>> +
>> +_check_mkfs()
>> +{
>> + echo "===================" | tee -a $seq.full
>> + echo "mkfs with opts: $@" | sed -e "s/\/dev\/sd./DEVICE/" | tee -a $seq.full
>
> you could use sed's alternative delimiter to avoid needing to escape
> the path name. i.e | sed -e "s,/dev/sd.,DEVICE,"
good idea.
>> + mkfs.xfs $@ >> $seq.full 2>&1
>
> mkfs.xfs $@ | tee -a $seq.full | filter_mkfs 2> $tmp.mkfs
>
>> + if [ $? -ne 0 ]; then
>> + echo "Failed." | tee -a $seq.full
>> + return
>> + fi
>> + echo "Passed." | tee -a $seq.full
>
>
>> + echo -n "Got sector size: " | tee -a $seq.full
>
> . $tmp.mkfs
> echo -n "Got sector size: $sectsz " | tee -a $seq.full
>
>> + _get_sector_size | tee -a $seq.full
>> + device=`echo $@ | awk '{print $NF}'`
>> + _wipe_device $device
>
> Not sure what this is supposed to do. The awk statement prints the
> number of fields in the input record, and _wipe_device uses that as
> a file name? What am I missing?
that '{print $NF}' prints the last field...
>> +}
>
> pretty much the entire output of this function is teed to $seq.full.
> You could do that at the call site. i.e.
>
> _check_mkfs .... | tee -a $seq.full
>
> Even better:
>
>> +
>> +# === 4k physical 512b logical aligned
>> +echo "===================" | tee -a $seq.full
>> +echo "4k physical 512b logical aligned" | tee -a $seq.full
>> +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
>
> (missing a test case here?)
yep
>> +_put_scsi_debug_dev
>
> (
> 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
> _put_scsi_debug_dev
> ) | tee -a $seq.full
ok... will see if I can get the right stuff to the right place ...
> .....
>> +
>> +exit
>
> status=0
> exit
>
>> +# 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"
>> +}
>
> Might work for modules, but what about CONFIG_SCSI_DEBUG=y? I
> thought you could do all this configuration stuff through the
> /sys/bus/scsi/drivers/scsi_debug interface so you didn't need to
> screw with modules and parameters?
sigh, have to handle them both I suppose.
/sys/bus/pseudo/drivers/scsi_debug actually...
# ls /sys/bus/pseudo/drivers/scsi_debug/
adapter0 bind dif every_nth map no_lun_0 num_tgts scsi_level unbind
add_host delay dix fake_rw max_luns no_uld opts sector_size virtual_gb
ato dev_size_mb dsense guard max_queue num_parts ptype uevent vpd_use_hostno
not sure offhand how to do things like set alignment there.
>> +
>> +# 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"
>> +}
>
> What is the sleep for?
Module stays busy w/o it and the rmmod fails, not sure why offhand.... which probably makes it not very robust :)
-Eric
> Cheers,
>
> Dave.
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
next prev parent reply other threads:[~2012-03-02 3:46 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 [this message]
2012-03-02 4:28 ` Dave Chinner
2012-03-02 4:07 ` [PATCH V2] " Eric Sandeen
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=4F50427F.3090204@sandeen.net \
--to=sandeen@sandeen.net \
--cc=david@fromorbit.com \
--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.