From a3266ca8f2c053e640b78243e7a72d7856611851 Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Sun, 13 Sep 2020 03:12:26 +0000 Subject: [PATCH 1/2] scstadmin: Remove support for the "new" sysfs interface Around 2011 a sysfs-tree-changes branch was created in the SourceForge repository because Greg KH asked to rework the SCST sysfs interface. That interface is called the "new" sysfs interface. The current and only used API is called the "old" sysfs interface. Since the "new" sysfs interface never had any users other than myself, remove support for that interface. See also commit a66cbc41151e ("scstadmin: Add support for the sysfs interface provided by the code on the sysfs-tree-changes branch"). git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@9151 d57e44dd-8a1f-0410-8b47-8ef2f437770f --- .../scst-1.0.0/lib/SCST/SCST.pm | 854 +++++------------- 1 file changed, 244 insertions(+), 610 deletions(-) diff --git a/scstadmin/scstadmin.sysfs/scst-1.0.0/lib/SCST/SCST.pm b/scstadmin/scstadmin.sysfs/scst-1.0.0/lib/SCST/SCST.pm index ca5c6537c..2ac879f0a 100644 --- a/scstadmin/scstadmin.sysfs/scst-1.0.0/lib/SCST/SCST.pm +++ b/scstadmin/scstadmin.sysfs/scst-1.0.0/lib/SCST/SCST.pm @@ -21,28 +21,15 @@ use constant { TRUE => 1, FALSE => 0, -SCST_ROOT_OLD => '/sys/kernel/scst_tgt', -SCST_ROOT_NEW => '/sys/devices/scst', +SCST_ROOT => '/sys/kernel/scst_tgt', # Root-level SCST_SGV => 'sgv', -# Root level, old sysfs interface SCST_HANDLERS => 'handlers', SCST_DEVICES => 'devices', SCST_TARGETS => 'targets', SCST_DEV_GROUPS => 'device_groups', SCST_QUEUE_RES => 'last_sysfs_mgmt_res', -# Root level, new sysfs interface -IN_SCST_HANDLERS => 'device_driver', -IN_SCST_DEVICES => 'device', -IN_SCST_TARGETS => 'target_driver', -IN_SCST_DEV_GROUPS => 'device_groups', -SCST_ADD_TGT => 'add_target', -SCST_ADD_TGT_PARAMS => 'add_target_parameters', -SCST_TGTT_ATTR => 'driver_attributes', -SCST_TGT_ATTR => 'target_attributes', -SCST_ADD_DEV_PARAMS => 'add_device_parameters', -SCST_PARAM_ATTR => 'parameters', # Device group specific SCST_DG_DEVICES => 'devices', @@ -301,82 +288,36 @@ my $_SCST_MIN_MAJOR_ = 2; my $_SCST_MIN_MINOR_ = 0; my $_SCST_MIN_RELEASE_ = 0; -my $_new_sysfs_interface; -sub new_sysfs_interface { - if (!defined($_new_sysfs_interface)) { - $_new_sysfs_interface = !(-d SCST_ROOT_OLD) ? TRUE : FALSE; - } - return $_new_sysfs_interface; -} - -my $_scst_root_dir; sub SCST_ROOT_DIR { - if (!defined($_scst_root_dir)) { - $_scst_root_dir = (-d SCST_ROOT_OLD ? SCST_ROOT_OLD : - SCST_ROOT_NEW); - } - return $_scst_root_dir; + return SCST_ROOT; } -my $_scst_sgv_dir; sub SCST_SGV_DIR { - if (!defined($_scst_sgv_dir)) { - $_scst_sgv_dir = SCST_ROOT_DIR() . '/sgv'; - } - return $_scst_sgv_dir; + return SCST_ROOT . '/sgv'; } -my $_scst_queue_res_path = ""; sub SCST_QUEUE_RES_PATH { - if ($_scst_queue_res_path eq "") { - $_scst_queue_res_path = (-d SCST_ROOT_OLD ? - SCST_ROOT_OLD . '/' . SCST_QUEUE_RES : - undef); - } - return $_scst_queue_res_path; + return SCST_ROOT . '/' . SCST_QUEUE_RES; } # Device handlers. -my $_scst_handlers_dir; sub SCST_HANDLERS_DIR { - if (!defined($_scst_handlers_dir)) { - $_scst_handlers_dir = (-d SCST_ROOT_OLD ? - SCST_ROOT_OLD . '/' . SCST_HANDLERS : - '/sys/bus/scst_tgt_dev/drivers'); - } - return $_scst_handlers_dir; + return SCST_ROOT . '/' . SCST_HANDLERS; } # Device instances. -my $_scst_devices_dir; sub SCST_DEVICES_DIR { - if (!defined($_scst_devices_dir)) { - $_scst_devices_dir = (-d SCST_ROOT_OLD ? - SCST_ROOT_OLD . '/' . SCST_DEVICES : - '/sys/bus/scst_tgt_dev/devices'); - } - return $_scst_devices_dir; + return SCST_ROOT . '/' . SCST_DEVICES; } # Target drivers. -my $_scst_targets_dir; sub SCST_TARGETS_DIR { - if (!defined($_scst_targets_dir)) { - $_scst_targets_dir = (-d SCST_ROOT_OLD ? - SCST_ROOT_OLD . '/' . SCST_TARGETS : - '/sys/bus/scst_target/drivers'); - } - return $_scst_targets_dir; + return SCST_ROOT . '/' . SCST_TARGETS; } # ALUA Device groups. -my $_scst_dev_group_dir; sub SCST_DEV_GROUP_DIR { - if (!defined($_scst_dev_group_dir)) { - $_scst_dev_group_dir = make_path(SCST_ROOT_DIR(), - SCST_DEV_GROUPS); - } - return $_scst_dev_group_dir; + return SCST_ROOT . '/' . SCST_DEV_GROUPS; } sub new { @@ -463,8 +404,7 @@ sub scstAttributes { chomp $value; my $is_key = <$io>; - $is_key = new_sysfs_interface() && !$is_static || - $is_key && $is_key =~ /\[key\]/; + $is_key = $is_key && $is_key =~ /\[key\]/; my $key = 0; if ($is_key) { @@ -790,8 +730,7 @@ sub aluaAttributes { my $second_line = <$io>; $second_line = "" if (!defined($second_line)); - if (new_sysfs_interface() && !$is_static - || ($second_line =~ /\[key\]/)) { + if ($second_line =~ /\[key\]/) { my $key = 0; if ($attribute =~ /^([^\d]+)(\d+)$/) { $attribute = $1; @@ -958,45 +897,33 @@ sub driverDynamicAttributes { return (undef, "Too few arguments") if (!defined($driver)); - if (new_sysfs_interface()) { - my $io = new IO::File make_path(SCST_TARGETS_DIR(), $driver, - SCST_TGTT_ATTR), O_RDONLY; - if ($io) { - while (my $attribute = <$io>) { - chomp($attribute); - $attributes{$attribute} = ''; - } - close $io; - } - } else { - my $io = new IO::File make_path(SCST_TARGETS_DIR(), $driver, - SCST_MGMT_IO), O_RDONLY; + my $io = new IO::File make_path(SCST_TARGETS_DIR(), $driver, + SCST_MGMT_IO), O_RDONLY; - if (!$io) { - if ($self->driverExists($driver) != TRUE) { - $errorString = "driverDynamicAttributes(): Driver '$driver' ". - "is not available"; - } else { - $errorString = "driverDynamicAttributes(): Unable to open mgmt ". - "interface for driver '$driver': $!"; - } - return (undef, $errorString); + if (!$io) { + if ($self->driverExists($driver) != TRUE) { + $errorString = "driverDynamicAttributes(): Driver '$driver' ". + "is not available"; + } else { + $errorString = "driverDynamicAttributes(): Unable to open mgmt ". + "interface for driver '$driver': $!"; } + return (undef, $errorString); + } - while (my $in = <$io>) { - if ($in =~ /^The following target driver attributes available\:/) { - (undef, $available) = split(/\:/, $in, 2); - $available =~ s/\.$//; - } + while (my $in = <$io>) { + if ($in =~ /^The following target driver attributes available\:/) { + (undef, $available) = split(/\:/, $in, 2); + $available =~ s/\.$//; } - close $io; + } + close $io; - if ($available) { - foreach my $attribute (split(/\,/, $available)) { - $attribute =~ s/^\s+//; - $attribute =~ s/\s+$//; - $attributes{$attribute} = ''; - } + if ($available) { + foreach my $attribute (split(/\,/, $available)) { + $attribute =~ s/^\s+//; + $attribute =~ s/\s+$//; + $attributes{$attribute} = ''; } } @@ -1045,12 +972,7 @@ sub addDriverDynamicAttribute { if (!defined($driver) || !defined($attribute) || !defined($value)); my ($path, $cmd); - if (new_sysfs_interface()) { - $path = make_path(SCST_ROOT_DIR(), SCST_MGMT_IO); - $cmd = "in " . make_path(IN_SCST_TARGETS, $driver) . " "; - } else { - $path = make_path(SCST_TARGETS_DIR(), $driver, SCST_MGMT_IO); - } + $path = make_path(SCST_TARGETS_DIR(), $driver, SCST_MGMT_IO); $cmd .= "add_attribute $attribute $value"; my $bytes = - ENOENT; @@ -1088,12 +1010,7 @@ sub removeDriverDynamicAttribute { if (!defined($driver) || !defined($attribute) || !defined($value)); my ($path, $cmd); - if (new_sysfs_interface()) { - $path = make_path(SCST_ROOT_DIR(), SCST_MGMT_IO); - $cmd = "in " . make_path(IN_SCST_TARGETS, $driver) . " "; - } else { - $path = make_path(SCST_TARGETS_DIR(), $driver, SCST_MGMT_IO); - } + $path = make_path(SCST_TARGETS_DIR(), $driver, SCST_MGMT_IO); $cmd .= "del_attribute $attribute $value"; my $bytes = - ENOENT; @@ -1134,21 +1051,8 @@ sub targetExists { sub driverIsVirtualCapable { my $self = shift; my $driver = shift; - - if (new_sysfs_interface()) { - my $path = make_path(SCST_TARGETS_DIR(), $driver, SCST_ADD_TGT); - my $io = new IO::File $path, O_RDONLY; - if ($io) { - my $line = <$io>; - close $io; - chomp($line); - return $line eq '1'; - } - return FALSE; - } else { - my $path = make_path(SCST_TARGETS_DIR(), $driver, SCST_MGMT_IO); - return (-w $path) ? TRUE : FALSE; - } + my $path = make_path(SCST_TARGETS_DIR(), $driver, SCST_MGMT_IO); + return (-w $path) ? TRUE : FALSE; } sub targetType { @@ -1195,12 +1099,7 @@ sub addVirtualTarget { $o_string =~ s/\s$//; my ($path, $cmd); - if (new_sysfs_interface()) { - $path = make_path(SCST_ROOT_DIR(), SCST_MGMT_IO); - $cmd = "in " . make_path(IN_SCST_TARGETS, $driver) . " "; - } else { - $path = make_path(SCST_TARGETS_DIR(), $driver, SCST_MGMT_IO); - } + $path = make_path(SCST_TARGETS_DIR(), $driver, SCST_MGMT_IO); $cmd .= "add_target $target $o_string"; my $bytes = - ENOENT; @@ -1241,45 +1140,33 @@ sub targetDynamicAttributes { return (undef, "Too few arguments") if (!defined($driver)); - if (new_sysfs_interface()) { - my $io = new IO::File make_path(SCST_TARGETS_DIR(), $driver, - SCST_TGT_ATTR), O_RDONLY; - if ($io) { - while (my $attribute = <$io>) { - chomp($attribute); - $attributes{$attribute} = ''; - } - close $io; - } - } else { - my $io = new IO::File make_path(SCST_TARGETS_DIR(), $driver, - SCST_MGMT_IO), O_RDONLY; + my $io = new IO::File make_path(SCST_TARGETS_DIR(), $driver, + SCST_MGMT_IO), O_RDONLY; - if (!$io) { - if ($self->driverExists($driver) != TRUE) { - $errorString = "targetDynamicAttributes(): Driver '$driver' ". - "is not available"; - } else { - $errorString = "targetDynamicAttributes(): Unable to open mgmt ". - "interface for driver '$driver': $!"; - } - return (undef, $errorString); + if (!$io) { + if ($self->driverExists($driver) != TRUE) { + $errorString = "targetDynamicAttributes(): Driver '$driver' ". + "is not available"; + } else { + $errorString = "targetDynamicAttributes(): Unable to open mgmt ". + "interface for driver '$driver': $!"; } + return (undef, $errorString); + } - while (my $in = <$io>) { - if ($in =~ /^The following target attributes available\:/) { - (undef, $available) = split(/\:/, $in, 2); - $available =~ s/\.$//; - } + while (my $in = <$io>) { + if ($in =~ /^The following target attributes available\:/) { + (undef, $available) = split(/\:/, $in, 2); + $available =~ s/\.$//; } - close $io; + } + close $io; - if ($available) { - foreach my $attribute (split(/\,/, $available)) { - $attribute =~ s/^\s+//; - $attribute =~ s/\s+$//; - $attributes{$attribute} = ''; - } + if ($available) { + foreach my $attribute (split(/\,/, $available)) { + $attribute =~ s/^\s+//; + $attribute =~ s/\s+$//; + $attributes{$attribute} = ''; } } @@ -1330,12 +1217,7 @@ sub addTargetDynamicAttribute { !defined($attribute) || !defined($value)); my ($path, $cmd); - if (new_sysfs_interface()) { - $path = make_path(SCST_ROOT_DIR(), SCST_MGMT_IO); - $cmd = "in " . make_path(IN_SCST_TARGETS, $driver) . " "; - } else { - $path = make_path(SCST_TARGETS_DIR(), $driver, SCST_MGMT_IO); - } + $path = make_path(SCST_TARGETS_DIR(), $driver, SCST_MGMT_IO); $cmd .= "add_target_attribute $target $attribute $value"; my $bytes = - ENOENT; @@ -1379,12 +1261,7 @@ sub removeTargetDynamicAttribute { !defined($attribute) || !defined($value)); my ($path, $cmd); - if (new_sysfs_interface()) { - $path = make_path(SCST_ROOT_DIR(), SCST_MGMT_IO); - $cmd = "in " . make_path(IN_SCST_TARGETS, $driver) . " "; - } else { - $path = make_path(SCST_TARGETS_DIR(), $driver, SCST_MGMT_IO); - } + $path = make_path(SCST_TARGETS_DIR(), $driver, SCST_MGMT_IO); $cmd .= "del_target_attribute $target $attribute $value"; my $bytes = - ENOENT; @@ -1456,12 +1333,7 @@ sub removeVirtualTarget { } my ($path, $cmd); - if (new_sysfs_interface()) { - $path = make_path(SCST_ROOT_DIR(), SCST_MGMT_IO); - $cmd = "in " . make_path(IN_SCST_TARGETS, $driver) . " "; - } else { - $path = make_path(SCST_TARGETS_DIR(), $driver, SCST_MGMT_IO); - } + $path = make_path(SCST_TARGETS_DIR(), $driver, SCST_MGMT_IO); $cmd .= "del_target $target"; my $bytes = - ENOENT; @@ -1587,14 +1459,8 @@ sub addGroup { !defined($group)); my ($path, $cmd); - if (new_sysfs_interface()) { - $path = make_path(SCST_ROOT_DIR(), SCST_MGMT_IO); - $cmd = "in " . make_path(IN_SCST_TARGETS, $driver, $target, - SCST_GROUPS) . " "; - } else { - $path = make_path(SCST_TARGETS_DIR(), $driver, $target, - SCST_GROUPS, SCST_MGMT_IO); - } + $path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS, + SCST_MGMT_IO); $cmd .= "create $group"; my $bytes = - ENOENT; @@ -1634,14 +1500,8 @@ sub removeGroup { !defined($group)); my ($path, $cmd); - if (new_sysfs_interface()) { - $path = make_path(SCST_ROOT_DIR(), SCST_MGMT_IO); - $cmd = "in " . make_path(IN_SCST_TARGETS, $driver, $target, - SCST_GROUPS) . " "; - } else { - $path = make_path(SCST_TARGETS_DIR(), $driver, $target, - SCST_GROUPS, SCST_MGMT_IO); - } + $path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS, + SCST_MGMT_IO); $cmd .= "del $group"; my $bytes = - ENOENT; @@ -1678,12 +1538,7 @@ sub addDeviceGroup { return SCST_C_DEV_GRP_ADD_FAIL if (!defined($group)); my ($path, $cmd); - if (new_sysfs_interface()) { - $path = make_path(SCST_ROOT_DIR(), SCST_MGMT_IO); - $cmd = "in " . make_path(IN_SCST_DEV_GROUPS) . " "; - } else { - $path = make_path(SCST_DEV_GROUP_DIR(), SCST_MGMT_IO); - } + $path = make_path(SCST_DEV_GROUP_DIR(), SCST_MGMT_IO); $cmd .= "create $group"; my $bytes = - ENOENT; @@ -1710,12 +1565,7 @@ sub removeDeviceGroup { return SCST_C_DEV_GRP_REM_FAIL if (!defined($group)); my ($path, $cmd); - if (new_sysfs_interface()) { - $path = make_path(SCST_ROOT_DIR(), SCST_MGMT_IO); - $cmd = "in " . make_path(IN_SCST_DEV_GROUPS) . " "; - } else { - $path = make_path(SCST_DEV_GROUP_DIR(), SCST_MGMT_IO); - } + $path = make_path(SCST_DEV_GROUP_DIR(), SCST_MGMT_IO); $cmd .= "del $group"; my $bytes = - ENOENT; @@ -1747,13 +1597,8 @@ sub addDeviceGroupDevice { return SCST_C_DGRP_ADD_DEV_FAIL if (!defined($group) || !defined($device)); my ($path, $cmd); - if (new_sysfs_interface()) { - $path = make_path(SCST_ROOT_DIR(), SCST_MGMT_IO); - $cmd = "in " . make_path(IN_SCST_DEV_GROUPS, $group, - SCST_DG_DEVICES) . " "; - } else { - $path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_DEVICES, SCST_MGMT_IO); - } + $path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_DEVICES, + SCST_MGMT_IO); $cmd .= "add $device"; my $bytes = - ENOENT; @@ -1803,13 +1648,8 @@ sub addTargetGroup { !defined($tgroup)); my ($path, $cmd); - if (new_sysfs_interface()) { - $path = make_path(SCST_ROOT_DIR(), SCST_MGMT_IO); - $cmd = "in " . make_path(IN_SCST_DEV_GROUPS, $group, - SCST_DG_TGROUPS) . " "; - } else { - $path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS, SCST_MGMT_IO); - } + $path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS, + SCST_MGMT_IO); $cmd .= "add $tgroup"; my $bytes = - ENONENT; @@ -1844,14 +1684,8 @@ sub addTargetGroupTarget { !defined($tgt)); my ($path, $cmd); - if (new_sysfs_interface()) { - $path = make_path(SCST_ROOT_DIR(), SCST_MGMT_IO); - $cmd = "in " . make_path(IN_SCST_DEV_GROUPS, $group, - SCST_DG_TGROUPS, $tgroup) . " "; - } else { - $path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS, - $tgroup, SCST_MGMT_IO); - } + $path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS, + $tgroup, SCST_MGMT_IO); $cmd .= "add $tgt"; my $bytes = - ENOENT; @@ -1886,13 +1720,8 @@ sub removeDeviceGroupDevice { return SCST_C_DGRP_REM_DEV_FAIL if (!defined($group) || !defined($device)); my ($path, $cmd); - if (new_sysfs_interface()) { - $path = make_path(SCST_ROOT_DIR(), SCST_MGMT_IO); - $cmd = "in " . make_path(IN_SCST_DEV_GROUPS, $group, - SCST_DG_DEVICES) . " "; - } else { - $path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_DEVICES, SCST_MGMT_IO); - } + $path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_DEVICES, + SCST_MGMT_IO); $cmd .= "del $device"; my $bytes = - ENOENT; @@ -1930,13 +1759,8 @@ sub removeTargetGroup { return SCST_C_DGRP_REM_GRP_FAIL if (!defined($group) || !defined($tgroup)); my ($path, $cmd); - if (new_sysfs_interface()) { - $path = make_path(SCST_ROOT_DIR(), SCST_MGMT_IO); - $cmd = "in " . make_path(IN_SCST_DEV_GROUPS, $group, - SCST_DG_TGROUPS) . " "; - } else { - $path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS, SCST_MGMT_IO); - } + $path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS, + SCST_MGMT_IO); $cmd .= "del $tgroup"; my $bytes = - ENOENT; @@ -1971,14 +1795,8 @@ sub removeTargetGroupTarget { return SCST_C_TGRP_REM_TGT_FAIL if (!defined($group) || !defined($tgroup) || !defined($tgt)); my ($path, $cmd); - if (new_sysfs_interface()) { - $path = make_path(SCST_ROOT_DIR(), SCST_MGMT_IO); - $cmd = "in " . make_path(IN_SCST_DEV_GROUPS, $group, - SCST_DG_TGROUPS, $tgroup) . " "; - } else { - $path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS, - $tgroup, SCST_MGMT_IO); - } + $path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS, + $tgroup, SCST_MGMT_IO); $cmd .= "del $tgt"; my $bytes = - ENOENT; @@ -2020,16 +1838,8 @@ sub addInitiator { !defined($group) || !defined($initiator)); my ($path, $cmd); - if (new_sysfs_interface()) { - $path = make_path(SCST_ROOT_DIR(), SCST_MGMT_IO); - $cmd = "in " . make_path(IN_SCST_TARGETS, $driver, $target, - SCST_GROUPS, $group, SCST_INITIATORS) . - " "; - } else { - $path = make_path(SCST_TARGETS_DIR(), $driver, $target, - SCST_GROUPS, $group, SCST_INITIATORS, - SCST_MGMT_IO); - } + $path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS, + $group, SCST_INITIATORS, SCST_MGMT_IO); $cmd .= "add $initiator"; my $bytes = - ENOENT; @@ -2077,16 +1887,8 @@ sub removeInitiator { return SCST_C_GRP_REM_INI_FAIL if (!defined($driver) || !defined($target) || !defined($group) || !defined($initiator)); my ($path, $cmd); - if (new_sysfs_interface()) { - $path = make_path(SCST_ROOT_DIR(), SCST_MGMT_IO); - $cmd = "in " . make_path(IN_SCST_TARGETS, $driver, $target, - SCST_GROUPS, $group, SCST_INITIATORS) . - " "; - } else { - $path = make_path(SCST_TARGETS_DIR(), $driver, $target, - SCST_GROUPS, $group, SCST_INITIATORS, - SCST_MGMT_IO); - } + $path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS, + $group, SCST_INITIATORS, SCST_MGMT_IO); $cmd .= "del $initiator"; my $bytes = - ENOENT; @@ -2129,16 +1931,8 @@ sub moveInitiator { my $initiator = shift; my ($path, $cmd); - if (new_sysfs_interface()) { - $path = make_path(SCST_ROOT_DIR(), SCST_MGMT_IO); - $cmd = "in " . make_path(IN_SCST_TARGETS, $driver, $target, - SCST_GROUPS, $from, SCST_INITIATORS) . - " "; - } else { - $path = make_path(SCST_TARGETS_DIR(), $driver, $target, - SCST_GROUPS, $from, SCST_INITIATORS, - SCST_MGMT_IO); - } + $path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS, + $from, SCST_INITIATORS, SCST_MGMT_IO); $cmd .= "move $initiator $to"; my $bytes = - ENOENT; @@ -2187,16 +1981,8 @@ sub clearInitiators { my $group = shift; my ($path, $cmd); - if (new_sysfs_interface()) { - $path = make_path(SCST_ROOT_DIR(), SCST_MGMT_IO); - $cmd = "in " . make_path(IN_SCST_TARGETS, $driver, $target, - SCST_GROUPS, $group, SCST_INITIATORS) . - " "; - } else { - $path = make_path(SCST_TARGETS_DIR(), $driver, $target, - SCST_GROUPS, $group, SCST_INITIATORS, - SCST_MGMT_IO); - } + $path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS, + $group, SCST_INITIATORS, SCST_MGMT_IO); $cmd .= "clear"; my $bytes = - ENOENT; @@ -2251,25 +2037,12 @@ sub addLun { $o_string =~ s/\s$//; my ($path, $cmd); - if (new_sysfs_interface()) { - $path = make_path(SCST_ROOT_DIR(), SCST_MGMT_IO); - if (defined($group)) { - $cmd = "in " . - make_path(IN_SCST_TARGETS, $driver, $target, - SCST_GROUPS, $group, SCST_LUNS) . " "; - } else { - $cmd = "in " . make_path(IN_SCST_TARGETS, $driver, - $target, SCST_LUNS) . " "; - } + if (defined($group)) { + $path = make_path(SCST_TARGETS_DIR(), $driver, $target, + SCST_GROUPS, $group, SCST_LUNS, SCST_MGMT_IO); } else { - if (defined($group)) { - $path = make_path(SCST_TARGETS_DIR(), $driver, $target, - SCST_GROUPS, $group, SCST_LUNS, - SCST_MGMT_IO); - } else { - $path = make_path(SCST_TARGETS_DIR(), $driver, $target, - SCST_LUNS, SCST_MGMT_IO); - } + $path = make_path(SCST_TARGETS_DIR(), $driver, $target, + SCST_LUNS, SCST_MGMT_IO); } $cmd .= "add $device $lun $o_string"; @@ -2330,25 +2103,13 @@ sub removeLun { !defined($lun)); my ($path, $cmd); - if (new_sysfs_interface()) { - $path = make_path(SCST_ROOT_DIR(), SCST_MGMT_IO); - if (defined($group)) { - $cmd = "in " . make_path(IN_SCST_TARGETS, $driver, - $target, SCST_GROUPS, $group, - SCST_LUNS) . " "; - } else { - $cmd = "in " . make_path(IN_SCST_TARGETS, $driver, - $target, SCST_LUNS) . " "; - } + if (defined($group)) { + $path = make_path(SCST_TARGETS_DIR(), $driver, $target, + SCST_GROUPS, $group, SCST_LUNS, + SCST_MGMT_IO); } else { - if (defined($group)) { - $path = make_path(SCST_TARGETS_DIR(), $driver, $target, - SCST_GROUPS, $group, SCST_LUNS, - SCST_MGMT_IO); - } else { - $path = make_path(SCST_TARGETS_DIR(), $driver, $target, - SCST_LUNS, SCST_MGMT_IO); - } + $path = make_path(SCST_TARGETS_DIR(), $driver, $target, + SCST_LUNS, SCST_MGMT_IO); } $cmd .= "del $lun"; @@ -2442,26 +2203,8 @@ sub replaceLun { $o_string =~ s/\s$//; my ($path, $cmd); - if (new_sysfs_interface()) { - $path = make_path(SCST_ROOT_DIR(), SCST_MGMT_IO); - if (defined($group)) { - $cmd = "in " . make_path(IN_SCST_TARGETS, $driver, - $target, SCST_GROUPS, - $group, SCST_LUNS) . " "; - } else { - $cmd = "in " . make_path(IN_SCST_TARGETS, $driver, - $target, SCST_LUNS) . " "; - } - } else { - if (defined($group)) { - $path = make_path(SCST_TARGETS_DIR(), $driver, $target, - SCST_GROUPS, $group, SCST_LUNS, - SCST_MGMT_IO); - } else { - $path = make_path(SCST_TARGETS_DIR(), $driver, $target, - SCST_LUNS, SCST_MGMT_IO); - } - } + $path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_LUNS, + SCST_MGMT_IO); $cmd .= "replace $device $lun $o_string"; my $bytes = - ENOENT; @@ -2491,25 +2234,13 @@ sub clearLuns { return $err if (!defined($driver) || !defined($target)); my ($path, $cmd); - if (new_sysfs_interface()) { - $path = make_path(SCST_ROOT_DIR(), SCST_MGMT_IO); - if (defined($group)) { - $cmd = "in " . - make_path(IN_SCST_TARGETS, $driver, $target, - SCST_GROUPS, $group, SCST_LUNS) . " "; - } else { - $cmd = "in " . make_path(IN_SCST_TARGETS, $driver, - $target, SCST_LUNS) . " "; - } + if (defined($group)) { + $path = make_path(SCST_TARGETS_DIR(), $driver, $target, + SCST_GROUPS, $group, SCST_LUNS, + SCST_MGMT_IO); } else { - if (defined($group)) { - $path = make_path(SCST_TARGETS_DIR(), $driver, $target, - SCST_GROUPS, $group, SCST_LUNS, - SCST_MGMT_IO); - } else { - $path = make_path(SCST_TARGETS_DIR(), $driver, $target, - SCST_LUNS, SCST_MGMT_IO); - } + $path = make_path(SCST_TARGETS_DIR(), $driver, $target, + SCST_LUNS, SCST_MGMT_IO); } $cmd .= "clear"; @@ -2547,7 +2278,7 @@ sub deviceHandler { my $device = shift; my $handler = readlink(make_path(SCST_DEVICES_DIR(), $device, - new_sysfs_interface() ? 'driver' : 'handler')); + 'handler')); $handler =~ s/.*\///; return $handler; } @@ -2558,8 +2289,8 @@ sub devices { my @devices; my $dHandle = new IO::Handle; - my $_path = new_sysfs_interface() || !defined($handler) ? - SCST_DEVICES_DIR() : make_path(SCST_HANDLERS_DIR(), $handler); + my $_path = !defined($handler) ? SCST_DEVICES_DIR() : + make_path(SCST_HANDLERS_DIR(), $handler); if (!(opendir $dHandle, $_path)) { return (undef, "devices(): Unable to read directory '$_path': $!"); } @@ -2567,8 +2298,7 @@ sub devices { foreach my $device (readdir($dHandle)) { next if ($device eq '.' || $device eq '..'); - my $isdev = (new_sysfs_interface() || - -d make_path(SCST_DEVICES_DIR(), $device)); + my $isdev = (-d make_path(SCST_DEVICES_DIR(), $device)); if ($isdev && (!defined($handler) || $handler eq $self->deviceHandler($device))) { push @devices, $device; @@ -2699,9 +2429,7 @@ sub deviceAttributes { $value = "" if (!defined($value)); chomp $value; - $is_key = new_sysfs_interface() && - (!$is_static || defined($$dca{$attribute})) - || $is_key && $is_key =~ /\[key\]/; + $is_key = $is_key && $is_key =~ /\[key\]/; my $key = 0; if ($is_key) { @@ -2785,8 +2513,7 @@ sub driverAttributes { chomp $value; my $is_key = <$io>; - $is_key = new_sysfs_interface() && !$is_static || - $is_key && $is_key =~ /\[key\]/; + $is_key = $is_key && $is_key =~ /\[key\]/; my $key = 0; if ($is_key) { @@ -2943,8 +2670,7 @@ sub targetAttributes { my $is_key = <$io>; close $io; - $is_key = new_sysfs_interface() && !$is_static || - $is_key && $is_key =~ /\[key\]/; + $is_key = $is_key && $is_key =~ /\[key\]/; my $key = 0; if ($is_key) { @@ -2982,18 +2708,8 @@ sub setTargetAttribute { return TRUE if (!defined($attribute) || !defined($value)); my ($path, $cmd); - if (new_sysfs_interface() && - ($attribute eq 'enabled' || $attribute eq 'cpu_mask')) { - $path = make_path(SCST_ROOT_DIR, SCST_MGMT_IO); - $cmd = "in " . make_path(IN_SCST_TARGETS, $driver, $target) . - " " . ($attribute eq 'enabled' ? - ($value eq '1' ? 'enable' : 'disable') : - "set_$attribute $value"); - } else { - $path = make_path(SCST_TARGETS_DIR(), $driver, $target, - $attribute); - $cmd = $value; - } + $path = make_path(SCST_TARGETS_DIR(), $driver, $target, $attribute); + $cmd = $value; my $bytes = - ENOENT; my $io = new IO::File $path, O_WRONLY; @@ -3078,8 +2794,7 @@ sub groupAttributes { my $is_key = <$io>; close $io; - $is_key = new_sysfs_interface() && !$is_static || - $is_key && $is_key =~ /\[key\]/; + $is_key = $is_key && $is_key =~ /\[key\]/; my $key = 0; if ($is_key) { @@ -3118,15 +2833,8 @@ sub setGroupAttribute { return TRUE if (!defined($attribute) || !defined($value)); my ($path, $cmd); - if (new_sysfs_interface() && $attribute eq 'cpu_mask') { - $path = make_path(SCST_ROOT_DIR(), SCST_MGMT_IO); - $cmd = "in " . make_path(IN_SCST_TARGETS, $driver, $target, - SCST_GROUPS, $group) . - " set_$attribute "; - } else { - $path = make_path(SCST_TARGETS_DIR(), $driver, $target, - SCST_GROUPS, $group, $attribute); - } + $path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS, + $group, $attribute); $cmd .= $value; my $bytes = - ENOENT; @@ -3234,10 +2942,7 @@ sub lunAttributes { my $is_key = <$io>; close $io; - $is_key = new_sysfs_interface() && - (!$is_static || - defined($$luncrattr{$attribute})) || - $is_key && $is_key =~ /\[key\]/; + $is_key = $is_key && $is_key =~ /\[key\]/; my $key = 0; if ($is_key) { @@ -3389,8 +3094,7 @@ sub initiatorAttributes { my $is_key = <$io>; close $io; - $is_key = new_sysfs_interface() && !$is_static || - $is_key && $is_key =~ /\[key\]/; + $is_key = $is_key && $is_key =~ /\[key\]/; my $key = 0; if ($is_key) { @@ -3512,8 +3216,7 @@ sub deviceGroupAttributes { my $is_key = <$io>; close $io; - $is_key = new_sysfs_interface() && !$is_static || - $is_key && $is_key =~ /\[key\]/; + $is_key = $is_key && $is_key =~ /\[key\]/; my $key = 0; if ($is_key) { @@ -3593,8 +3296,7 @@ sub targetGroupAttributes { my $is_key = <$io>; close $io; - $is_key = new_sysfs_interface() && !$is_static || - $is_key && $is_key =~ /\[key\]/; + $is_key = $is_key && $is_key =~ /\[key\]/; my $key = 0; if ($is_key) { @@ -3683,8 +3385,7 @@ sub targetGroupTargetAttributes { my $is_key = <$io>; close $io; - $is_key = new_sysfs_interface() && !$is_static || - $is_key && $is_key =~ /\[key\]/; + $is_key = $is_key && $is_key =~ /\[key\]/; my $key = 0; if ($is_key) { @@ -3962,8 +3663,7 @@ sub handlerAttributes { chomp $value; my $is_key = <$io>; - $is_key = new_sysfs_interface() && !$is_static || - $is_key && $is_key =~ /\[key\]/; + $is_key = $is_key && $is_key =~ /\[key\]/; my $key = 0; if ($is_key) { @@ -4121,45 +3821,34 @@ sub deviceCreateAttributes { my %attributes = ( ); my $errorString; - if (new_sysfs_interface()) { - my $io = new IO::File make_path(SCST_HANDLERS_DIR(), $handler, - SCST_ADD_DEV_PARAMS), O_RDONLY; + my $io = new IO::File make_path(SCST_HANDLERS_DIR(), $handler, + SCST_MGMT_IO), O_RDONLY; - while (my $attribute = <$io>) { - chomp($attribute); + if (!$io) { + if ($self->handlerExists($handler) != TRUE) { + $errorString = "deviceCreateAttributes(): Handler '$handler' ". + "is not available"; + } else { + $errorString = "deviceCreateAttributes(): Unable to open mgmt ". + "interface for handler '$handler': $!"; + } + return (undef, $errorString); + } + + while (my $in = <$io>) { + if ($in =~ /^The following parameters available\:/) { + (undef, $available) = split(/\:/, $in, 2); + $available =~ s/\.$//; + } + } + close $io; + + if ($available) { + foreach my $attribute (split(/\,/, $available)) { + $attribute =~ s/^\s+//; + $attribute =~ s/\s+$//; $attributes{$attribute} = ''; } - close $io; - } else { - my $io = new IO::File make_path(SCST_HANDLERS_DIR(), $handler, - SCST_MGMT_IO), O_RDONLY; - - if (!$io) { - if ($self->handlerExists($handler) != TRUE) { - $errorString = "deviceCreateAttributes(): Handler '$handler' ". - "is not available"; - } else { - $errorString = "deviceCreateAttributes(): Unable to open mgmt ". - "interface for handler '$handler': $!"; - } - return (undef, $errorString); - } - - while (my $in = <$io>) { - if ($in =~ /^The following parameters available\:/) { - (undef, $available) = split(/\:/, $in, 2); - $available =~ s/\.$//; - } - } - close $io; - - if ($available) { - foreach my $attribute (split(/\,/, $available)) { - $attribute =~ s/^\s+//; - $attribute =~ s/\s+$//; - $attributes{$attribute} = ''; - } - } } return (\%attributes, undef); @@ -4184,12 +3873,7 @@ sub openDevice { $o_string =~ s/\s$//; my ($path, $cmd); - if (new_sysfs_interface()) { - $path = make_path(SCST_ROOT_DIR(), SCST_MGMT_IO); - $cmd = "in " . make_path(IN_SCST_HANDLERS, $handler) . " "; - } else { - $path = make_path(SCST_HANDLERS_DIR(), $handler, SCST_MGMT_IO); - } + $path = make_path(SCST_HANDLERS_DIR(), $handler, SCST_MGMT_IO); $cmd .= "add_device $device $o_string"; my $bytes = - ENOENT; @@ -4232,12 +3916,7 @@ sub closeDevice { !defined($device)); my ($path, $cmd); - if (new_sysfs_interface()) { - $path = make_path(SCST_ROOT_DIR(), SCST_MGMT_IO); - $cmd = "in " . make_path(IN_SCST_HANDLERS, $handler) . " "; - } else { - $path = make_path(SCST_HANDLERS_DIR(), $handler, SCST_MGMT_IO); - } + $path = make_path(SCST_HANDLERS_DIR(), $handler, SCST_MGMT_IO); $cmd .= "del_device $device"; my $bytes = - ENOENT; @@ -4272,15 +3951,7 @@ sub setDeviceAttribute { my $value = shift; my ($path, $cmd); - if (new_sysfs_interface() && - ($attribute eq 'filename' || - $attribute eq 'threads_num' || - $attribute eq 'threads_pool_type')) { - $path = make_path(SCST_ROOT_DIR(), SCST_MGMT_IO); - $cmd = "in " . make_path(IN_SCST_DEVICES, $device) . " set_$attribute "; - } else { - $path = make_path(SCST_DEVICES_DIR(), $device, $attribute); - } + $path = make_path(SCST_DEVICES_DIR(), $device, $attribute); $cmd .= $value; my $bytes = - ENOENT; @@ -4341,44 +4012,34 @@ sub targetCreateAttributes { my %attributes = ( ); my $errorString; - if (new_sysfs_interface()) { - my $io = new IO::File make_path(SCST_TARGETS_DIR(), $driver, - SCST_ADD_TGT_PARAMS), O_RDONLY; - while (my $attribute = <$io>) { - chomp($attribute); + my $io = new IO::File make_path(SCST_TARGETS_DIR(), $driver, + SCST_MGMT_IO), O_RDONLY; + + if (!$io) { + if ($self->driverExists($driver) != TRUE) { + $errorString = "targetCreateAttributes(): Driver '$driver' ". + "is not available"; + } else { + $errorString = "targetCreateAttributes(): Unable to open driver mgmt ". + "interface for driver '$driver': $!"; + } + return (undef, $errorString); + } + + while (my $in = <$io>) { + if ($in =~ /^The following parameters available\:/) { + (undef, $available) = split(/\:/, $in, 2); + $available =~ s/\.$//; + } + } + close $io; + + if ($available) { + foreach my $attribute (split(/\,/, $available)) { + $attribute =~ s/^\s+//; + $attribute =~ s/\s+$//; $attributes{$attribute} = ''; } - close $io; - } else { - my $io = new IO::File make_path(SCST_TARGETS_DIR(), $driver, - SCST_MGMT_IO), O_RDONLY; - - if (!$io) { - if ($self->driverExists($driver) != TRUE) { - $errorString = "targetCreateAttributes(): Driver '$driver' ". - "is not available"; - } else { - $errorString = "targetCreateAttributes(): Unable to open driver mgmt ". - "interface for driver '$driver': $!"; - } - return (undef, $errorString); - } - - while (my $in = <$io>) { - if ($in =~ /^The following parameters available\:/) { - (undef, $available) = split(/\:/, $in, 2); - $available =~ s/\.$//; - } - } - close $io; - - if ($available) { - foreach my $attribute (split(/\,/, $available)) { - $attribute =~ s/^\s+//; - $attribute =~ s/\s+$//; - $attributes{$attribute} = ''; - } - } } return (\%attributes, undef); @@ -4535,70 +4196,47 @@ sub lunCreateAttributes { my $_path; - if (new_sysfs_interface()) { - if (defined($group)) { - if ($self->groupExists($driver, $target, $group) != TRUE) { - return ("lunCreateAttributes(): Group '$group' ". - "does not exist"); - } - - $_path = make_path(SCST_TARGETS_DIR(), $driver, $target, - SCST_GROUPS, $group, SCST_LUNS, - SCST_PARAM_ATTR); - } else { - $_path = make_path(SCST_TARGETS_DIR(), $driver, $target, - SCST_LUNS, SCST_PARAM_ATTR); - } - - my $io = new IO::File $_path, O_RDONLY; - while (my $attribute = <$io>) { - chomp($attribute); - $attributes{$attribute} = ''; - } - close $io; + if (defined($group)) { + $_path = make_path(SCST_TARGETS_DIR(), $driver, $target, + SCST_GROUPS, $group, SCST_LUNS, + SCST_MGMT_IO); } else { - if (defined($group)) { - $_path = make_path(SCST_TARGETS_DIR(), $driver, $target, - SCST_GROUPS, $group, SCST_LUNS, - SCST_MGMT_IO); + $_path = make_path(SCST_TARGETS_DIR(), $driver, $target, + SCST_LUNS, SCST_MGMT_IO); + } + + my $io = new IO::File $_path, O_RDONLY; + + if (!$io) { + if ($self->driverExists($driver) != TRUE) { + $errorString = "lunCreateAttributes(): Driver '$driver' ". + "is not available"; + } elsif ($self->targetExists($driver, $target) != TRUE) { + $errorString = "lunCreateAttributes(): Target '$target' ". + "is not available"; + } elsif (defined($group) && $self->groupExists($driver, $target, $group) != TRUE) { + $errorString = "lunCreateAttributes(): Group '$group' ". + "does not exist"; } else { - $_path = make_path(SCST_TARGETS_DIR(), $driver, $target, - SCST_LUNS, SCST_MGMT_IO); + $errorString = "lunCreateAttributes(): Unable to open luns mgmt ". + "interface for group '$group': $!"; } + return (undef, $errorString); + } - my $io = new IO::File $_path, O_RDONLY; - - if (!$io) { - if ($self->driverExists($driver) != TRUE) { - $errorString = "lunCreateAttributes(): Driver '$driver' ". - "is not available"; - } elsif ($self->targetExists($driver, $target) != TRUE) { - $errorString = "lunCreateAttributes(): Target '$target' ". - "is not available"; - } elsif (defined($group) && $self->groupExists($driver, $target, $group) != TRUE) { - $errorString = "lunCreateAttributes(): Group '$group' ". - "does not exist"; - } else { - $errorString = "lunCreateAttributes(): Unable to open luns mgmt ". - "interface for group '$group': $!"; - } - return (undef, $errorString); + while (my $in = <$io>) { + if ($in =~ /^The following parameters available\:/) { + (undef, $available) = split(/\:/, $in, 2); + $available =~ s/\.$//; } + } + close $io; - while (my $in = <$io>) { - if ($in =~ /^The following parameters available\:/) { - (undef, $available) = split(/\:/, $in, 2); - $available =~ s/\.$//; - } - } - close $io; - - if ($available) { - foreach my $attribute (split(/\,/, $available)) { - $attribute =~ s/^\s+//; - $attribute =~ s/\s+$//; - $attributes{$attribute} = ''; - } + if ($available) { + foreach my $attribute (split(/\,/, $available)) { + $attribute =~ s/^\s+//; + $attribute =~ s/\s+$//; + $attributes{$attribute} = ''; } } return (\%attributes, undef); @@ -4655,45 +4293,41 @@ sub initiatorCreateAttributes { my %attributes = ( ); my $errorString; - if (new_sysfs_interface()) { - # Do nothing - there are no initiator attributes (yet). - } else { - my $io = new IO::File make_path(SCST_TARGETS_DIR(), $driver, - $target, SCST_GROUPS, $group, - SCST_INITIATORS, SCST_MGMT_IO), - O_RDONLY; + my $io = new IO::File make_path(SCST_TARGETS_DIR(), $driver, + $target, SCST_GROUPS, $group, + SCST_INITIATORS, SCST_MGMT_IO), + O_RDONLY; - if (!$io) { - if ($self->driverExists($driver) != TRUE) { - $errorString = "initiatorCreateAttributes(): Driver '$driver' ". - "is not available"; - } elsif ($self->targetExists($driver, $target) != TRUE) { - $errorString = "initiatorCreateAttributes(): Target '$target' ". - "is not available"; - } elsif ($self->groupExists($driver, $target, $group) != TRUE) { - $errorString = "initiatorCreateAttributes(): Group '$group' ". - "does not exist"; - } else { - $errorString = "initiatorCreateAttributes(): Unable to open initiators mgmt ". - "interface for group '$group': $!"; - } - return (undef, $errorString); + if (!$io) { + if ($self->driverExists($driver) != TRUE) { + $errorString = "initiatorCreateAttributes(): Driver '$driver' ". + "is not available"; + } elsif ($self->targetExists($driver, $target) != TRUE) { + $errorString = "initiatorCreateAttributes(): Target '$target' ". + "is not available"; + } elsif ($self->groupExists($driver, $target, $group) != TRUE) { + $errorString = "initiatorCreateAttributes(): Group '$group' ". + "does not exist"; + } else { + $errorString = "initiatorCreateAttributes(): Unable to open initiators mgmt ". + "interface for group '$group': $!"; } + return (undef, $errorString); + } - while (my $in = <$io>) { - if ($in =~ /^The following parameters available\:/) { - (undef, $available) = split(/\:/, $in, 2); - $available =~ s/\.$//; - } + while (my $in = <$io>) { + if ($in =~ /^The following parameters available\:/) { + (undef, $available) = split(/\:/, $in, 2); + $available =~ s/\.$//; } - close $io; + } + close $io; - if ($available) { - foreach my $attribute (split(/\,/, $available)) { - $attribute =~ s/^\s+//; - $attribute =~ s/\s+$//; - $attributes{$attribute} = ''; - } + if ($available) { + foreach my $attribute (split(/\,/, $available)) { + $attribute =~ s/^\s+//; + $attribute =~ s/\s+$//; + $attributes{$attribute} = ''; } } From 8d3c1cf3a25de98a1ee13c7041dbe0a6839cb46d Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Sun, 13 Sep 2020 03:20:47 +0000 Subject: [PATCH 2/2] scstadmin: Use length($var) to test whether an argument has been specified This patch fixes a bug by making it again possible to use "0" as e.g. the name of an SCST device group. See also commit 858f50e4d391 ("scstadmin: Improve robustness"). Reported-by: Pavel Klevtsov git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@9152 d57e44dd-8a1f-0410-8b47-8ef2f437770f --- .../scst-1.0.0/lib/SCST/SCST.pm | 183 +++++++++--------- scstadmin/scstadmin.sysfs/scstadmin | 35 ++-- 2 files changed, 112 insertions(+), 106 deletions(-) diff --git a/scstadmin/scstadmin.sysfs/scst-1.0.0/lib/SCST/SCST.pm b/scstadmin/scstadmin.sysfs/scst-1.0.0/lib/SCST/SCST.pm index 2ac879f0a..703aa61e4 100644 --- a/scstadmin/scstadmin.sysfs/scst-1.0.0/lib/SCST/SCST.pm +++ b/scstadmin/scstadmin.sysfs/scst-1.0.0/lib/SCST/SCST.pm @@ -477,7 +477,7 @@ sub setScstAttribute { my $attribute = shift; my $value = shift; - return TRUE if (!defined($attribute) || !defined($value)); + return TRUE if (!length($attribute) || !length($value)); my $bytes = - ENOENT; my $path = make_path(SCST_ROOT_DIR(), $attribute); @@ -523,7 +523,7 @@ sub targets { my $self = shift; my $driver = shift; - return (undef, "Too few arguments") if (!defined($driver)); + return (undef, "Too few arguments") if (!length($driver)); my $tHandle = new IO::Handle; my $_path = make_path(SCST_TARGETS_DIR(), $driver); @@ -558,7 +558,7 @@ sub groups { my $driver = shift; my $target = shift; - return (undef, "Too few arguments") if (!defined($driver) || !defined($target)); + return (undef, "Too few arguments") if (!length($driver) || !length($target)); my $gHandle = new IO::Handle; my $_path = make_path(SCST_TARGETS_DIR(), $driver, $target, @@ -599,8 +599,8 @@ sub initiators { my @initiators; my $errorString; - return (undef, "Too few arguments") if (!defined($driver) || !defined($target) || - !defined($group)); + return (undef, "Too few arguments") + if (!length($driver) || !length($target) || !length($group)); my $iHandle = new IO::Handle; my $_path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS, @@ -637,11 +637,11 @@ sub luns { my $group = shift; my $errorString; - return (undef, "Too few arguments") if (!defined($driver) || !defined($target)); + return (undef, "Too few arguments") if (!length($driver) || !length($target)); my $_path; - if (defined($group)) { + if (length($group)) { $_path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS, $group, SCST_LUNS); } else { @@ -652,7 +652,7 @@ sub luns { my $lHandle = new IO::Handle; if (!(opendir $lHandle, $_path)) { - if (defined($group) && $self->groupExists($driver, $target, $group) != TRUE) { + if (length($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"; @@ -780,7 +780,7 @@ sub deviceGroupDevices { my @devices; my $errorString; - return (undef, "Too few arguments") if (!defined($group)); + return (undef, "Too few arguments") if (!length($group)); my $dHandle = new IO::Handle; my $_path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_DEVICES); @@ -812,7 +812,7 @@ sub targetGroups { my @tgroups; my $errorString; - return (undef, "Too few arguments") if (!defined($group)); + return (undef, "Too few arguments") if (!length($group)); my $dHandle = new IO::Handle; my $_path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS); @@ -845,7 +845,7 @@ sub targetGroupTargets { my @targets; my $errorString; - return (undef, "Too few arguments") if (!defined($group) || !defined($tgroup)); + return (undef, "Too few arguments") if (!length($group) || !length($tgroup)); my $dHandle = new IO::Handle; my $_path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS, $tgroup); @@ -881,7 +881,7 @@ sub driverExists { my $dHandle = new IO::Handle; my $result; - $result = defined($driver) && + $result = length($driver) && opendir($dHandle, make_path(SCST_TARGETS_DIR(), $driver)); close $dHandle if ($result); @@ -895,7 +895,7 @@ sub driverDynamicAttributes { my $available; my $errorString; - return (undef, "Too few arguments") if (!defined($driver)); + return (undef, "Too few arguments") if (!length($driver)); my $io = new IO::File make_path(SCST_TARGETS_DIR(), $driver, SCST_MGMT_IO), O_RDONLY; @@ -935,6 +935,8 @@ sub checkDriverDynamicAttributes { my $driver = shift; my $check = shift; + return TRUE if (!length($driver)); + my ($available, $errorString) = $self->driverDynamicAttributes($driver); if (!defined($available)) { @@ -969,7 +971,7 @@ sub addDriverDynamicAttribute { my $value = shift; return SCST_C_DRV_ADDATTR_FAIL - if (!defined($driver) || !defined($attribute) || !defined($value)); + if (!length($driver) || !defined($attribute) || !defined($value)); my ($path, $cmd); $path = make_path(SCST_TARGETS_DIR(), $driver, SCST_MGMT_IO); @@ -1007,7 +1009,7 @@ sub removeDriverDynamicAttribute { my $value = shift; return SCST_C_DRV_REMATTR_FAIL - if (!defined($driver) || !defined($attribute) || !defined($value)); + if (!length($driver) || !defined($attribute) || !defined($value)); my ($path, $cmd); $path = make_path(SCST_TARGETS_DIR(), $driver, SCST_MGMT_IO); @@ -1043,7 +1045,7 @@ sub targetExists { my $driver = shift; my $target = shift; - return defined($driver) && defined($target) && + return length($driver) && length($target) && $target ne '.' && $target ne '..' && $target ne 'module' && (-d make_path(SCST_TARGETS_DIR(), $driver, $target)) ? TRUE : FALSE; } @@ -1061,7 +1063,7 @@ sub targetType { my $target = shift; my $errorString; - return (undef, "Too few arguments") if (!defined($driver) || !defined($target)); + return (undef, "Too few arguments") if (!length($driver) || !length($target)); if ($self->driverIsVirtualCapable($driver)) { my $attribs; @@ -1138,7 +1140,7 @@ sub targetDynamicAttributes { my $available; my $errorString; - return (undef, "Too few arguments") if (!defined($driver)); + return (undef, "Too few arguments") if (!length($driver)); my $io = new IO::File make_path(SCST_TARGETS_DIR(), $driver, SCST_MGMT_IO), O_RDONLY; @@ -1213,7 +1215,7 @@ sub addTargetDynamicAttribute { my $value = shift; return SCST_C_TGT_ADDATTR_FAIL - if (!defined($driver) || !defined($target) || + if (!length($driver) || !defined($target) || !defined($attribute) || !defined($value)); my ($path, $cmd); @@ -1455,8 +1457,8 @@ sub addGroup { my $target = shift; my $group = shift; - return SCST_C_GRP_ADD_FAIL if (!defined($driver) || !defined($target) || - !defined($group)); + return SCST_C_GRP_ADD_FAIL if (!length($driver) || !length($target) || + !length($group)); my ($path, $cmd); $path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS, @@ -1496,8 +1498,8 @@ sub removeGroup { my $target = shift; my $group = shift; - return SCST_C_GRP_REM_FAIL if (!defined($driver) || !defined($target) || - !defined($group)); + return SCST_C_GRP_REM_FAIL if (!length($driver) || !length($target) || + !length($group)); my ($path, $cmd); $path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS, @@ -1594,7 +1596,7 @@ sub addDeviceGroupDevice { my $dgroups; my $errorString; - return SCST_C_DGRP_ADD_DEV_FAIL if (!defined($group) || !defined($device)); + return SCST_C_DGRP_ADD_DEV_FAIL if (!length($group) || !length($device)); my ($path, $cmd); $path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_DEVICES, @@ -1644,8 +1646,7 @@ sub addTargetGroup { my $group = shift; my $tgroup = shift; - return SCST_C_DGRP_ADD_GRP_FAIL if (!defined($group) || - !defined($tgroup)); + return SCST_C_DGRP_ADD_GRP_FAIL if (!length($group) || !length($tgroup)); my ($path, $cmd); $path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS, @@ -1679,9 +1680,8 @@ sub addTargetGroupTarget { my $tgroup = shift; my $tgt = shift; - return SCST_C_TGRP_ADD_TGT_FAIL if (!defined($group) || - !defined($tgroup) || - !defined($tgt)); + return SCST_C_TGRP_ADD_TGT_FAIL + if (!length($group) || !length($tgroup) || !length($tgt)); my ($path, $cmd); $path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS, @@ -1717,7 +1717,7 @@ sub removeDeviceGroupDevice { my $group = shift; my $device = shift; - return SCST_C_DGRP_REM_DEV_FAIL if (!defined($group) || !defined($device)); + return SCST_C_DGRP_REM_DEV_FAIL if (!length($group) || !length($device)); my ($path, $cmd); $path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_DEVICES, @@ -1756,7 +1756,7 @@ sub removeTargetGroup { my $group = shift; my $tgroup = shift; - return SCST_C_DGRP_REM_GRP_FAIL if (!defined($group) || !defined($tgroup)); + return SCST_C_DGRP_REM_GRP_FAIL if (!length($group) || !length($tgroup)); my ($path, $cmd); $path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS, @@ -1792,7 +1792,7 @@ sub removeTargetGroupTarget { my $tgroup = shift; my $tgt = shift; - return SCST_C_TGRP_REM_TGT_FAIL if (!defined($group) || !defined($tgroup) || !defined($tgt)); + return SCST_C_TGRP_REM_TGT_FAIL if (!length($group) || !length($tgroup) || !length($tgt)); my ($path, $cmd); $path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS, @@ -1834,8 +1834,8 @@ sub addInitiator { my $initiator = shift; return SCST_C_GRP_ADD_INI_FAIL - if (!defined($driver) || !defined($target) || - !defined($group) || !defined($initiator)); + if (!length($driver) || !length($target) || + !length($group) || !length($initiator)); my ($path, $cmd); $path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS, @@ -1854,9 +1854,9 @@ sub addInitiator { return FALSE if ($self->{'debug'} || $bytes > 0); } - return SCST_C_GRP_REM_INI_FAIL if (!defined($driver) || - !defined($target) || - !defined($initiator)); + return SCST_C_GRP_REM_INI_FAIL if (!length($driver) || + !length($target) || + !length($initiator)); my $rc = $self->driverExists($driver); return SCST_C_DRV_NO_DRIVER if (!$rc); @@ -1884,7 +1884,7 @@ sub removeInitiator { my $group = shift; my $initiator = shift; - return SCST_C_GRP_REM_INI_FAIL if (!defined($driver) || !defined($target) || !defined($group) || !defined($initiator)); + return SCST_C_GRP_REM_INI_FAIL if (!length($driver) || !length($target) || !length($group) || !length($initiator)); my ($path, $cmd); $path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS, @@ -2021,12 +2021,12 @@ sub addLun { my $attributes = shift; my $group = shift; - my $err = defined($group) ? SCST_C_GRP_ADD_LUN_FAIL : + my $err = length($group) ? SCST_C_GRP_ADD_LUN_FAIL : SCST_C_TGT_ADD_LUN_FAIL; - return $err if (!defined($driver) || !defined($target) || - !defined($device) || !defined($lun) || - !defined($attributes)); + return $err if (!length($driver) || !length($target) || + !length($device) || !length($lun) || + !length($attributes)); my $o_string = ""; foreach my $attribute (keys %{$attributes}) { @@ -2037,7 +2037,7 @@ sub addLun { $o_string =~ s/\s$//; my ($path, $cmd); - if (defined($group)) { + if (length($group)) { $path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS, $group, SCST_LUNS, SCST_MGMT_IO); } else { @@ -2059,14 +2059,14 @@ sub addLun { return FALSE if ($self->{'debug'} || $bytes > 0); } - if (defined($group)) { + if (length($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 (defined($group) ? SCST_C_GRP_LUN_EXISTS : + return (length($group) ? SCST_C_GRP_LUN_EXISTS : SCST_C_TGT_LUN_EXISTS) if ($rc == TRUE); return $rc if ($rc > 1); @@ -2096,14 +2096,14 @@ sub removeLun { my $lun = shift; my $group = shift; - my $err = defined($group) ? SCST_C_GRP_REM_LUN_FAIL : + my $err = length($group) ? SCST_C_GRP_REM_LUN_FAIL : SCST_C_TGT_ADD_LUN_FAIL; - return $err if (!defined($driver) || !defined($target) || - !defined($lun)); + return $err if (!length($driver) || !length($target) || + !length($lun)); my ($path, $cmd); - if (defined($group)) { + if (length($group)) { $path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS, $group, SCST_LUNS, SCST_MGMT_IO); @@ -2133,14 +2133,14 @@ sub removeLun { return SCST_C_TGT_NO_TARGET if (!$rc); return $rc if ($rc > 1); - if (defined($group)) { + if (length($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 (defined($group) ? SCST_C_GRP_NO_LUN : SCST_C_TGT_NO_LUN) + return (length($group) ? SCST_C_GRP_NO_LUN : SCST_C_TGT_NO_LUN) if (!$rc); return $rc if ($rc > 1); @@ -2158,7 +2158,7 @@ sub replaceLun { my $err; - return TRUE if (!defined($lun)); + return TRUE if (!length($lun)); my $rc = $self->driverExists($driver); return SCST_C_DRV_NO_DRIVER if (!$rc); @@ -2168,7 +2168,7 @@ sub replaceLun { return SCST_C_TGT_NO_TARGET if (!$rc); return $rc if ($rc > 1); - if (defined($group)) { + if (length($group)) { $rc = $self->groupExists($driver, $target, $group); return SCST_C_GRP_NO_GROUP if (!$rc); return $rc if ($rc > 1); @@ -2228,13 +2228,13 @@ sub clearLuns { my $target = shift; my $group = shift; - my $err = defined($group) ? SCST_C_GRP_CLR_LUN_FAIL : + my $err = length($group) ? SCST_C_GRP_CLR_LUN_FAIL : SCST_C_TGT_CLR_LUN_FAIL; - return $err if (!defined($driver) || !defined($target)); + return $err if (!length($driver) || !length($target)); my ($path, $cmd); - if (defined($group)) { + if (length($group)) { $path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS, $group, SCST_LUNS, SCST_MGMT_IO); @@ -2264,7 +2264,7 @@ sub clearLuns { return SCST_C_TGT_NO_TARGET if (!$rc); return $rc if ($rc > 1); - if (defined($group)) { + if (length($group)) { $rc = $self->groupExists($driver, $target, $group); return SCST_C_GRP_NO_GROUP if (!$rc); return $rc if ($rc > 1); @@ -2277,6 +2277,8 @@ sub deviceHandler { my $self = shift; my $device = shift; + return undef if (!length($device)); + my $handler = readlink(make_path(SCST_DEVICES_DIR(), $device, 'handler')); $handler =~ s/.*\///; @@ -2289,7 +2291,7 @@ sub devices { my @devices; my $dHandle = new IO::Handle; - my $_path = !defined($handler) ? SCST_DEVICES_DIR() : + my $_path = !length($handler) ? SCST_DEVICES_DIR() : make_path(SCST_HANDLERS_DIR(), $handler); if (!(opendir $dHandle, $_path)) { return (undef, "devices(): Unable to read directory '$_path': $!"); @@ -2299,7 +2301,7 @@ sub devices { next if ($device eq '.' || $device eq '..'); my $isdev = (-d make_path(SCST_DEVICES_DIR(), $device)); - if ($isdev && (!defined($handler) || + if ($isdev && (!length($handler) || $handler eq $self->deviceHandler($device))) { push @devices, $device; } @@ -2314,11 +2316,11 @@ sub deviceOpen { my $self = shift; my $device = shift; - return FALSE if (!defined($device)); + return FALSE if (!length($device)); my ($devices, $errorString) = $self->devices(); - return SCST_C_FATAL_ERROR if (!defined($devices)); + return SCST_C_FATAL_ERROR if (!length($devices)); foreach my $_device (@{$devices}) { return TRUE if ($device eq $_device); @@ -2570,7 +2572,7 @@ sub setDriverAttribute { my $attribute = shift; my $value = shift; - return TRUE if (!defined($attribute) || !defined($value)); + return TRUE if (!length($attribute) || !length($value)); my $path = make_path(SCST_TARGETS_DIR(), $driver, $attribute); @@ -2601,7 +2603,7 @@ sub targetAttributes { my %attributes = ( ); my $errorString; - return (undef, "Too few arguments") if (!defined($driver) || !defined($target)); + return (undef, "Too few arguments") if (!length($driver) || !length($target)); my $pHandle = new IO::Handle; my $_path = make_path(SCST_TARGETS_DIR(), $driver, $target); @@ -2705,7 +2707,8 @@ sub setTargetAttribute { my $attribute = shift; my $value = shift; - return TRUE if (!defined($attribute) || !defined($value)); + return TRUE if (!length($driver) || !length($target) || + !length($attribute) || !length($value)); my ($path, $cmd); $path = make_path(SCST_TARGETS_DIR(), $driver, $target, $attribute); @@ -2830,7 +2833,7 @@ sub setGroupAttribute { my $attribute = shift; my $value = shift; - return TRUE if (!defined($attribute) || !defined($value)); + return TRUE if (!length($attribute) || !length($value)); my ($path, $cmd); $path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS, @@ -2876,7 +2879,7 @@ sub lunAttributes { my ($_path, $luncrattr); - if (defined($group)) { + if (length($group)) { $_path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS, $group, SCST_LUNS, $lun); ($luncrattr, $errorString) = @@ -2893,7 +2896,7 @@ sub lunAttributes { $errorString = "lunAttributes(): Driver '$driver' is not available"; } elsif ($self->targetExists($driver, $target) != TRUE) { $errorString = "lunAttributes(): Target '$target' is not available"; - } elsif (defined($group) && $self->groupExists($driver, $target, $group) != TRUE) { + } elsif (length($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"; @@ -2980,12 +2983,12 @@ sub setLunAttribute { my $group = shift; return SCST_C_LUN_SETATTR_FAIL - if (!defined($driver) || !defined($target) || !defined($lun) || - !defined($attribute) || !defined($value)); + if (!length($driver) || !length($target) || !length($lun) || + !length($attribute) || !length($value)); my $path; - if (defined($group)) { + if (length($group)) { $path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS, $group, SCST_LUNS, $lun, $attribute); @@ -3014,14 +3017,14 @@ sub setLunAttribute { return SCST_C_TGT_NO_TARGET if (!$rc); return $rc if ($rc > 1); - if (defined($group)) { + if (length($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 (defined($group) ? SCST_C_GRP_NO_LUN : SCST_C_TGT_NO_LUN) + return (length($group) ? SCST_C_GRP_NO_LUN : SCST_C_TGT_NO_LUN) if (!$rc); return $rc if ($rc > 1); @@ -3131,7 +3134,7 @@ sub setInitiatorAttribute { my $attribute = shift; my $value = shift; - return TRUE if (!defined($attribute) || !defined($value)); + return TRUE if (!length($attribute) || !length($value)); my $path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS, $group, SCST_LUNS, $initiator, $attribute); @@ -3418,7 +3421,7 @@ sub setAluaAttribute { my $attribute = shift; my $value = shift; - return TRUE if (!defined($attribute) || !defined($value)); + return TRUE if (!length($attribute) || !length($value)); my $bytes = - ENOENT; my $path = make_path(SCST_DEV_GROUP_DIR(), $attribute); @@ -3443,7 +3446,7 @@ sub setDeviceGroupAttribute { my $attribute = shift; my $value = shift; - return TRUE if (!defined($attribute) || !defined($value)); + return TRUE if (!length($attribute) || !length($value)); my $bytes = - ENOENT; my $path = make_path(SCST_DEV_GROUP_DIR(), $group, $attribute); @@ -3473,8 +3476,8 @@ sub setTargetGroupAttribute { my $attribute = shift; my $value = shift; - return TRUE if (!defined($group) || !defined($tgroup) || - !defined($attribute) || !defined($value)); + return TRUE if (!length($group) || !length($tgroup) || + !length($attribute) || !length($value)); my $bytes = - ENOENT; my $path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS, $tgroup, $attribute); @@ -3509,9 +3512,9 @@ sub setTargetGroupTargetAttribute { my $attribute = shift; my $value = shift; - return TRUE if (!defined($group) || !defined($tgroup) || - !defined($tgt) || !defined($attribute) || - !defined($value)); + return TRUE if (!length($group) || !length($tgroup) || + !length($tgt) || !length($attribute) || + !length($value)); my $bytes = - ENOENT; my $path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS, @@ -3572,7 +3575,7 @@ sub handlerExists { my $self = shift; my $handler = shift; - return FALSE if (!defined($handler)); + return FALSE if (!length($handler)); my ($handlers, $errorString) = $self->handlers(); @@ -3591,7 +3594,7 @@ sub setHandlerAttribute { my $attribute = shift; my $value = shift; - return TRUE if (!defined($attribute) || !defined($value)); + return TRUE if (!length($attribute) || !length($value)); my $bytes = - ENOENT; my $path = make_path(SCST_HANDLERS_DIR(), $handler, $attribute); @@ -3821,6 +3824,8 @@ sub deviceCreateAttributes { my %attributes = ( ); my $errorString; + return (undef, "missing handler argument") if (!length($handler)); + my $io = new IO::File make_path(SCST_HANDLERS_DIR(), $handler, SCST_MGMT_IO), O_RDONLY; @@ -3860,9 +3865,8 @@ sub openDevice { my $device = shift; my $attributes = shift; - return SCST_C_DEV_OPEN_FAIL if (!defined($handler) || - !defined($device) || - !defined($attributes)); + return SCST_C_DEV_OPEN_FAIL + if (!length($handler) || !length($device) || !length($attributes)); my $o_string = ""; foreach my $attribute (keys %{$attributes}) { @@ -3912,8 +3916,7 @@ sub closeDevice { my $handler = shift; my $device = shift; - return SCST_C_DEV_CLOSE_FAIL if (!defined($handler) || - !defined($device)); + return SCST_C_DEV_CLOSE_FAIL if (!length($handler) || !length($device)); my ($path, $cmd); $path = make_path(SCST_HANDLERS_DIR(), $handler, SCST_MGMT_IO); @@ -4196,7 +4199,7 @@ sub lunCreateAttributes { my $_path; - if (defined($group)) { + if (length($group)) { $_path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS, $group, SCST_LUNS, SCST_MGMT_IO); @@ -4214,7 +4217,7 @@ sub lunCreateAttributes { } elsif ($self->targetExists($driver, $target) != TRUE) { $errorString = "lunCreateAttributes(): Target '$target' ". "is not available"; - } elsif (defined($group) && $self->groupExists($driver, $target, $group) != TRUE) { + } elsif (length($group) && $self->groupExists($driver, $target, $group) != TRUE) { $errorString = "lunCreateAttributes(): Group '$group' ". "does not exist"; } else { @@ -4341,7 +4344,7 @@ sub sessions { my %_sessions; my $errorString; - return (undef, "Too few arguments") if (!defined($driver) || !defined($target)); + return (undef, "Too few arguments") if (!length($driver) || !length($target)); my $sHandle = new IO::Handle; my $_path = make_path(SCST_TARGETS_DIR(), $driver, $target, diff --git a/scstadmin/scstadmin.sysfs/scstadmin b/scstadmin/scstadmin.sysfs/scstadmin index 9dd72273c..0c4ee447e 100755 --- a/scstadmin/scstadmin.sysfs/scstadmin +++ b/scstadmin/scstadmin.sysfs/scstadmin @@ -1497,7 +1497,8 @@ sub serializeKeyAttr { foreach my $key (keys %{$$attributes{$attribute}->{'keys'}}) { my $value = $$attributes{$attribute}->{'keys'}->{$key}->{'value'}; - push (@values, $value) if ($value); + # $value = undef means that the attribute is write-only. + push (@values, $value) if (defined($value)); } foreach my $value (sort @values) { $result .= "$prefix$attribute " . escapeMeta($value) . "\n"; @@ -1532,7 +1533,8 @@ sub serializeNkAttr { && $attribute ne 'enabled' && $attribute ne 'hw_target') { my $value = $$attributes{$attribute}->{'value'}; - if ($value) { + # $value = undef means that the attribute is write-only. + if (defined($value)) { $result .= "$prefix$attribute " . escapeMeta($value) . "\n"; } } @@ -3140,7 +3142,7 @@ sub listDevices { my $device = shift; my $nonkey = shift; - return listDevice($device, $nonkey) if ($device); + return listDevice($device, $nonkey) if (length($device)); return listHandler(); } @@ -3164,7 +3166,7 @@ sub listDeviceGroups { my $group = shift; my $showall = shift; - return listDeviceGroup($group) if ($group); + return listDeviceGroup($group) if (length($group)); my ($groups, $errorString) = $SCST->deviceGroups(); @@ -3243,8 +3245,8 @@ sub listTargetGroups { my $tgroup = shift; my $indent = shift; - return listDeviceGroups(undef, TRUE) if ($group eq ''); - return listTargetGroup($group, $tgroup) if ($tgroup); + return listDeviceGroups(undef, TRUE) if (!length($group)); + return listTargetGroup($group, $tgroup) if (length($tgroup)); my ($tgroups, $errorString) = $SCST->targetGroups($group); @@ -3332,7 +3334,7 @@ sub listDeviceGroupDevices { sub listDrivers { my $driver = shift; - return listTargets($driver, undef) if ($driver); + return listTargets($driver, undef) if (length($driver)); my ($drivers, $errorString) = $SCST->drivers(); @@ -3360,9 +3362,10 @@ sub listTargets { my $target = shift; my %toprint; - return listGroups($driver, $target, undef) if ($target and $driver); + return listGroups($driver, $target, undef) + if (length($target) and length($driver)); - my $got_driver = defined($driver); + my $got_driver = !!length($driver); my ($drivers, $errorString) = $SCST->drivers(); @@ -3469,7 +3472,7 @@ sub listGroup { my $errorString; ($luns, $errorString) = $SCST->luns($driver, $target, $group) if (!$luns); - if (!defined($initiators) && defined($group)) { + if (!length($initiators) && length($group)) { ($initiators, $errorString) = $SCST->initiators($driver, $target, $group); return TRUE if issueWarning($errorString); } @@ -3504,7 +3507,7 @@ sub listGroup { print "\t(none)\n"; } - if (defined($group)) { + if (length($group)) { print "\nAssigned Initiators:\n\n"; if ($#{$initiators} > -1) { @@ -3523,7 +3526,7 @@ sub listGroup { } } } else { - if (defined($group)) { + if (length($group)) { print "Group '$group' has no associated LUNs or initiators.\n"; } else { print "Driver/target '$driver/$target' has no associated LUNs.\n"; @@ -3539,7 +3542,7 @@ sub listGroups { my $group = shift; my $found = FALSE; - if ($group and $driver and $target) { + if (length($group) and length($driver) and length($target)) { return listGroup($driver, $target, $group); } @@ -3948,7 +3951,7 @@ sub listLunAttributes { return TRUE if issueWarning($errorString); if (!scalar(keys %{$attributes})) { - if ($group) { + if (length($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"; @@ -5160,7 +5163,7 @@ sub addLun { return FALSE; } - if (defined($group)) { + if (length($group)) { print "\t-> Adding device '$device' at LUN $lun to driver/target/group ". "'$driver/$target/$group': "; } else { @@ -5351,7 +5354,7 @@ sub issueLip { my $warn = shift; my $errorString; - if (defined($driver) && defined($target)) { + if (length($driver) && length($target)) { return _issueLip($driver, $target, $warn); } else { my $drivers;