| ##/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 && (rmmod 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} |
| test -n "$4" && shift |
| test -n "$3" && shift |
| test -n "$2" && shift |
| test -n "$1" && shift |
| |
| 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" >> $seqres.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() |
| { |
| lsmod | grep -wq scsi_debug || return |
| |
| n=2 |
| # use redirection not -q option of modprobe here, because -q of old |
| # modprobe is only quiet when the module is not found, not when the |
| # module is in use. |
| while [ $n -ge 0 ] && ! modprobe -nr scsi_debug >/dev/null 2>&1; do |
| sleep 1 |
| n=$((n-1)) |
| done |
| rmmod scsi_debug || _fail "Could not remove scsi_debug module" |
| } |