Merge branch 'svn-trunk' into master

This commit is contained in:
Bart Van Assche
2020-09-14 20:47:47 -07:00
5 changed files with 136 additions and 124 deletions

View File

@@ -246,7 +246,15 @@ static inline void cpu_to_be32_array(__be32 *dst, const u32 *src, size_t len)
* pseudo keyword for switch/case use") # v5.4
*/
#ifndef fallthrough
#ifdef __has_attribute
#if __has_attribute(__fallthrough__)
#define fallthrough __attribute__((__fallthrough__))
#else
#define fallthrough do {} while (0) /* fallthrough */
#endif
#else
#define fallthrough do {} while (0) /* fallthrough */
#endif
#endif
/* <linux/cpumask.h> */

View File

@@ -578,7 +578,7 @@ void scst_unregister_target(struct scst_tgt *tgt)
PRINT_INFO("Still waiting for session %s/%s; state %ld; refcnt %#lx",
tgt->tgt_name, sess->sess_name,
sess->shut_phase,
atomic_long_read(&sess->refcnt.count));
percpu_ref_read(&sess->refcnt));
}
mutex_unlock(&scst_mutex);
}

View File

@@ -466,6 +466,15 @@ sub scstAttributes {
return (\%attributes, undef);
}
# Older Perl versions complain if the argument of length() is undefined. Hence
# this function that checks whether its arguments are defined and not empty.
sub valid {
for my $arg (@_) {
return FALSE if (!defined($arg) || $arg eq "");
}
return TRUE;
}
# Convert e.g. EINVAL into "EINVAL".
sub my_strerror {
my ($errorcode) = @_;
@@ -492,7 +501,7 @@ sub setScstAttribute {
my $attribute = shift;
my $value = shift;
return TRUE if (!length($attribute) || !defined($value));
return TRUE if (!valid($attribute) || !defined($value));
# There is a space between the unary minus sign and ENOENT because
# without that space older Perl versions report the following warning:
@@ -543,7 +552,7 @@ sub targets {
my $self = shift;
my $driver = shift;
return (undef, "Too few arguments") if (!length($driver));
return (undef, "Too few arguments") if (!valid($driver));
my $tHandle = new IO::Handle;
my $_path = make_path(SCST_TARGETS_DIR(), $driver);
@@ -578,7 +587,7 @@ sub groups {
my $driver = shift;
my $target = shift;
return (undef, "Too few arguments") if (!length($driver) || !length($target));
return (undef, "Too few arguments") if (!valid($driver, $target));
my $gHandle = new IO::Handle;
my $_path = make_path(SCST_TARGETS_DIR(), $driver, $target,
@@ -620,7 +629,7 @@ sub initiators {
my $errorString;
return (undef, "Too few arguments")
if (!length($driver) || !length($target) || !length($group));
if (!valid($driver, $target, $group));
my $iHandle = new IO::Handle;
my $_path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS,
@@ -657,11 +666,11 @@ sub luns {
my $group = shift;
my $errorString;
return (undef, "Too few arguments") if (!length($driver) || !length($target));
return (undef, "Too few arguments") if (!valid($driver, $target));
my $_path;
if (length($group)) {
if (valid($group)) {
$_path = make_path(SCST_TARGETS_DIR(), $driver, $target,
SCST_GROUPS, $group, SCST_LUNS);
} else {
@@ -672,7 +681,8 @@ sub luns {
my $lHandle = new IO::Handle;
if (!(opendir $lHandle, $_path)) {
if (length($group) && $self->groupExists($driver, $target, $group) != TRUE) {
if (valid($group) &&
$self->groupExists($driver, $target, $group) != TRUE) {
$errorString = "initiators(): Group '$group' does not exist";
} elsif ($self->driverExists($driver) != TRUE) {
$errorString = "luns(): Driver '$driver' is not available";
@@ -800,7 +810,7 @@ sub deviceGroupDevices {
my @devices;
my $errorString;
return (undef, "Too few arguments") if (!length($group));
return (undef, "Too few arguments") if (!valid($group));
my $dHandle = new IO::Handle;
my $_path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_DEVICES);
@@ -832,7 +842,7 @@ sub targetGroups {
my @tgroups;
my $errorString;
return (undef, "Too few arguments") if (!length($group));
return (undef, "Too few arguments") if (!valid($group));
my $dHandle = new IO::Handle;
my $_path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS);
@@ -865,7 +875,7 @@ sub targetGroupTargets {
my @targets;
my $errorString;
return (undef, "Too few arguments") if (!length($group) || !length($tgroup));
return (undef, "Too few arguments") if (!valid($group, $tgroup));
my $dHandle = new IO::Handle;
my $_path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS, $tgroup);
@@ -901,7 +911,7 @@ sub driverExists {
my $dHandle = new IO::Handle;
my $result;
$result = length($driver) &&
$result = valid($driver) &&
opendir($dHandle, make_path(SCST_TARGETS_DIR(), $driver));
close $dHandle if ($result);
@@ -915,7 +925,7 @@ sub driverDynamicAttributes {
my $available;
my $errorString;
return (undef, "Too few arguments") if (!length($driver));
return (undef, "Too few arguments") if (!valid($driver));
my $io = new IO::File make_path(SCST_TARGETS_DIR(), $driver,
SCST_MGMT_IO), O_RDONLY;
@@ -955,7 +965,7 @@ sub checkDriverDynamicAttributes {
my $driver = shift;
my $check = shift;
return TRUE if (!length($driver));
return TRUE if (!valid($driver));
my ($available, $errorString) = $self->driverDynamicAttributes($driver);
@@ -990,8 +1000,8 @@ sub addDriverDynamicAttribute {
my $attribute = shift;
my $value = shift;
return SCST_C_DRV_ADDATTR_FAIL
if (!length($driver) || !defined($attribute) || !defined($value));
return SCST_C_DRV_ADDATTR_FAIL if (!valid($driver, $attribute) ||
!defined($value));
my ($path, $cmd);
$path = make_path(SCST_TARGETS_DIR(), $driver, SCST_MGMT_IO);
@@ -1028,8 +1038,8 @@ sub removeDriverDynamicAttribute {
my $attribute = shift;
my $value = shift;
return SCST_C_DRV_REMATTR_FAIL
if (!length($driver) || !defined($attribute) || !defined($value));
return SCST_C_DRV_REMATTR_FAIL if (!valid($driver, $attribute) ||
!defined($value));
my ($path, $cmd);
$path = make_path(SCST_TARGETS_DIR(), $driver, SCST_MGMT_IO);
@@ -1065,7 +1075,7 @@ sub targetExists {
my $driver = shift;
my $target = shift;
return length($driver) && length($target) &&
return valid($driver, $target) &&
$target ne '.' && $target ne '..' && $target ne 'module' &&
(-d make_path(SCST_TARGETS_DIR(), $driver, $target)) ? TRUE : FALSE;
}
@@ -1083,7 +1093,7 @@ sub targetType {
my $target = shift;
my $errorString;
return (undef, "Too few arguments") if (!length($driver) || !length($target));
return (undef, "Too few arguments") if (!valid($driver, $target));
if ($self->driverIsVirtualCapable($driver)) {
my $attribs;
@@ -1160,7 +1170,7 @@ sub targetDynamicAttributes {
my $available;
my $errorString;
return (undef, "Too few arguments") if (!length($driver));
return (undef, "Too few arguments") if (!valid($driver));
my $io = new IO::File make_path(SCST_TARGETS_DIR(), $driver,
SCST_MGMT_IO), O_RDONLY;
@@ -1235,8 +1245,7 @@ sub addTargetDynamicAttribute {
my $value = shift;
return SCST_C_TGT_ADDATTR_FAIL
if (!length($driver) || !defined($target) ||
!defined($attribute) || !defined($value));
if (!valid($driver, $target, $attribute) || !defined($value));
my ($path, $cmd);
$path = make_path(SCST_TARGETS_DIR(), $driver, SCST_MGMT_IO);
@@ -1279,8 +1288,7 @@ sub removeTargetDynamicAttribute {
my $value = shift;
return SCST_C_TGT_REMATTR_FAIL
if (!defined($driver) || !defined($target) ||
!defined($attribute) || !defined($value));
if (!valid($driver, $target, $attribute) || !defined($value));
my ($path, $cmd);
$path = make_path(SCST_TARGETS_DIR(), $driver, SCST_MGMT_IO);
@@ -1389,7 +1397,7 @@ sub groupExists {
my $target = shift;
my $group = shift;
return FALSE if (!defined($driver) || !defined($target) || !defined($group));
return FALSE if (!valid($driver, $target, $group));
my ($groups, $errorString) = $self->groups($driver, $target);
@@ -1415,8 +1423,7 @@ sub initiatorExists {
my $group = shift;
my $initiator = shift;
return FALSE if (!defined($driver) || !defined($target) ||
!defined($group) || !defined($initiator));
return FALSE if (!valid($driver, $target, $group, $initiator));
my ($initiators, $errorString) = $self->initiators($driver, $target, $group);
@@ -1442,8 +1449,7 @@ sub lunExists {
my $lun = shift;
my $group = shift;
return FALSE if (!defined($driver) || !defined($target) ||
!defined($lun));
return FALSE if (!valid($driver, $target, $lun));
my ($luns, $errorString) = $self->luns($driver, $target, $group);
@@ -1477,8 +1483,7 @@ sub addGroup {
my $target = shift;
my $group = shift;
return SCST_C_GRP_ADD_FAIL if (!length($driver) || !length($target) ||
!length($group));
return SCST_C_GRP_ADD_FAIL if (!valid($driver, $target, $group));
my ($path, $cmd);
$path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS,
@@ -1518,8 +1523,7 @@ sub removeGroup {
my $target = shift;
my $group = shift;
return SCST_C_GRP_REM_FAIL if (!length($driver) || !length($target) ||
!length($group));
return SCST_C_GRP_REM_FAIL if (!valid($driver, $target, $group));
my ($path, $cmd);
$path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS,
@@ -1557,7 +1561,7 @@ sub addDeviceGroup {
my $self = shift;
my $group = shift;
return SCST_C_DEV_GRP_ADD_FAIL if (!defined($group));
return SCST_C_DEV_GRP_ADD_FAIL if (!valid($group));
my ($path, $cmd);
$path = make_path(SCST_DEV_GROUP_DIR(), SCST_MGMT_IO);
@@ -1584,7 +1588,7 @@ sub removeDeviceGroup {
my $self = shift;
my $group = shift;
return SCST_C_DEV_GRP_REM_FAIL if (!defined($group));
return SCST_C_DEV_GRP_REM_FAIL if (!valid($group));
my ($path, $cmd);
$path = make_path(SCST_DEV_GROUP_DIR(), SCST_MGMT_IO);
@@ -1616,7 +1620,7 @@ sub addDeviceGroupDevice {
my $dgroups;
my $errorString;
return SCST_C_DGRP_ADD_DEV_FAIL if (!length($group) || !length($device));
return SCST_C_DGRP_ADD_DEV_FAIL if (!valid($group, $device));
my ($path, $cmd);
$path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_DEVICES,
@@ -1666,7 +1670,7 @@ sub addTargetGroup {
my $group = shift;
my $tgroup = shift;
return SCST_C_DGRP_ADD_GRP_FAIL if (!length($group) || !length($tgroup));
return SCST_C_DGRP_ADD_GRP_FAIL if (!valid($group, $tgroup));
my ($path, $cmd);
$path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS,
@@ -1701,7 +1705,7 @@ sub addTargetGroupTarget {
my $tgt = shift;
return SCST_C_TGRP_ADD_TGT_FAIL
if (!length($group) || !length($tgroup) || !length($tgt));
if (!valid($group, $tgroup, $tgt));
my ($path, $cmd);
$path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS,
@@ -1737,7 +1741,7 @@ sub removeDeviceGroupDevice {
my $group = shift;
my $device = shift;
return SCST_C_DGRP_REM_DEV_FAIL if (!length($group) || !length($device));
return SCST_C_DGRP_REM_DEV_FAIL if (!valid($group, $device));
my ($path, $cmd);
$path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_DEVICES,
@@ -1776,7 +1780,7 @@ sub removeTargetGroup {
my $group = shift;
my $tgroup = shift;
return SCST_C_DGRP_REM_GRP_FAIL if (!length($group) || !length($tgroup));
return SCST_C_DGRP_REM_GRP_FAIL if (!valid($group, $tgroup));
my ($path, $cmd);
$path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS,
@@ -1812,7 +1816,7 @@ sub removeTargetGroupTarget {
my $tgroup = shift;
my $tgt = shift;
return SCST_C_TGRP_REM_TGT_FAIL if (!length($group) || !length($tgroup) || !length($tgt));
return SCST_C_TGRP_REM_TGT_FAIL if (!valid($group, $tgroup, $tgt));
my ($path, $cmd);
$path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS,
@@ -1854,8 +1858,7 @@ sub addInitiator {
my $initiator = shift;
return SCST_C_GRP_ADD_INI_FAIL
if (!length($driver) || !length($target) ||
!length($group) || !length($initiator));
if (!valid($driver, $target, $group, $initiator));
my ($path, $cmd);
$path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS,
@@ -1874,9 +1877,8 @@ sub addInitiator {
return FALSE if ($self->{'debug'} || $bytes > 0);
}
return SCST_C_GRP_REM_INI_FAIL if (!length($driver) ||
!length($target) ||
!length($initiator));
return SCST_C_GRP_REM_INI_FAIL
if (!valid($driver, $target, $initiator));
my $rc = $self->driverExists($driver);
return SCST_C_DRV_NO_DRIVER if (!$rc);
@@ -1904,7 +1906,8 @@ sub removeInitiator {
my $group = shift;
my $initiator = shift;
return SCST_C_GRP_REM_INI_FAIL if (!length($driver) || !length($target) || !length($group) || !length($initiator));
return SCST_C_GRP_REM_INI_FAIL
if (!valid($driver, $target, $group, $initiator));
my ($path, $cmd);
$path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS,
@@ -2041,12 +2044,10 @@ sub addLun {
my $attributes = shift;
my $group = shift;
my $err = length($group) ? SCST_C_GRP_ADD_LUN_FAIL :
my $err = valid($group) ? SCST_C_GRP_ADD_LUN_FAIL :
SCST_C_TGT_ADD_LUN_FAIL;
return $err if (!length($driver) || !length($target) ||
!length($device) || !length($lun) ||
!length($attributes));
return $err if (!valid($driver, $target, $device, $lun, $attributes));
my $o_string = "";
foreach my $attribute (keys %{$attributes}) {
@@ -2057,7 +2058,7 @@ sub addLun {
$o_string =~ s/\s$//;
my ($path, $cmd);
if (length($group)) {
if (valid($group)) {
$path = make_path(SCST_TARGETS_DIR(), $driver, $target,
SCST_GROUPS, $group, SCST_LUNS, SCST_MGMT_IO);
} else {
@@ -2079,14 +2080,14 @@ sub addLun {
return FALSE if ($self->{'debug'} || $bytes > 0);
}
if (length($group)) {
if (valid($group)) {
my $rc = $self->groupExists($driver, $target, $group);
return SCST_C_GRP_NO_GROUP if (!$rc);
return $rc if ($rc > 1);
}
my $rc = $self->lunExists($driver, $target, $lun, $group);
return (length($group) ? SCST_C_GRP_LUN_EXISTS :
return (valid($group) ? SCST_C_GRP_LUN_EXISTS :
SCST_C_TGT_LUN_EXISTS) if ($rc == TRUE);
return $rc if ($rc > 1);
@@ -2116,14 +2117,13 @@ sub removeLun {
my $lun = shift;
my $group = shift;
my $err = length($group) ? SCST_C_GRP_REM_LUN_FAIL :
my $err = valid($group) ? SCST_C_GRP_REM_LUN_FAIL :
SCST_C_TGT_ADD_LUN_FAIL;
return $err if (!length($driver) || !length($target) ||
!length($lun));
return $err if (!valid($driver, $target, $lun));
my ($path, $cmd);
if (length($group)) {
if (valid($group)) {
$path = make_path(SCST_TARGETS_DIR(), $driver, $target,
SCST_GROUPS, $group, SCST_LUNS,
SCST_MGMT_IO);
@@ -2153,15 +2153,15 @@ sub removeLun {
return SCST_C_TGT_NO_TARGET if (!$rc);
return $rc if ($rc > 1);
if (length($group)) {
if (valid($group)) {
$rc = $self->groupExists($driver, $target, $group);
return SCST_C_GRP_NO_GROUP if (!$rc);
return $rc if ($rc > 1);
}
$rc = $self->lunExists($driver, $target, $lun, $group);
return (length($group) ? SCST_C_GRP_NO_LUN : SCST_C_TGT_NO_LUN)
if (!$rc);
return (valid($group) ? SCST_C_GRP_NO_LUN :
SCST_C_TGT_NO_LUN) if (!$rc);
return $rc if ($rc > 1);
return $err;
@@ -2178,7 +2178,7 @@ sub replaceLun {
my $err;
return TRUE if (!length($lun));
return TRUE if (!valid($lun));
my $rc = $self->driverExists($driver);
return SCST_C_DRV_NO_DRIVER if (!$rc);
@@ -2188,7 +2188,7 @@ sub replaceLun {
return SCST_C_TGT_NO_TARGET if (!$rc);
return $rc if ($rc > 1);
if (length($group)) {
if (valid($group)) {
$rc = $self->groupExists($driver, $target, $group);
return SCST_C_GRP_NO_GROUP if (!$rc);
return $rc if ($rc > 1);
@@ -2248,13 +2248,13 @@ sub clearLuns {
my $target = shift;
my $group = shift;
my $err = length($group) ? SCST_C_GRP_CLR_LUN_FAIL :
my $err = valid($group) ? SCST_C_GRP_CLR_LUN_FAIL :
SCST_C_TGT_CLR_LUN_FAIL;
return $err if (!length($driver) || !length($target));
return $err if (!valid($driver, $target));
my ($path, $cmd);
if (length($group)) {
if (valid($group)) {
$path = make_path(SCST_TARGETS_DIR(), $driver, $target,
SCST_GROUPS, $group, SCST_LUNS,
SCST_MGMT_IO);
@@ -2284,7 +2284,7 @@ sub clearLuns {
return SCST_C_TGT_NO_TARGET if (!$rc);
return $rc if ($rc > 1);
if (length($group)) {
if (valid($group)) {
$rc = $self->groupExists($driver, $target, $group);
return SCST_C_GRP_NO_GROUP if (!$rc);
return $rc if ($rc > 1);
@@ -2297,7 +2297,7 @@ sub deviceHandler {
my $self = shift;
my $device = shift;
return undef if (!length($device));
return undef if (!valid($device));
my $handler = readlink(make_path(SCST_DEVICES_DIR(), $device,
'handler'));
@@ -2311,7 +2311,7 @@ sub devices {
my @devices;
my $dHandle = new IO::Handle;
my $_path = !length($handler) ? SCST_DEVICES_DIR() :
my $_path = !valid($handler) ? SCST_DEVICES_DIR() :
make_path(SCST_HANDLERS_DIR(), $handler);
if (!(opendir $dHandle, $_path)) {
return (undef, "devices(): Unable to read directory '$_path': $!");
@@ -2321,7 +2321,7 @@ sub devices {
next if ($device eq '.' || $device eq '..');
my $isdev = (-d make_path(SCST_DEVICES_DIR(), $device));
if ($isdev && (!length($handler) ||
if ($isdev && (!valid($handler) ||
$handler eq $self->deviceHandler($device))) {
push @devices, $device;
}
@@ -2336,11 +2336,11 @@ sub deviceOpen {
my $self = shift;
my $device = shift;
return FALSE if (!length($device));
return FALSE if (!valid($device));
my ($devices, $errorString) = $self->devices();
return SCST_C_FATAL_ERROR if (!length($devices));
return SCST_C_FATAL_ERROR if (!valid($devices));
foreach my $_device (@{$devices}) {
return TRUE if ($device eq $_device);
@@ -2592,7 +2592,7 @@ sub setDriverAttribute {
my $attribute = shift;
my $value = shift;
return TRUE if (!length($attribute) || !defined($value));
return TRUE if (!valid($attribute) || !defined($value));
my $path = make_path(SCST_TARGETS_DIR(), $driver, $attribute);
@@ -2625,7 +2625,7 @@ sub targetAttributes {
my %attributes = ( );
my $errorString;
return (undef, "Too few arguments") if (!length($driver) || !length($target));
return (undef, "Too few arguments") if (!valid($driver, $target));
my $pHandle = new IO::Handle;
my $_path = make_path(SCST_TARGETS_DIR(), $driver, $target);
@@ -2729,8 +2729,8 @@ sub setTargetAttribute {
my $attribute = shift;
my $value = shift;
return TRUE if (!length($driver) || !length($target) ||
!length($attribute) || !defined($value));
return TRUE if (!valid($driver, $target, $attribute) ||
!defined($value));
my ($path, $cmd);
$path = make_path(SCST_TARGETS_DIR(), $driver, $target, $attribute);
@@ -2856,7 +2856,7 @@ sub setGroupAttribute {
my $attribute = shift;
my $value = shift;
return TRUE if (!length($attribute) || !defined($value));
return TRUE if (!valid($attribute) || !defined($value));
my ($path, $cmd);
$path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS,
@@ -2904,7 +2904,7 @@ sub lunAttributes {
my ($_path, $luncrattr);
if (length($group)) {
if (valid($group)) {
$_path = make_path(SCST_TARGETS_DIR(), $driver, $target,
SCST_GROUPS, $group, SCST_LUNS, $lun);
($luncrattr, $errorString) =
@@ -2921,7 +2921,8 @@ sub lunAttributes {
$errorString = "lunAttributes(): Driver '$driver' is not available";
} elsif ($self->targetExists($driver, $target) != TRUE) {
$errorString = "lunAttributes(): Target '$target' is not available";
} elsif (length($group) && $self->groupExists($driver, $target, $group) != TRUE) {
} elsif (valid($group) &&
$self->groupExists($driver, $target, $group) != TRUE) {
$errorString = "lunAttributes(): Group '$group' does not exist";
} elsif ($self->lunExists($driver, $target, $lun, $group) != TRUE) {
$errorString = "lunAttributes(): LUN '$lun' does not exist";
@@ -3008,12 +3009,11 @@ sub setLunAttribute {
my $group = shift;
return SCST_C_LUN_SETATTR_FAIL
if (!length($driver) || !length($target) || !length($lun) ||
!length($attribute) || !defined($value));
if (!valid($driver, $target, $lun, $attribute) || !defined($value));
my $path;
if (length($group)) {
if (valid($group)) {
$path = make_path(SCST_TARGETS_DIR(), $driver, $target,
SCST_GROUPS, $group, SCST_LUNS, $lun,
$attribute);
@@ -3043,15 +3043,15 @@ sub setLunAttribute {
return SCST_C_TGT_NO_TARGET if (!$rc);
return $rc if ($rc > 1);
if (length($group)) {
if (valid($group)) {
$rc = $self->groupExists($driver, $target, $group);
return SCST_C_GRP_NO_GROUP if (!$rc);
return $rc if ($rc > 1);
}
$rc = $self->lunExists($driver, $target, $lun, $group);
return (length($group) ? SCST_C_GRP_NO_LUN : SCST_C_TGT_NO_LUN)
if (!$rc);
return (valid($group) ? SCST_C_GRP_NO_LUN :
SCST_C_TGT_NO_LUN) if (!$rc);
return $rc if ($rc > 1);
my ($attributes, $errorString) = $self->lunAttributes($driver, $target, $lun, $group);
@@ -3160,7 +3160,7 @@ sub setInitiatorAttribute {
my $attribute = shift;
my $value = shift;
return TRUE if (!length($attribute) || !defined($value));
return TRUE if (!valid($attribute) || !defined($value));
my $path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS,
$group, SCST_LUNS, $initiator, $attribute);
@@ -3448,7 +3448,7 @@ sub setAluaAttribute {
my $attribute = shift;
my $value = shift;
return TRUE if (!length($attribute) || !defined($value));
return TRUE if (!valid($attribute) || !defined($value));
my $bytes = - ENOENT;
my $path = make_path(SCST_DEV_GROUP_DIR(), $attribute);
@@ -3475,7 +3475,7 @@ sub setDeviceGroupAttribute {
my $attribute = shift;
my $value = shift;
return TRUE if (!length($attribute) || !defined($value));
return TRUE if (!valid($attribute) || !defined($value));
my $bytes = - ENOENT;
my $path = make_path(SCST_DEV_GROUP_DIR(), $group, $attribute);
@@ -3507,8 +3507,7 @@ sub setTargetGroupAttribute {
my $attribute = shift;
my $value = shift;
return TRUE if (!length($group) || !length($tgroup) ||
!length($attribute) || !defined($value));
return TRUE if !valid($group, $tgroup, $attribute) || !defined($value);
my $bytes = - ENOENT;
my $path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS, $tgroup, $attribute);
@@ -3545,8 +3544,7 @@ sub setTargetGroupTargetAttribute {
my $attribute = shift;
my $value = shift;
return TRUE if (!length($group) || !length($tgroup) ||
!length($tgt) || !length($attribute) ||
return TRUE if (!valid($group, $tgroup, $tgt, $attribute) ||
!defined($value));
my $bytes = - ENOENT;
@@ -3610,7 +3608,7 @@ sub handlerExists {
my $self = shift;
my $handler = shift;
return FALSE if (!length($handler));
return FALSE if (!valid($handler));
my ($handlers, $errorString) = $self->handlers();
@@ -3629,7 +3627,7 @@ sub setHandlerAttribute {
my $attribute = shift;
my $value = shift;
return TRUE if (!length($attribute) || !defined($value));
return TRUE if (!valid($attribute) || !defined($value));
my $bytes = - ENOENT;
my $path = make_path(SCST_HANDLERS_DIR(), $handler, $attribute);
@@ -3861,7 +3859,7 @@ sub deviceCreateAttributes {
my %attributes = ( );
my $errorString;
return (undef, "missing handler argument") if (!length($handler));
return (undef, "missing handler argument") if (!valid($handler));
my $io = new IO::File make_path(SCST_HANDLERS_DIR(), $handler,
SCST_MGMT_IO), O_RDONLY;
@@ -3903,7 +3901,7 @@ sub openDevice {
my $attributes = shift;
return SCST_C_DEV_OPEN_FAIL
if (!length($handler) || !length($device) || !length($attributes));
if (!valid($handler, $device, $attributes));
my $o_string = "";
foreach my $attribute (keys %{$attributes}) {
@@ -3953,7 +3951,7 @@ sub closeDevice {
my $handler = shift;
my $device = shift;
return SCST_C_DEV_CLOSE_FAIL if (!length($handler) || !length($device));
return SCST_C_DEV_CLOSE_FAIL if (!valid($handler, $device));
my ($path, $cmd);
$path = make_path(SCST_HANDLERS_DIR(), $handler, SCST_MGMT_IO);
@@ -4237,7 +4235,7 @@ sub lunCreateAttributes {
my $_path;
if (length($group)) {
if (valid($group)) {
$_path = make_path(SCST_TARGETS_DIR(), $driver, $target,
SCST_GROUPS, $group, SCST_LUNS,
SCST_MGMT_IO);
@@ -4255,7 +4253,8 @@ sub lunCreateAttributes {
} elsif ($self->targetExists($driver, $target) != TRUE) {
$errorString = "lunCreateAttributes(): Target '$target' ".
"is not available";
} elsif (length($group) && $self->groupExists($driver, $target, $group) != TRUE) {
} elsif (valid($group) &&
$self->groupExists($driver, $target, $group) != TRUE) {
$errorString = "lunCreateAttributes(): Group '$group' ".
"does not exist";
} else {
@@ -4382,7 +4381,7 @@ sub sessions {
my %_sessions;
my $errorString;
return (undef, "Too few arguments") if (!length($driver) || !length($target));
return (undef, "Too few arguments") if (!valid($driver, $target));
my $sHandle = new IO::Handle;
my $_path = make_path(SCST_TARGETS_DIR(), $driver, $target,
@@ -4636,7 +4635,7 @@ sub make_path {
if ($path && rindex($path, '/') != length($path) - 1) {
$path .= '/';
}
cluck("make_path: invalid argument") if !length($element);
cluck("make_path: invalid argument") if !valid($element);
$path .= $element;
}

View File

@@ -57,7 +57,7 @@ sub testDriverDynAttr {
ok($SCST->addDriverDynamicAttribute(), $SCST->SCST_C_DRV_ADDATTR_FAIL);
ok($SCST->addDriverDynamicAttribute('no-such-driver', '', ''),
$SCST->SCST_C_DRV_NO_DRIVER);
$SCST->SCST_C_DRV_ADDATTR_FAIL);
ok($SCST->addDriverDynamicAttribute('iscsi', 'no-such-attribute', ''),
$SCST->SCST_C_DRV_BAD_ATTRIBUTES);
ok($SCST->addDriverDynamicAttribute('iscsi', 'IncomingUser',
@@ -71,7 +71,7 @@ sub testDriverDynAttr {
'static' => 0 }));
ok($SCST->removeDriverDynamicAttribute(), $SCST->SCST_C_DRV_REMATTR_FAIL);
ok($SCST->removeDriverDynamicAttribute('no-such-driver', '', ''),
$SCST->SCST_C_DRV_NO_DRIVER);
$SCST->SCST_C_DRV_REMATTR_FAIL);
ok($SCST->removeDriverDynamicAttribute('iscsi', 'no-such-attribute', ''),
$SCST->SCST_C_DRV_BAD_ATTRIBUTES);
ok($SCST->removeDriverDynamicAttribute('iscsi', 'IncomingUser',
@@ -113,9 +113,9 @@ sub testTargetDynAttr {
ok($SCST->addTargetDynamicAttribute(), $SCST->SCST_C_TGT_ADDATTR_FAIL);
ok($SCST->addTargetDynamicAttribute('no-such-driver', '', '', ''),
$SCST->SCST_C_DRV_NO_DRIVER);
$SCST->SCST_C_TGT_ADDATTR_FAIL);
ok($SCST->addTargetDynamicAttribute('iscsi', 'no-such-target', '', ''),
$SCST->SCST_C_TGT_NO_TARGET);
$SCST->SCST_C_TGT_ADDATTR_FAIL);
ok($SCST->addTargetDynamicAttribute('iscsi', 'tgt1', 'no-such-attribute',
'', ''),
$SCST->SCST_C_TGT_BAD_ATTRIBUTES);
@@ -130,9 +130,9 @@ sub testTargetDynAttr {
'static' => 0 }));
ok($SCST->removeTargetDynamicAttribute(), $SCST->SCST_C_TGT_REMATTR_FAIL);
ok($SCST->removeTargetDynamicAttribute('no-such-driver', '', '', ''),
$SCST->SCST_C_DRV_NO_DRIVER);
$SCST->SCST_C_TGT_REMATTR_FAIL);
ok($SCST->removeTargetDynamicAttribute('iscsi', 'no-such-target', '', ''),
$SCST->SCST_C_TGT_NO_TARGET);
$SCST->SCST_C_TGT_REMATTR_FAIL);
ok($SCST->removeTargetDynamicAttribute('iscsi', 'tgt1', 'no-such-attribute',
''),
$SCST->SCST_C_TGT_BAD_ATTRIBUTES);

View File

@@ -1464,6 +1464,12 @@ sub readWorkingConfig {
return FALSE;
}
# Older Perl versions complain if the argument of length() is undefined. Hence
# this function that checks whether its arguments are defined and not empty.
sub valid {
return $SCST->valid(@_);
}
# Escape metacharacters (space, backslash and hash sign).
sub escapeMeta {
my $value = shift;
@@ -3079,7 +3085,7 @@ sub listHandler {
my $handler = shift;
my %toprint;
my $got_handler = defined($handler);
my $got_handler = valid($handler);
my ($handlers, $errorString) = $SCST->handlers();
my $l_device = 0;
@@ -3142,7 +3148,7 @@ sub listDevices {
my $device = shift;
my $nonkey = shift;
return listDevice($device, $nonkey) if (length($device));
return listDevice($device, $nonkey) if (valid($device));
return listHandler();
}
@@ -3166,7 +3172,7 @@ sub listDeviceGroups {
my $group = shift;
my $showall = shift;
return listDeviceGroup($group) if (length($group));
return listDeviceGroup($group) if (valid($group));
my ($groups, $errorString) = $SCST->deviceGroups();
@@ -3245,8 +3251,8 @@ sub listTargetGroups {
my $tgroup = shift;
my $indent = shift;
return listDeviceGroups(undef, TRUE) if (!length($group));
return listTargetGroup($group, $tgroup) if (length($tgroup));
return listDeviceGroups(undef, TRUE) if (!valid($group));
return listTargetGroup($group, $tgroup) if (valid($tgroup));
my ($tgroups, $errorString) = $SCST->targetGroups($group);
@@ -3334,7 +3340,7 @@ sub listDeviceGroupDevices {
sub listDrivers {
my $driver = shift;
return listTargets($driver, undef) if (length($driver));
return listTargets($driver, undef) if (valid($driver));
my ($drivers, $errorString) = $SCST->drivers();
@@ -3362,10 +3368,9 @@ sub listTargets {
my $target = shift;
my %toprint;
return listGroups($driver, $target, undef)
if (length($target) and length($driver));
return listGroups($driver, $target, undef) if (valid($target, $driver));
my $got_driver = !!length($driver);
my $got_driver = valid($driver);
my ($drivers, $errorString) = $SCST->drivers();
@@ -3472,7 +3477,7 @@ sub listGroup {
my $errorString;
($luns, $errorString) = $SCST->luns($driver, $target, $group) if (!$luns);
if (!length($initiators) && length($group)) {
if (!valid($initiators) && valid($group)) {
($initiators, $errorString) = $SCST->initiators($driver, $target, $group);
return TRUE if issueWarning($errorString);
}
@@ -3507,7 +3512,7 @@ sub listGroup {
print "\t(none)\n";
}
if (length($group)) {
if (valid($group)) {
print "\nAssigned Initiators:\n\n";
if ($#{$initiators} > -1) {
@@ -3526,7 +3531,7 @@ sub listGroup {
}
}
} else {
if (length($group)) {
if (valid($group)) {
print "Group '$group' has no associated LUNs or initiators.\n";
} else {
print "Driver/target '$driver/$target' has no associated LUNs.\n";
@@ -3542,7 +3547,7 @@ sub listGroups {
my $group = shift;
my $found = FALSE;
if (length($group) and length($driver) and length($target)) {
if (valid($group, $driver, $target)) {
return listGroup($driver, $target, $group);
}
@@ -3951,7 +3956,7 @@ sub listLunAttributes {
return TRUE if issueWarning($errorString);
if (!scalar(keys %{$attributes})) {
if (length($group)) {
if (valid($group)) {
print "No such driver/target/group/lun '$driver/$target/$group/$lun' found.\n";
} else {
print "No such driver/target/lun '$driver/$target/$lun' found.\n";
@@ -5163,7 +5168,7 @@ sub addLun {
return FALSE;
}
if (length($group)) {
if (valid($group)) {
print "\t-> Adding device '$device' at LUN $lun to driver/target/group ".
"'$driver/$target/$group': ";
} else {
@@ -5354,7 +5359,7 @@ sub issueLip {
my $warn = shift;
my $errorString;
if (length($driver) && length($target)) {
if (valid($driver, $target)) {
return _issueLip($driver, $target, $warn);
} else {
my $drivers;