From: <mga...@us...> - 2010-08-25 20:24:05
|
Revision: 2005 http://scst.svn.sourceforge.net/scst/?rev=2005&view=rev Author: mgandalf Date: 2010-08-25 20:23:58 +0000 (Wed, 25 Aug 2010) Log Message: ----------- - Typo fix. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-25 20:14:10 UTC (rev 2004) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-25 20:23:58 UTC (rev 2005) @@ -2557,7 +2557,7 @@ return if issueWarning($SCST->errorString()); if (!scalar(keys %{$attributes})) { - print "No suck driver/target/group '$driver/$target/$group' found.\n"; + print "No such driver/target/group '$driver/$target/$group' found.\n"; return; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-08-25 20:25:15
|
Revision: 2006 http://scst.svn.sourceforge.net/scst/?rev=2006&view=rev Author: mgandalf Date: 2010-08-25 20:25:09 +0000 (Wed, 25 Aug 2010) Log Message: ----------- - MAX_LUNS is no longer used. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-25 20:23:58 UTC (rev 2005) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-25 20:25:09 UTC (rev 2006) @@ -198,7 +198,6 @@ FALSE => 0, DEF_CONFIG => '/etc/scst.conf', -MAX_LUNS => 255, }; my $SCST; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-08-25 20:29:44
|
Revision: 2007 http://scst.svn.sourceforge.net/scst/?rev=2007&view=rev Author: mgandalf Date: 2010-08-25 20:29:38 +0000 (Wed, 25 Aug 2010) Log Message: ----------- - Capture SIGTERM as well as SIGHUP. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-25 20:25:09 UTC (rev 2006) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-25 20:29:38 UTC (rev 2007) @@ -208,7 +208,8 @@ my %CURRENT; -$SIG{INT} = \&commitSuicide; +$SIG{INT} = \&commitSuicide; +$SIG{TERM} = \&commitSuicide; use vars qw($Version); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-08-26 15:30:44
|
Revision: 2009 http://scst.svn.sourceforge.net/scst/?rev=2009&view=rev Author: mgandalf Date: 2010-08-26 15:30:37 +0000 (Thu, 26 Aug 2010) Log Message: ----------- - Fix some argument parsing. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-26 13:32:45 UTC (rev 2008) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-26 15:30:37 UTC (rev 2009) @@ -366,11 +366,6 @@ $_NOPROMPT_ = TRUE if (defined($_NOPROMPT_)); $force = TRUE if (defined($force)); - $clearInitiators = TRUE if (defined($clearInitiators)); - $clearLuns = TRUE if (defined($clearLuns)); - $listSessions = TRUE if (defined($listSessions)); - $listScstAttr = TRUE if (defined($listScstAttr)); - $setScstAttr = TRUE if (defined($setScstAttr)); $nonkey = TRUE if (defined($nonkey)); my $query_mode = defined($listHandler) || defined($listDevice) || defined($listDriver) || @@ -395,142 +390,142 @@ usage(); } - if (defined($clearConfig) && !defined($force)) { + if (defined($clearConfig) && !$force) { print "Please specify -force with -clear_config.\n"; usage(); } - if (defined($listTargetAttr) && !defined($driver)) { + if (defined($listTargetAttr) && ($driver eq '')) { print "Please specify -driver with -list_tgt_attr.\n"; usage(); } - if (defined($listGroupAttr) && (!defined($driver) || !defined($target))) { + if (defined($listGroupAttr) && (($driver eq '') || ($target eq ''))) { print "Please specify -driver and -target with -list_grp_attr.\n"; usage(); } - if (defined($listLunAttr) && (!defined($driver) || !defined($target))) { + if (defined($listLunAttr) && (($driver eq '') || ($target eq ''))) { print "Please specify -driver -target and -group with -list_lun_attr.\n"; usage(); } - if (defined($listInitiatorAttr) && (!defined($driver) || !defined($target) || !defined($group))) { + if (defined($listInitiatorAttr) && (($driver eq '') || ($target eq '') || ($group eq ''))) { print "Please specify -driver -target and -group with -list_ini_attr.\n"; usage(); } - if (defined($setScstAttr) && !defined($attributes)) { + if (defined($setScstAttr) && ($attributes eq '')) { print "Please specify -attributes with -set_scst_attr.\n"; usage(); } - if (defined($setHandlerAttr) && !defined($attributes)) { + if (defined($setHandlerAttr) && ($attributes eq '')) { print "Please specify -attributes with -set_hnd_attr.\n"; usage(); } - if (defined($setDeviceAttr) && !defined($attributes)) { + if (defined($setDeviceAttr) && ($attributes eq '')) { print "Please specify -attributes with -set_dev_attr.\n"; usage(); } - if (defined($setDriverAttr) && !defined($attributes)) { + if (defined($setDriverAttr) && ($attributes eq '')) { print "Please specify -attributes with -set_drv_attr.\n"; usage(); } - if (defined($setTargetAttr) && (!defined($driver) || !defined($attributes))) { + if (defined($setTargetAttr) && (($driver eq '') || ($attributes eq ''))) { print "Please specify -driver and -attributes with -set_tgt_attr.\n"; usage(); } - if (defined($setGroupAttr) && (!defined($driver) || !defined($target) || !defined($attributes))) { + if (defined($setGroupAttr) && (($driver eq '') || ($target eq '') || ($attributes eq ''))) { print "Please specify -driver -target and -attributes with -set_grp_attr.\n"; usage(); } if (defined($setLunAttr) && - (!defined($driver) || !defined($target) || !defined($attributes))) { + (($driver eq '') || ($target eq '') || ($attributes eq ''))) { print "Please specify -driver -target -group and -attributes with -set_lun_attr.\n"; usage(); } if (defined($setInitiatorAttr) && - (!defined($driver) || !defined($target) || !defined($group) || !defined($attributes))) { + (($driver eq '') || ($target eq '') || ($group eq '') || ($attributes eq ''))) { print "Please specify -driver -target -group and -attributes with -set_ini_attr.\n"; usage(); } - if (defined($addDriverAttr) && !defined($attributes)) { + if (defined($addDriverAttr) && ($attributes eq '')) { print "Please specify -attributes with -add_drv_attr.\n"; usage(); } if (defined($addTargetAttr) && - (!defined($driver) || !defined($attributes))) { + (($driver eq '') || ($attributes eq ''))) { print "Please specify -driver and -attributes with -add_tgt_attr.\n"; usage(); } - if (defined($remDriverAttr) && !defined($attributes)) { + if (defined($remDriverAttr) && ($attributes eq '')) { print "Please specify -attributes with -rem_drv_attr.\n"; usage(); } if (defined($remTargetAttr) && - (!defined($driver) || !defined($attributes))) { + (($driver eq '') || ($attributes eq ''))) { print "Please specify -driver and -attributes with -rem_tgt_attr.\n"; usage(); } - if ((defined($openDev) || defined($closeDev)) && !defined($handler)) { + if ((defined($openDev) || defined($closeDev)) && ($handler eq '')) { print "Please specify -handler with -open_dev/-close_dev.\n"; usage(); } - if (defined($addTarget) && !defined($driver)) { + if (defined($addTarget) && ($driver eq '')) { print "Please specify -driver with -add_target.\n"; usage(); } - if (defined($removeTarget) && !defined($driver)) { + if (defined($removeTarget) && ($driver eq '')) { print "Please specify -driver with -rem_target.\n"; usage(); } if ((defined($addGroup) || defined($removeGroup)) && - (!defined($driver) || !defined($target))) { + (($driver eq '') || ($target eq ''))) { print "Please specify -driver and -target with -add_group/-remove_group.\n"; usage(); } if ((defined($addInitiator) || defined($removeInitiator) || defined($clearInitiators)) && - (!defined($target) || !defined($driver) || !defined($group))) { + (($target eq '') || ($driver eq '') || ($group eq ''))) { print "Please specify -driver -target and -group with ". "-add_init/-remove_init/-clear_inits.\n"; usage(); } if (defined($moveInitiator) && - (!defined($driver) || !defined($target) || !defined($group) || !defined($to))) { + (($driver eq '') || ($target eq '') || ($group eq '') || ($to eq ''))) { print "Please specify -driver -target -group and -to with -move_init.\n"; usage(); } if ((defined($addLun) || defined($replaceLun)) && - (!defined($driver) || !defined($target) || !defined($device))) { + (($driver eq '') || ($target eq '') || ($device eq ''))) { print "Please specify -driver -target and -device with -add_lun/-replace_lun.\n"; usage(); } - if ((defined($clearLuns) || defined($removeLun)) && (!defined($driver) || !defined($target))) { + if ((defined($clearLuns) || defined($removeLun)) && (($driver eq '') || ($target eq ''))) { print "Please specify -driver and -target with -rem_lun/-clear_luns.\n"; usage(); } - $applyConfig = $_DEF_CONFIG_ if (defined($applyConfig) && !$applyConfig); - $checkConfig = $_DEF_CONFIG_ if (defined($checkConfig) && !$checkConfig); + $applyConfig = $_DEF_CONFIG_ if (defined($applyConfig) && ($applyConfig eq '')); + $checkConfig = $_DEF_CONFIG_ if (defined($checkConfig) && ($checkConfig eq '')); my %_attributes; if ($attributes) { @@ -1981,7 +1976,7 @@ my $handler = shift; my %toprint; - my $got_handler = defined($handler); + my $got_handler = ($handler ne ''); my $handlers = $SCST->handlers(); my $l_device; @@ -2041,7 +2036,7 @@ my $device = shift; my $nonkey = shift; - return listDevice($device, $nonkey) if (defined($device)); + return listDevice($device, $nonkey) if ($device ne ''); return listHandler(); } @@ -2064,7 +2059,7 @@ sub listDrivers { my $driver = shift; - return listTargets($driver, undef) if (defined($driver)); + return listTargets($driver, undef) if ($driver ne ''); my $drivers = $SCST->drivers(); @@ -2090,9 +2085,9 @@ my $target = shift; my %toprint; - return listGroups($driver, $target, undef) if (defined($target) && defined($driver)); + return listGroups($driver, $target, undef) if (($target ne '') && ($driver ne '')); - my $got_driver = defined($driver); + my $got_driver = ($driver ne ''); my $drivers = $SCST->drivers(); @@ -2191,7 +2186,8 @@ my $initiators = shift; $luns = $SCST->luns($driver, $target, $group) if (!$luns); - $initiators = $SCST->initiators($driver, $target, $group) if (!$initiators); + $initiators = $SCST->initiators($driver, $target, $group) + if (($initiators eq '') && ($group ne '')); return if issueWarning($SCST->errorString()); @@ -2260,7 +2256,7 @@ my $group = shift; my $found = FALSE; - if (defined($group) && defined($driver) && defined($target)) { + if (($group ne '') && ($driver ne '') && ($target ne '')) { return listGroup($driver, $target, $group); } @@ -2576,7 +2572,7 @@ return if issueWarning($SCST->errorString()); if (!scalar(keys %{$attributes})) { - if (defined($group)) { + if ($group ne '') { 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"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-08-26 22:05:59
|
Revision: 2011 http://scst.svn.sourceforge.net/scst/?rev=2011&view=rev Author: mgandalf Date: 2010-08-26 22:05:53 +0000 (Thu, 26 Aug 2010) Log Message: ----------- - Fix setting device attributes which have no special create attributes. - Don't warn on device attributes already set of not done with -set_dev_attr. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-26 18:18:10 UTC (rev 2010) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-26 22:05:53 UTC (rev 2011) @@ -1575,7 +1575,8 @@ my $create_attrs = configToAttr($$devices{$device}->{'CREATE_ATTRIBUTES'}); my $old_create_attrs = $SCST->deviceAttributes($device); - if (compareToKeyAttribute($create_attrs, $old_create_attrs)) { + if ((scalar keys %{$create_attrs}) && + compareToKeyAttribute($create_attrs, $old_create_attrs)) { print "-> Device '$device' is configured differently.\n"; if ($deletions) { @@ -1589,7 +1590,7 @@ } } - setDeviceAttributes($device, $attributes, $deletions) + setDeviceAttributes($device, $attributes, FALSE) if (scalar keys %{$attributes}); next; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-08-26 22:09:27
|
Revision: 2012 http://scst.svn.sourceforge.net/scst/?rev=2012&view=rev Author: mgandalf Date: 2010-08-26 22:09:21 +0000 (Thu, 26 Aug 2010) Log Message: ----------- - Reorder/reword some of the help message. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-26 22:05:53 UTC (rev 2011) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-26 22:09:21 UTC (rev 2012) @@ -15,9 +15,9 @@ Usage: General Operations -config <config> : Configure SCST given the specified <file>. + -check_config <file> : Checks the saved configuration <file>. + -write_config <file> : Writes the current configuration to <file>. -clear_config : Clear all SCST configuration. - -write_config <file> : Writes the current configuration out <file>. - -check_config <file> : Checks the saved configuration in <file>. Query Operations -list_handler [<hndlr>] : List all available handlers or specific <hndlr>. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-08-26 22:31:41
|
Revision: 2013 http://scst.svn.sourceforge.net/scst/?rev=2013&view=rev Author: mgandalf Date: 2010-08-26 22:31:35 +0000 (Thu, 26 Aug 2010) Log Message: ----------- - Better fix for no create attributes takes into consideration other attributes. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-26 22:09:21 UTC (rev 2012) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-26 22:31:35 UTC (rev 2013) @@ -1574,9 +1574,13 @@ if (handlerHasDevice($handler, $device)) { my $create_attrs = configToAttr($$devices{$device}->{'CREATE_ATTRIBUTES'}); my $old_create_attrs = $SCST->deviceAttributes($device); + immediateExit($SCST->errorString()); + my $possible = $SCST->deviceCreateAttributes($handler); + immediateExit($SCST->errorString()); - if ((scalar keys %{$create_attrs}) && - compareToKeyAttribute($create_attrs, $old_create_attrs)) { + filterCreateAttributes($possible, $old_create_attrs, FALSE); + + if (compareToKeyAttribute($create_attrs, $old_create_attrs)) { print "-> Device '$device' is configured differently.\n"; if ($deletions) { @@ -1641,8 +1645,11 @@ } else { my $c_attrs = configToAttr($$config{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$target}->{'LUN'}->{$lun}->{$device}); my $o_attrs = $SCST->lunAttributes($driver, $target, $lun); + immediateExit($SCST->errorString()); + my $possible = $SCST->lunCreateAttributes($driver, $target); + immediateExit($SCST->errorString()); - filterCreateAttributes($driver, $target, undef, $c_attrs); + filterCreateAttributes($possible, $c_attrs, TRUE); if (compareToKeyAttribute($c_attrs, $o_attrs)) { print "-> Device '$device' at LUN '$lun' is configured differently.\n"; @@ -1848,17 +1855,15 @@ } sub filterCreateAttributes { - my $driver = shift; - my $target = shift; - my $group = shift; + my $creates = shift; my $attrs = shift; + my $keep = shift; foreach my $attribute (keys %{$attrs}) { - my $bad = $SCST->checkLunCreateAttributes($driver, $target, $attribute, $group); - if ($bad == TRUE) { + my $bad = defined($$creates{$attribute}); + + if (($keep && $bad) || (!$keep && !$bad)) { delete $$attrs{$attribute}; - } elsif ($bad) { - immediateExit($SCST->errorString($bad)); } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-08-26 22:52:10
|
Revision: 2014 http://scst.svn.sourceforge.net/scst/?rev=2014&view=rev Author: mgandalf Date: 2010-08-26 22:52:04 +0000 (Thu, 26 Aug 2010) Log Message: ----------- - An even better fix for the previous create attribute bug. - Consider create attributes for LUNs within groups as well. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-26 22:31:35 UTC (rev 2013) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-26 22:52:04 UTC (rev 2014) @@ -1652,7 +1652,8 @@ filterCreateAttributes($possible, $c_attrs, TRUE); if (compareToKeyAttribute($c_attrs, $o_attrs)) { - print "-> Device '$device' at LUN '$lun' is configured differently.\n"; + print "-> Assigned device '$device' in target '$target' at ". + "LUN '$lun' is configured differently.\n"; if ($deletions) { print "\t-> Re-assigning device with new attributes.\n"; @@ -1683,6 +1684,28 @@ "for driver/target/group '$driver/$target/$group'. ". "Use -force to remove it.\n"; } + } else { + my $c_attrs = configToAttr($$config{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$target}->{'GROUP'}->{$group}->{'LUN'}->{$lun}->{$device}); + my $o_attrs = $SCST->lunAttributes($driver, $target, $lun, $group); + immediateExit($SCST->errorString()); + my $possible = $SCST->lunCreateAttributes($driver, $target, $group); + immediateExit($SCST->errorString()); + + filterCreateAttributes($possible, $c_attrs, TRUE); + + if (compareToKeyAttribute($c_attrs, $o_attrs)) { + print "-> Assigned device '$device' in group '$group' ". + "at LUN '$lun' is configured differently.\n"; + + if ($deletions) { + print "\t-> Re-assigning device with new attributes.\n"; + removeLun($driver, $target, $lun, $group); + addLun($driver, $target, $device, $lun, $c_attrs, $group); + } else { + print "\t-> Use -force to re-assign device with new attributes. ". + "NOTE: This will disrupt all initiators using this device.\n"; + } + } } } @@ -1860,9 +1883,9 @@ my $keep = shift; foreach my $attribute (keys %{$attrs}) { - my $bad = defined($$creates{$attribute}); + my $good = defined($$creates{$attribute}); - if (($keep && $bad) || (!$keep && !$bad)) { + if (($keep && !$good) || (!$keep && !$good)) { delete $$attrs{$attribute}; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-08-31 19:36:00
|
Revision: 2030 http://scst.svn.sourceforge.net/scst/?rev=2030&view=rev Author: mgandalf Date: 2010-08-31 19:35:54 +0000 (Tue, 31 Aug 2010) Log Message: ----------- - Add -issue_lip argument. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-31 18:49:18 UTC (rev 2029) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-31 19:35:54 UTC (rev 2030) @@ -151,10 +151,13 @@ -driver <driver> -disable_target <t> : Disable target mode for a given driver & target. -driver <driver> + -issue_lip [<t>] + [-driver <driver>] : Issue a LIP for a specific driver/target or for + all drivers and targets. Options - -nonkey : When writing a configuration file or listing - attributes, store/print non-key attributes as well. + -nonkey : When writing a config file or listing attributes, + store/print non-key attributes as well. -force : Force all configuration changes, even deletions (DANGER!). -noprompt : Do not prompt or pause. Use with caution! @@ -273,6 +276,7 @@ my $enableTarget; my $disableTarget; + my $issueLip; my $handler; my $attributes; @@ -345,6 +349,7 @@ 'enable_target=s' => \$enableTarget, 'disable_target=s' => \$disableTarget, + 'issue_lip:s' => \$issueLip, 'handler=s' => \$handler, 'attributes=s' => \$attributes, @@ -383,7 +388,7 @@ defined($addDriverAttr) + defined($addTargetAttr) + defined($remDriverAttr) + defined($remTargetAttr) + defined($addTarget) + defined($removeTarget) + defined($addLun) + defined($removeLun) + defined($replaceLun) + defined($clearLuns) + - defined($enableTarget) + defined($disableTarget); + defined($enableTarget) + defined($disableTarget) + defined($issueLip); if (($query_mode + $set_mode + $op_mode) > 1) { print "Please specify only one non-query operation at a time.\n"; @@ -553,7 +558,7 @@ $addGroup, $removeGroup, $addInitiator, $removeInitiator, $moveInitiator, $clearInitiators, $addLun, $removeLun, $replaceLun, $clearLuns, - $enableTarget, $disableTarget, + $enableTarget, $disableTarget, $issueLip, $handler, \%_attributes, $driver, $target, $group, $to, $device, $nonkey, $force); @@ -578,7 +583,7 @@ $addGroup, $removeGroup, $addInitiator, $removeInitiator, $moveInitiator, $clearInitiators, $addLun, $removeLun, $replaceLun, $clearLuns, - $enableTarget, $disableTarget, + $enableTarget, $disableTarget, $issueLip, $handler, $attributes, $driver, $target, $group, $to, $device, $nonkey, $force) = getArgs(); @@ -805,6 +810,10 @@ $rc = disableTarget($driver, $disableTarget); last SWITCH; }; + defined($issueLip) && do { + $rc = issueLip($driver, $issueLip); + last SWITCH; + }; if (!$all_good) { print "No valid operations specified.\n"; @@ -3619,6 +3628,82 @@ setTargetAttributes($driver, $target, \%attributes); } +sub issueLip { + my $driver = shift; + my $target = shift; + + if (defined($driver) && defined($target)) { + return _issueLip($driver, $target); + } else { + my $drivers = $SCST->drivers(); + + foreach my $driver(@{$drivers}) { + my $targets = $SCST->targets($driver); + + foreach my $target (@{$targets}) { + my $rc = _issueLip($driver, $target); + + return $rc if ($rc); + } + } + } + + return FALSE; +} + +sub _issueLip { + my $driver = shift; + my $target = shift; + my $rc = FALSE; + + my $attributes = $SCST->targetAttributes($driver, $target); + + if (!defined($$attributes{'host'})) { + print "Driver/target '$driver/$target' has no 'host' attribute, ignoring.\n"; + return FALSE; + } + + my $dir = new IO::Handle; + + if (!(opendir $dir, $$attributes{'host'}->{'value'}.'/device/fc_host')) { + print "Driver/target is not a fibre channel target, ignoring.\n"; + return FALSE; + } + + foreach my $host (readdir($dir)) { + next if (($host eq '.') || ($host eq '..')); + + my $lip = $$attributes{'host'}->{'value'}.'/device/fc_host/'.$host.'/issue_lip'; + + if (-w $lip) { + my $io = new IO::File $lip, O_WRONLY; + + print "WARNING: Failed to open file '$lip' for writing.\n" + if (!$io); + + print "Issuing LIP on fibre channel driver/target '$driver/$target': "; + + my $bytes = syswrite($io, 1, 1); + + print "done.\n"; + + if (!$bytes) { + print "WARNING: Failed to issue LIP on driver/target '$driver/$target'.\n"; + $rc = TRUE; + } + + close $io; + } else { + print "Fibre channel driver/target '$driver/$target' lacks the ability to ". + "issue LIPs, ignoring.\n"; + } + } + + close $dir; + + return $rc; +} + #################################################################### sub readConfigFile { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-08-31 19:37:23
|
Revision: 2031 http://scst.svn.sourceforge.net/scst/?rev=2031&view=rev Author: mgandalf Date: 2010-08-31 19:37:16 +0000 (Tue, 31 Aug 2010) Log Message: ----------- - Add in host to output from -issue_lip. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-31 19:35:54 UTC (rev 2030) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-31 19:37:16 UTC (rev 2031) @@ -3681,7 +3681,7 @@ print "WARNING: Failed to open file '$lip' for writing.\n" if (!$io); - print "Issuing LIP on fibre channel driver/target '$driver/$target': "; + print "Issuing LIP on fibre channel driver/target '$driver/$target' ($host): "; my $bytes = syswrite($io, 1, 1); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-09-02 15:45:36
|
Revision: 2034 http://scst.svn.sourceforge.net/scst/?rev=2034&view=rev Author: mgandalf Date: 2010-09-02 15:45:30 +0000 (Thu, 02 Sep 2010) Log Message: ----------- - Fixed clear_config not clearing driver dynamic attributes. - Removed requirement on special CREATE_ATTRIBUTES. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-09-01 12:21:33 UTC (rev 2033) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-09-02 15:45:30 UTC (rev 2034) @@ -1017,7 +1017,7 @@ foreach my $key (keys %{$$attributes{$attribute}->{'keys'}}) { my $value = $$attributes{$attribute}->{'keys'}->{$key}->{'value'}; $value = "\"$value\"" if ($value =~ / /); - $create_buff .= "\t\t\t$attribute $value\n" + $create_buff .= "\t\t$attribute $value\n" if (defined($value)); } # Shouldn't be any non-key create attributes @@ -1026,9 +1026,7 @@ } if ($create_buff) { - $attribute_buff .= "\t\tCREATE_ATTRIBUTES {\n"; $attribute_buff .= $create_buff; - $attribute_buff .= "\t\t}\n"; } } @@ -1574,19 +1572,19 @@ my %_attributes; my %_cattributes; foreach my $item (keys %{$$devices{$device}}) { - next if ($item eq 'CREATE_ATTRIBUTES'); $_attributes{$item} = $$devices{$device}->{$item}; } my $attributes = configToAttr(\%_attributes); + my $create_attrs = configToAttr(\%_attributes); + my $possible = $SCST->deviceCreateAttributes($handler); + immediateExit($SCST->errorString()); + filterCreateAttributes($possible, $create_attrs, FALSE); + filterCreateAttributes($possible, $attributes, TRUE); if (handlerHasDevice($handler, $device)) { - my $create_attrs = configToAttr($$devices{$device}->{'CREATE_ATTRIBUTES'}); my $old_create_attrs = $SCST->deviceAttributes($device); immediateExit($SCST->errorString()); - my $possible = $SCST->deviceCreateAttributes($handler); - immediateExit($SCST->errorString()); - filterCreateAttributes($possible, $old_create_attrs, FALSE); if (compareToKeyAttribute($create_attrs, $old_create_attrs)) { @@ -1608,7 +1606,6 @@ next; } - my $create_attrs = configToAttr($$devices{$device}->{'CREATE_ATTRIBUTES'}); openDevice($handler, $device, $create_attrs); setDeviceAttributes($device, $attributes, $deletions) @@ -1658,7 +1655,7 @@ my $possible = $SCST->lunCreateAttributes($driver, $target); immediateExit($SCST->errorString()); - filterCreateAttributes($possible, $c_attrs, TRUE); + filterCreateAttributes($possible, $c_attrs, FALSE); if (compareToKeyAttribute($c_attrs, $o_attrs)) { print "-> Assigned device '$device' in target '$target' at ". @@ -1700,7 +1697,7 @@ my $possible = $SCST->lunCreateAttributes($driver, $target, $group); immediateExit($SCST->errorString()); - filterCreateAttributes($possible, $c_attrs, TRUE); + filterCreateAttributes($possible, $c_attrs, FALSE); if (compareToKeyAttribute($c_attrs, $o_attrs)) { print "-> Assigned device '$device' in group '$group' ". @@ -1892,9 +1889,9 @@ my $keep = shift; foreach my $attribute (keys %{$attrs}) { - my $good = defined($$creates{$attribute}); + my $good = defined($$creates{$attribute}) ? TRUE : FALSE; - if (($keep && !$good) || (!$keep && !$good)) { + if (($keep && $good) || (!$keep && !$good)) { delete $$attrs{$attribute}; } } @@ -1944,7 +1941,7 @@ } } - removeDriverDynamicAttributes($driver); + clearDriverDynamicAttributes($driver); } my $handlers = $CURRENT{'handler'}; @@ -3887,15 +3884,15 @@ foreach my $option (split(/\|/, $options)) { if (defined($o_converts{$option})) { - %{$new{'HANDLER'}->{$_handler}->{'DEVICE'}->{$device}->{'CREATE_ATTRIBUTES'}->{$o_converts{$option}}->{'1'}} = (); + %{$new{'HANDLER'}->{$_handler}->{'DEVICE'}->{$device}->{$o_converts{$option}}->{'1'}} = (); } } %{$new{'HANDLER'}->{$_handler}->{'DEVICE'}->{$device}->{'t10_dev_id'}->{$t10}} = () if ($t10); - %{$new{'HANDLER'}->{$_handler}->{'DEVICE'}->{$device}->{'CREATE_ATTRIBUTES'}->{'filename'}->{$path}} = () + %{$new{'HANDLER'}->{$_handler}->{'DEVICE'}->{$device}->{'filename'}->{$path}} = () if ($path); - %{$new{'HANDLER'}->{$_handler}->{'DEVICE'}->{$device}->{'CREATE_ATTRIBUTES'}->{'blocksize'}->{$bsize}} = () + %{$new{'HANDLER'}->{$_handler}->{'DEVICE'}->{$device}->{'blocksize'}->{$bsize}} = () if ($bsize); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-09-03 21:49:28
|
Revision: 2045 http://scst.svn.sourceforge.net/scst/?rev=2045&view=rev Author: mgandalf Date: 2010-09-03 21:49:22 +0000 (Fri, 03 Sep 2010) Log Message: ----------- - When initiators are moving between groups, use moveInitiator() instead of removeInitiator() and addInitiator(). - Check to make sure initiators don't belong to multiple groups. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-09-03 19:33:37 UTC (rev 2044) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-09-03 21:49:22 UTC (rev 2045) @@ -1422,6 +1422,20 @@ if (!$no_targets) { foreach my $target (keys %{$$CONFIG{'TARGET_DRIVER'}->{$driver}->{'TARGET'}}) { + my $groups = $$CONFIG{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$target}->{'GROUP'}; + my %seen_init; + foreach my $group (keys %{$groups}) { + foreach my $initiator (keys %{$$groups{$group}->{'INITIATOR'}}) { + if (defined($seen_init{$initiator})) { + print "\t-> FATAL: Initiator '$initiator' belongs to more than one group.\n". + "\t Initiators can only belong to one group at a time for a given target.\n"; + $errors++; + } + + $seen_init{$initiator}++; + } + } + if (!defined($CURRENT{'assign'}->{$driver}->{$target})) { if (!$SCST->driverIsVirtualCapable($driver)) { print "\t-> FATAL: Target '$target' for driver '$driver' ". @@ -1675,7 +1689,6 @@ foreach my $group (keys %{$$assignments{$driver}->{$target}->{'GROUP'}}) { my $luns = $$assignments{$driver}->{$target}->{'GROUP'}->{$group}->{'LUN'}; - my $inits = $$assignments{$driver}->{$target}->{'GROUP'}->{$group}->{'INITIATORS'}; my $def_group = $$config{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$target}->{'GROUP'}->{$group}; @@ -1715,18 +1728,6 @@ } } - foreach my $init (@{$inits}) { - if (!defined($$def_group{'INITIATOR'}->{$init})) { - if ($deletions) { - removeInitiator($driver, $target, $group, $init); - } else { - print "-> Initiator '$init' is not in configuration ". - "for driver/target/group '$driver/$target/$group'. ". - "Use -force to remove it.\n"; - } - } - } - if (!defined($$config{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$target}->{'GROUP'}->{$group})) { if ($deletions) { removeGroup($driver, $target, $group); @@ -1766,6 +1767,63 @@ } } +sub applyInitiatorAssignments { + my $driver = shift; + my $target = shift; + my $groups = shift; + my $deletions = shift; + my %configured; + my %running; + + my $current = $CURRENT{'assign'}->{$driver}->{$target}->{'GROUP'}; + + foreach my $group (keys %{$current}) { + my $initiators = $$current{$group}->{'INITIATORS'}; + + foreach my $init (@{$initiators}) { + $running{$init} = $group; + } + } + + foreach my $group (keys %{$groups}) { + my $initiators = $$groups{$group}->{'INITIATOR'}; + + foreach my $init (keys %{$initiators}) { + $configured{$init} = $group; + } + } + + foreach my $init (keys %running) { + if (!defined($configured{$init})) { + my $group = $running{$init}; + + if ($deletions) { + removeInitiator($driver, $target, $group, $init); + } else { + print "-> Initiator '$init' is not in configuration ". + "for driver/target/group '$driver/$target/$group'. ". + "Use -force to remove it.\n"; + } + } else { + if ($configured{$init} ne $running{$init}) { + if ($deletions) { + moveInitiator($driver, $target, $running{$init}, $init, $configured{$init}); + } else { + print "-> Initiator '$init' is moving to group '". + $configured{$init}."' from group '".$running{$init}."'. ". + "Use -force to move it.\n"; + } + } + } + } + + foreach my $init (keys %configured) { + if (!defined($running{$init})) { + addInitiator($driver, $target, $configured{$init}, $init); + } + } +} + sub applyTargetAssignments { my $driver = shift; my $targets = shift; @@ -1796,6 +1854,7 @@ foreach my $item (keys %{$$targets{$target}}) { if ($item eq 'GROUP') { applyGroupAssignments($driver, $target, $$targets{$target}->{$item}); + applyInitiatorAssignments($driver, $target, $$targets{$target}->{$item}, $deletions); } elsif ($item eq 'LUN') { applyLunAssignments($driver, $target, undef, $$targets{$target}->{$item}); } else { @@ -1826,8 +1885,7 @@ applyLunAssignments($driver, $target, $group, $$groups{$group}->{$item}); } elsif ($item eq 'INITIATOR') { - applyInitiatorAssignments($driver, $target, $group, - $$groups{$group}->{$item}); + next; } else { $_attributes{$item} = $$groups{$group}->{$item}; } @@ -1868,21 +1926,6 @@ } } -sub applyInitiatorAssignments { - my $driver = shift; - my $target = shift; - my $group = shift; - my $initiators = shift; - - my $c_inits = $CURRENT{'assign'}->{$driver}->{$target}->{'GROUP'}->{$group}->{'INITIATORS'}; - - foreach my $initiator (sort keys %{$initiators}) { - if (!groupHasInitiator($c_inits, $initiator)) { - addInitiator($driver, $target, $group, $initiator); - } - } -} - sub filterCreateAttributes { my $creates = shift; my $attrs = shift; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-09-03 22:06:42
|
Revision: 2046 http://scst.svn.sourceforge.net/scst/?rev=2046&view=rev Author: mgandalf Date: 2010-09-03 22:06:36 +0000 (Fri, 03 Sep 2010) Log Message: ----------- - Refuse to add an initiator to more than one group with -add_init. - Error out if a given initiator is found in more than one group in running configuration. Using -force will override. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-09-03 21:49:22 UTC (rev 2045) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-09-03 22:06:36 UTC (rev 2046) @@ -590,7 +590,8 @@ $SCST = new SCST::SCST($_DEBUG_); - readWorkingConfig(); + my $rc = readWorkingConfig($force); + exit $rc if ($rc); my $all_good; @@ -830,6 +831,8 @@ } sub readWorkingConfig { + my $force = shift; + print "\nCollecting current configuration: "; %CURRENT = (); @@ -878,6 +881,34 @@ } print "done.\n\n"; + + # Perform some basic checks + + # Check for initiators belonging to more than one group + foreach my $driver (keys %{$CURRENT{'assign'}}) { + foreach my $target (keys %{$CURRENT{'assign'}->{$driver}}) { + my $current = $CURRENT{'assign'}->{$driver}->{$target}->{'GROUP'}; + my %seen_init; + + foreach my $group (keys %{$current}) { + my $initiators = $$current{$group}->{'INITIATORS'}; + + foreach my $init (@{$initiators}) { + if (defined($seen_init{$init})) { + if (!$force) { + print "-> FATAL: Initiator '$init' belongs to more than one groups ". + "for driver/target '$driver/target', aborting. Use -force to override.\n"; + return TRUE; + } + } + + $seen_init{$init}++; + } + } + } + } + + return FALSE; } sub writeConfiguration { @@ -1536,7 +1567,8 @@ # Apply config deletions if ($force) { applyConfigAssignments($CONFIG, $force, TRUE); - readWorkingConfig(); + my $rc = readWorkingConfig($force); + exit $rc if ($rc); } # Apply config additions @@ -1608,7 +1640,8 @@ print "\t-> Closing and re-opening with new attributes.\n"; closeDevice($handler, $device, $deletions); openDevice($handler, $device, $create_attrs); - readWorkingConfig(); + my $rc = readWorkingConfig($deletions); + exit $rc if ($rc); } else { print "\t-> Use -force to re-open device with new attributes. ". "NOTE: This will disrupt all initiators using this device.\n"; @@ -3459,6 +3492,20 @@ my $group = shift; my $initiator = shift; + my $current = $CURRENT{'assign'}->{$driver}->{$target}->{'GROUP'}; + + foreach my $group (keys %{$current}) { + my $initiators = $$current{$group}->{'INITIATORS'}; + + foreach my $init (@{$initiators}) { + if ($init eq $initiator) { + print "-> Initiator '$initiator' already belongs to group '$group' ". + "for driver/target '$driver/target', ignoring.\n"; + return; + } + } + } + print "-> Adding new initiator '$initiator' to driver/target/group ". "'$driver/$target/$group': "; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-09-22 17:30:58
|
Revision: 2159 http://scst.svn.sourceforge.net/scst/?rev=2159&view=rev Author: mgandalf Date: 2010-09-22 17:30:52 +0000 (Wed, 22 Sep 2010) Log Message: ----------- - Fix attributes with no values. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-09-22 17:28:10 UTC (rev 2158) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-09-22 17:30:52 UTC (rev 2159) @@ -4184,10 +4184,11 @@ my %attributes; foreach my $attr (keys %{$config}) { - if ((keys %{$$config{$attr}}) > 1) { + if (!scalar keys %{$$config{$attr}}) { + $attributes{$attr} = ''; + } elsif ((keys %{$$config{$attr}}) > 1) { foreach my $value (keys %{$$config{$attr}}) { - push @{$attributes{$attr}}, $value if (defined($value) && - ($value ne '')); + push @{$attributes{$attr}}, $value; } } else { foreach my $value (keys %{$$config{$attr}}) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-09-23 18:40:35
|
Revision: 2217 http://scst.svn.sourceforge.net/scst/?rev=2217&view=rev Author: mgandalf Date: 2010-09-23 18:40:28 +0000 (Thu, 23 Sep 2010) Log Message: ----------- - Add some more output as to what scstadmin is doing as well as better format it. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-09-23 18:10:57 UTC (rev 2216) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-09-23 18:40:28 UTC (rev 2217) @@ -677,142 +677,201 @@ }; defined($setScstAttr) && do { last if (prompt()); - setScstAttributes($attributes, TRUE); + print "\n-> Making requested changes.\n"; + my $changes = setScstAttributes($attributes, TRUE); + print "\t-> Done, $changes change(s) made.\n"; last SWITCH; }; defined($setHandlerAttr) && do { last if (prompt()); - setHandlerAttributes($setHandlerAttr, $attributes, TRUE); + print "\n-> Making requested changes.\n"; + my $changes = setHandlerAttributes($setHandlerAttr, $attributes, TRUE); + print "\t-> Done, $changes change(s) made.\n"; last SWITCH; }; defined($setDeviceAttr) && do { last if (prompt()); - setDeviceAttributes($setDeviceAttr, $attributes, TRUE); + print "\n-> Making requested changes.\n"; + my $changes = setDeviceAttributes($setDeviceAttr, $attributes, TRUE); + print "\t-> Done, $changes change(s) made.\n"; last SWITCH; }; defined($setDriverAttr) && do { last if (prompt()); - $rc = setDriverAttributes($setDriverAttr, $attributes, FALSE); + print "\n-> Making requested changes.\n"; + my $changes = setDriverAttributes($setDriverAttr, $attributes, FALSE); + print "\t-> Done, $changes change(s) made.\n"; last SWITCH; }; defined($setTargetAttr) && do { last if (prompt()); - $rc = setTargetAttributes($driver, $setTargetAttr, $attributes, FALSE); + print "\n-> Making requested changes.\n"; + my $changes = setTargetAttributes($driver, $setTargetAttr, $attributes, FALSE); + print "\t-> Done, $changes change(s) made.\n"; last SWITCH; }; defined($setGroupAttr) && do { last if (prompt()); - setGroupAttributes(undef, $driver, $target, $setGroupAttr, $attributes, TRUE); + print "\n-> Making requested changes.\n"; + my $changes = setGroupAttributes(undef, $driver, $target, $setGroupAttr, $attributes, TRUE); + print "\t-> Done, $changes change(s) made.\n"; last SWITCH; }; defined($setLunAttr) && do { last if (prompt()); - setLunAttributes($driver, $target, $setLunAttr, $attributes, $group, TRUE); + print "\n-> Making requested changes.\n"; + my $changes = setLunAttributes($driver, $target, $setLunAttr, $attributes, $group, TRUE); + print "\t-> Done, $changes change(s) made.\n"; last SWITCH; }; defined($setInitiatorAttr) && do { last if (prompt()); - setInitiatorAttributes($driver, $target, $group, $setInitiatorAttr, $attributes, TRUE); + print "\n-> Making requested changes.\n"; + my $changes = setInitiatorAttributes($driver, $target, $group, $setInitiatorAttr, $attributes, TRUE); + print "\t-> Done, $changes change(s) made.\n"; last SWITCH; }; defined($addDriverAttr) && do { + print "\n-> Making requested changes.\n"; $rc = addDriverDynamicAttributes($addDriverAttr, $attributes); last SWITCH; }; defined($addTargetAttr) && do { + print "\n-> Making requested changes.\n"; $rc = addTargetDynamicAttributes($driver, $addTargetAttr, $attributes); + print "\t-> Done.\n"; last SWITCH; }; defined($remDriverAttr) && do { last if (prompt()); + print "\n-> Making requested changes.\n"; $rc = removeDriverDynamicAttributes($remDriverAttr, $attributes); + print "\t-> Done.\n"; last SWITCH; }; defined($remTargetAttr) && do { last if (prompt()); + print "\n-> Making requested changes.\n"; $rc = removeTargetDynamicAttributes($driver, $remTargetAttr, $attributes); + print "\t-> Done.\n"; last SWITCH; }; defined($openDev) && do { + print "\n-> Making requested changes.\n"; $rc = openDevice($handler, $openDev, $attributes); + print "\t-> Done.\n"; last SWITCH; }; defined($closeDev) && do { last if (prompt()); + print "\n-> Making requested changes.\n"; $rc = closeDevice($handler, $closeDev, $force); + print "\t-> Done.\n"; last SWITCH; }; defined($resyncDev) && do { + print "\n-> Making requested changes.\n"; $rc = resyncDevice($resyncDev); + print "\t-> Done.\n"; last SWITCH; }; defined($addTarget) && do { + print "\n-> Making requested changes.\n"; $rc = addVirtualTarget($driver, $addTarget, $attributes); + print "\t-> Done.\n"; last SWITCH; }; defined($removeTarget) && do { last if (prompt()); + print "\n-> Making requested changes.\n"; $rc = removeVirtualTarget($driver, $removeTarget); + print "\t-> Done.\n"; last SWITCH; }; defined($addGroup) && do { + print "\n-> Making requested changes.\n"; $rc = addGroup($driver, $target, $addGroup); + print "\t-> Done.\n"; last SWITCH; }; defined($removeGroup) && do { last if (prompt()); + print "\n-> Making requested changes.\n"; $rc = removeGroup($driver, $target, $removeGroup, $force); + print "\t-> Done.\n"; last SWITCH; }; defined($addInitiator) && do { + print "\n-> Making requested changes.\n"; $rc = addInitiator($driver, $target, $group, $addInitiator); + print "\t-> Done.\n"; last SWITCH; }; defined($removeInitiator) && do { last if (prompt()); + print "\n-> Making requested changes.\n"; $rc = removeInitiator($driver, $target, $group, $removeInitiator); + print "\t-> Done.\n"; last SWITCH; }; defined($moveInitiator) && do { last if (prompt()); + print "\n-> Making requested changes.\n"; $rc = moveInitiator($driver, $target, $group, $moveInitiator, $to); + print "\t-> Done.\n"; last SWITCH; }; defined($clearInitiators) && do { last if (prompt()); + print "\n-> Making requested changes.\n"; $rc = clearInitiators($driver, $target, $group); + print "\t-> Done.\n"; last SWITCH; }; defined($addLun) && do { + print "\n-> Making requested changes.\n"; $rc = addLun($driver, $target, $device, $addLun, $attributes, $group); + print "\t-> Done.\n"; last SWITCH; }; defined($removeLun) && do { last if (prompt()); + print "\n-> Making requested changes.\n"; $rc = removeLun($driver, $target, $removeLun, $group); + print "\t-> Done.\n"; last SWITCH; }; defined($replaceLun) && do { last if (prompt()); + print "\n-> Making requested changes.\n"; $rc = replaceLun($driver, $target, $group, $replaceLun, $device, $attributes); + print "\t-> Done.\n"; last SWITCH; }; defined($clearLuns) && do { last if (prompt()); + print "\n-> Making requested changes.\n"; $rc = clearLuns($driver, $target, $group); + print "\t-> Done.\n"; last SWITCH; }; defined($enableTarget) && do { + print "\n-> Making requested changes.\n"; $rc = enableTarget($driver, $enableTarget); + print "\t-> Done.\n"; last SWITCH; }; defined($disableTarget) && do { last if (prompt()); + print "\n-> Making requested changes.\n"; $rc = disableTarget($driver, $disableTarget); + print "\t-> Done.\n"; last SWITCH; }; defined($issueLip) && do { + print "\n-> Making requested changes.\n"; $rc = issueLip($driver, $issueLip); + print "\t-> Done.\n"; last SWITCH; }; @@ -896,7 +955,7 @@ foreach my $init (@{$initiators}) { if (defined($seen_init{$init})) { if (!$force) { - print "-> FATAL: Initiator '$init' belongs to more than one groups ". + print "\t-> FATAL: Initiator '$init' belongs to more than one groups ". "for driver/target '$driver/target', aborting. Use -force to override.\n"; return TRUE; } @@ -1561,19 +1620,22 @@ sub applyConfiguration { my $force = shift; + my $changes = 0; readConfigFile() if (!$CONFIG); + print "-> Applying configuration.\n"; + # Apply config deletions if ($force) { - applyConfigAssignments($CONFIG, $force, TRUE); + $changes += applyConfigAssignments($CONFIG, $force, TRUE); my $rc = readWorkingConfig($force); exit $rc if ($rc); } # Apply config additions - applyConfigDevices($CONFIG, $force); - applyConfigAssignments($CONFIG, $force); + $changes += applyConfigDevices($CONFIG, $force); + $changes += applyConfigAssignments($CONFIG, $force); # And SCST attributes.. my %_attributes; @@ -1585,12 +1647,15 @@ my $attributes = configToAttr(\%_attributes); - setScstAttributes($attributes); + $changes += setScstAttributes($attributes); + + print "\t-> Done, $changes change(s) made.\n"; } sub applyConfigDevices { my $config = shift; my $deletions = shift; + my $changes = 0; my $handlers = $CURRENT{'handler'}; @@ -1601,8 +1666,9 @@ if ($deletions) { closeDevice($handler, $device, $deletions); + $changes++; } else { - print "-> Device '$device' is not in configuration. Use -force to close it.\n"; + print "\t-> Device '$device' is not in configuration. Use -force to close it.\n"; } } } @@ -1634,29 +1700,34 @@ filterCreateAttributes($possible, $old_create_attrs, FALSE); if (compareToKeyAttribute($create_attrs, $old_create_attrs)) { - print "-> Device '$device' is configured differently.\n"; + print "\t-> Device '$device' is configured differently.\n"; if ($deletions) { - print "\t-> Closing and re-opening with new attributes.\n"; + print "\t -> Closing and re-opening with new attributes.\n"; closeDevice($handler, $device, $deletions); openDevice($handler, $device, $create_attrs); + $changes += 2; my $rc = readWorkingConfig($deletions); exit $rc if ($rc); } else { - print "\t-> Use -force to re-open device with new attributes. ". + print "\t -> Use -force to re-open device with new attributes. ". "NOTE: This will disrupt all initiators using this device.\n"; } } - setDeviceAttributes($device, $attributes, FALSE) - if (scalar keys %{$attributes}); + if (scalar keys %{$attributes}) { + $changes += setDeviceAttributes($device, $attributes, FALSE); + } + next; } openDevice($handler, $device, $create_attrs); + $changes++; - setDeviceAttributes($device, $attributes, $deletions) - if (scalar keys %{$attributes}); + if (scalar keys %{$attributes}) { + $changes += setDeviceAttributes($device, $attributes, $deletions); + } } } @@ -1667,15 +1738,21 @@ } my $attributes = configToAttr(\%_attributes); - setHandlerAttributes($handler, $attributes, $deletions) if (scalar keys %{$attributes}); + if (scalar keys %{$attributes}) { + $changes += setHandlerAttributes($handler, $attributes, $deletions); + } + } + + return $changes; } sub applyConfigAssignments { my $config = shift; my $deletions = shift; my $only_del = shift; + my $changes = 0; my $assignments = $CURRENT{'assign'}; @@ -1690,8 +1767,9 @@ if (!defined($$def_group{'LUN'}->{$lun}->{$device})) { if ($deletions) { removeLun($driver, $target, $lun); + $changes++; } else { - print "-> Device '$device' at LUN '$lun' is not in configuration ". + print "\t-> Device '$device' at LUN '$lun' is not in configuration ". "for driver/target '$driver/$target'. ". "Use -force to remove it.\n"; } @@ -1705,15 +1783,16 @@ filterCreateAttributes($possible, $c_attrs, FALSE); if (compareToKeyAttribute($c_attrs, $o_attrs)) { - print "-> Assigned device '$device' in target '$target' at ". + print "\t-> Assigned device '$device' in target '$target' at ". "LUN '$lun' is configured differently.\n"; if ($deletions) { - print "\t-> Re-assigning device with new attributes.\n"; + print "\t -> Re-assigning device with new attributes.\n"; removeLun($driver, $target, $lun); addLun($driver, $target, $device, $lun, $c_attrs); + $changes += 2; } else { - print "\t-> Use -force to re-assign device with new attributes. ". + print "\t -> Use -force to re-assign device with new attributes. ". "NOTE: This will disrupt all initiators using this device.\n"; } } @@ -1731,8 +1810,9 @@ if (!defined($$def_group{'LUN'}->{$lun}->{$device})) { if ($deletions) { removeLun($driver, $target, $lun, $group); + $changes++; } else { - print "-> Device '$device' at LUN '$lun' is not in configuration ". + print "\t-> Device '$device' at LUN '$lun' is not in configuration ". "for driver/target/group '$driver/$target/$group'. ". "Use -force to remove it.\n"; } @@ -1746,15 +1826,16 @@ filterCreateAttributes($possible, $c_attrs, FALSE); if (compareToKeyAttribute($c_attrs, $o_attrs)) { - print "-> Assigned device '$device' in group '$group' ". + print "\t-> Assigned device '$device' in group '$group' ". "at LUN '$lun' is configured differently.\n"; if ($deletions) { - print "\t-> Re-assigning device with new attributes.\n"; + print "\t -> Re-assigning device with new attributes.\n"; removeLun($driver, $target, $lun, $group); addLun($driver, $target, $device, $lun, $c_attrs, $group); + $changes += 2; } else { - print "\t-> Use -force to re-assign device with new attributes. ". + print "\t -> Use -force to re-assign device with new attributes. ". "NOTE: This will disrupt all initiators using this device.\n"; } } @@ -1764,8 +1845,9 @@ if (!defined($$config{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$target}->{'GROUP'}->{$group})) { if ($deletions) { removeGroup($driver, $target, $group); + $changes++; } else { - print "-> Group '$group' is not in configuration. Use -force to remove.\n"; + print "\t-> Group '$group' is not in configuration. Use -force to remove.\n"; } next; @@ -1786,7 +1868,7 @@ my %_attributes; foreach my $item (keys %{$$assignments{$driver}}) { if ($item eq 'TARGET') { - applyTargetAssignments($driver, $$assignments{$driver}->{$item}, + $changes += applyTargetAssignments($driver, $$assignments{$driver}->{$item}, $deletions); } else { $_attributes{$item} = $$assignments{$driver}->{$item}; @@ -1796,8 +1878,12 @@ my $attributes = configToAttr(\%_attributes); - setDriverAttributes($driver, $attributes, $deletions) if (scalar keys %{$attributes}); + if (scalar keys %{$attributes}) { + $changes += setDriverAttributes($driver, $attributes, $deletions); + } } + + return $changes; } sub applyInitiatorAssignments { @@ -1807,6 +1893,7 @@ my $deletions = shift; my %configured; my %running; + my $changes = 0; my $current = $CURRENT{'assign'}->{$driver}->{$target}->{'GROUP'}; @@ -1832,8 +1919,9 @@ if ($deletions) { removeInitiator($driver, $target, $group, $init); + $changes++; } else { - print "-> Initiator '$init' is not in configuration ". + print "\t-> Initiator '$init' is not in configuration ". "for driver/target/group '$driver/$target/$group'. ". "Use -force to remove it.\n"; } @@ -1841,8 +1929,9 @@ if ($configured{$init} ne $running{$init}) { if ($deletions) { moveInitiator($driver, $target, $running{$init}, $init, $configured{$init}); + $changes++; } else { - print "-> Initiator '$init' is moving to group '". + print "\t-> Initiator '$init' is moving to group '". $configured{$init}."' from group '".$running{$init}."'. ". "Use -force to move it.\n"; } @@ -1853,21 +1942,26 @@ foreach my $init (keys %configured) { if (!defined($running{$init})) { addInitiator($driver, $target, $configured{$init}, $init); + $changes++; } } + + return $changes; } sub applyTargetAssignments { my $driver = shift; my $targets = shift; my $deletions = shift; + my $changes = 0; foreach my $target (keys %{$CURRENT{'assign'}->{$driver}}) { if (!defined($$targets{$target})) { if ($deletions) { removeVirtualTarget($driver, $target); + $changes++; } else { - print "-> Virtual target '$target' for driver '$driver' is not in configuration. ". + print "\t-> Virtual target '$target' for driver '$driver' is not in configuration. ". "Use -force to remove it.\n"; } } @@ -1899,16 +1993,17 @@ my $rc = addVirtualTarget($driver, $target, $attributes); immediateExit($SCST->errorString($rc)) if ($rc); + $changes++ if (!$rc); } } my %_attributes; foreach my $item (keys %{$$targets{$target}}) { if ($item eq 'GROUP') { - applyGroupAssignments($driver, $target, $$targets{$target}->{$item}); - applyInitiatorAssignments($driver, $target, $$targets{$target}->{$item}, $deletions); + $changes += applyGroupAssignments($driver, $target, $$targets{$target}->{$item}); + $changes += applyInitiatorAssignments($driver, $target, $$targets{$target}->{$item}, $deletions); } elsif ($item eq 'LUN') { - applyLunAssignments($driver, $target, undef, $$targets{$target}->{$item}); + $changes += applyLunAssignments($driver, $target, undef, $$targets{$target}->{$item}); } else { $_attributes{$item} = $$targets{$target}->{$item}; } @@ -1916,25 +2011,29 @@ my $attributes = configToAttr(\%_attributes); filterCreateAttributes($possible, $attributes, TRUE); - setTargetAttributes($driver, $target, $attributes, $deletions); + $changes += setTargetAttributes($driver, $target, $attributes, $deletions); } + + return $changes; } sub applyGroupAssignments { my $driver = shift; my $target = shift; my $groups = shift; + my $changes = 0; foreach my $group (sort keys %{$groups}) { if (!defined($CURRENT{'assign'}->{$driver}->{$target}->{'GROUP'}->{$group})) { addGroup($driver, $target, $group); + $changes++; } my %_attributes; foreach my $item (keys %{$$groups{$group}}) { if ($item eq 'LUN') { - applyLunAssignments($driver, $target, $group, + $changes += applyLunAssignments($driver, $target, $group, $$groups{$group}->{$item}); } elsif ($item eq 'INITIATOR') { next; @@ -1945,8 +2044,10 @@ my $attributes = configToAttr(\%_attributes); - setGroupAttributes(undef, $driver, $target, $group, $attributes); + $changes += setGroupAttributes(undef, $driver, $target, $group, $attributes); } + + return $changes; } sub applyLunAssignments { @@ -1955,6 +2056,7 @@ my $group = shift; my $luns = shift; my $c_luns; + my $changes = 0; if ($group) { $c_luns = $CURRENT{'assign'}->{$driver}->{$target}->{'GROUP'}->{$group}->{'LUN'}; @@ -1973,9 +2075,12 @@ foreach my $device (sort keys %{$$luns{$lun}}) { my $attributes = configToAttr($$luns{$lun}->{$device}); addLun($driver, $target, $device, $lun, $attributes, $group); + $changes++; } } } + + return $changes; } sub filterCreateAttributes { @@ -2020,6 +2125,8 @@ my $assignments = $CURRENT{'assign'}; + print "-> Clearing running configuration.\n"; + foreach my $driver (sort keys %{$assignments}) { foreach my $target (sort keys %{$$assignments{$driver}}) { foreach my $group (sort keys %{$$assignments{$driver}->{$target}->{'GROUP'}}) { @@ -2050,6 +2157,8 @@ # Todo - check return code # TODO: should we disable all target drivers as well? + + print "\t-> Configuration cleared.\n"; } sub addVirtualTarget { @@ -2057,7 +2166,7 @@ my $target = shift; my $attributes = shift; - print "-> Creating target '$target' for driver '$driver': "; + print "\t-> Creating target '$target' for driver '$driver': "; my $rc = $SCST->addVirtualTarget($driver, $target, $attributes); print "done.\n"; @@ -2068,7 +2177,7 @@ my $driver = shift; my $target = shift; - print "-> Removing virtual target '$target' from driver '$driver': "; + print "\t-> Removing virtual target '$target' from driver '$driver': "; my $rc = $SCST->removeVirtualTarget($driver, $target); print "done.\n"; @@ -2840,7 +2949,7 @@ my $attribute = shift; my $value = shift; - print "-> Setting SCST attribute '$attribute' to value '$value': "; + print "\t-> Setting SCST attribute '$attribute' to value '$value': "; my $rc = $SCST->setScstAttribute($attribute, $value); print "done.\n"; @@ -2851,7 +2960,7 @@ my $attributes = shift; my $showset = shift; - my $error = "-> WARNING: SCST lacks the settable attribute '%s', ignoring.\n\n"; + my $error = "\t-> WARNING: SCST lacks the settable attribute '%s', ignoring.\n\n"; my $_attributes = $SCST->scstAttributes(); return if issueWarning($SCST->errorString()); @@ -2868,7 +2977,7 @@ my $attribute = shift; my $value = shift; - print "-> Setting device attribute '$attribute' to value '$value' for device '$device': "; + print "\t-> Setting device attribute '$attribute' to value '$value' for device '$device': "; my $rc = $SCST->setDeviceAttribute($device, $attribute, $value); print "done.\n"; @@ -2880,7 +2989,7 @@ my $attributes = shift; my $showset = shift; - my $error = "-> WARNING: Device '$device' lacks the settable ". + my $error = "\t-> WARNING: Device '$device' lacks the settable ". "attribute '%s', ignoring.\n\n"; my $_attributes = $SCST->deviceAttributes($device); @@ -2898,7 +3007,7 @@ my $attribute = shift; my $value = shift; - print "-> Setting handler attribute '$attribute' to value '$value' for handler '$handler': "; + print "\t-> Setting handler attribute '$attribute' to value '$value' for handler '$handler': "; my $rc = $SCST->setHandlerAttribute($handler, $attribute, $value); print "done.\n"; @@ -2910,7 +3019,7 @@ my $attributes = shift; my $showset = shift; - my $error = "-> WARNING: Handler '$handler' lacks the settable ". + my $error = "\t-> WARNING: Handler '$handler' lacks the settable ". "attribute '%s', ignoring.\n\n"; my $_attributes = $SCST->handlerAttributes($handler); @@ -2928,7 +3037,7 @@ my $attribute = shift; my $value = shift; - print "-> Setting group attribute '$attribute' to value '$value' for group '$group': "; + print "\t-> Setting group attribute '$attribute' to value '$value' for group '$group': "; my $rc = $SCST->setGroupAttribute($driver, $target, $group, $attribute, $value); print "done.\n"; @@ -2943,7 +3052,7 @@ my $attributes = shift; my $showset = shift; - my $error = "-> WARNING: Driver/target/group '$driver/$target/$group' lacks the settable ". + my $error = "\t-> WARNING: Driver/target/group '$driver/$target/$group' lacks the settable ". "attribute '%s', ignoring.\n\n"; my $_attributes = $SCST->groupAttributes($driver, $target, $group); @@ -2962,10 +3071,10 @@ my $value = shift; if ($group) { - print "-> Setting LUN attribute '$attribute' to value '$value' for ". + print "\t-> Setting LUN attribute '$attribute' to value '$value' for ". "driver/target/group/LUN '$driver/$target/$group/$lun': "; } else { - print "-> Setting LUN attribute '$attribute' to value '$value' for ". + print "\t-> Setting LUN attribute '$attribute' to value '$value' for ". "driver/target/LUN '$driver/$target/$lun': "; } @@ -2985,10 +3094,10 @@ my $error; if ($group) { - $error = "-> WARNING: Driver/target/group/LUN '$driver/$target/$group/$lun' ". + $error = "\t-> WARNING: Driver/target/group/LUN '$driver/$target/$group/$lun' ". "lacks the settable attribute '%s', ignoring.\n\n"; } else { - $error = "-> WARNING: Driver/target/LUN '$driver/$target/$lun' lacks the settable ". + $error = "\t-> WARNING: Driver/target/LUN '$driver/$target/$lun' lacks the settable ". "attribute '%s', ignoring.\n\n"; } @@ -3008,7 +3117,7 @@ my $attribute = shift; my $value = shift; - print "-> Setting initiator attribute '$attribute' to value '$value' for ". + print "\t-> Setting initiator attribute '$attribute' to value '$value' for ". "driver/target/group/initiator '$driver/$target/$group/initiator': "; my $rc = $SCST->setInitiatorAttribute($driver, $target, $group, $initiator, $attribute, $value); @@ -3036,7 +3145,7 @@ return; } - my $error = "-> WARNING: Driver/target/group/initiator '$driver/$target/$group/$initiator' ". + my $error = "\t-> WARNING: Driver/target/group/initiator '$driver/$target/$group/$initiator' ". "lacks the settable attribute '%s', ignoring.\n\n"; return setAttributes($driver, $target, $group, $initiator, $attributes, @@ -3055,6 +3164,7 @@ my $callback = shift; my $showset = shift; my %toset; + my $changes = 0; # build caches for easier matching foreach my $attribute (keys %{$attributes}) { @@ -3078,7 +3188,7 @@ # already set, move on if (defined($$existing{$attribute}->{$value})) { - print "-> Attribute '$attribute' already set to value '$value', ignoring.\n" + print "\t-> Attribute '$attribute' already set to value '$value', ignoring.\n" if ($showset); next; } @@ -3086,8 +3196,11 @@ # Set the existing attribute my $rc = $callback->($level1, $level2, $level3, $level4, $attribute, $value); issueWarning($SCST->errorString($rc)) if ($rc); + $changes++ if (!$rc); } } + + return $changes; } sub setDriverAttribute { @@ -3097,9 +3210,9 @@ if ($attribute eq 'enabled') { my $onoff = $value ? 'Enabling' : 'Disabling'; - print "-> $onoff driver '$driver': "; + print "\t-> $onoff driver '$driver': "; } else { - print "-> Setting driver attribute '$attribute' to value '$value' for driver '$driver': "; + print "\t-> Setting driver attribute '$attribute' to value '$value' for driver '$driver': "; } my $rc = $SCST->setDriverAttribute($driver, $attribute, $value); @@ -3113,6 +3226,7 @@ my $attributes = shift; my $deletions = shift; my %toset; + my $changes = 0; my $driverCap = $SCST->driverIsVirtualCapable($driver); my $_attributes = $SCST->driverAttributes($driver); @@ -3138,9 +3252,10 @@ if (!defined($$existing{$attribute}) && $driverCap && !$SCST->checkDriverDynamicAttributes($driver, $attribute)) { addDriverDynamicAttribute($driver, $attribute, $value); + $changes++; next; } elsif (!defined($$existing{$attribute})) { - print "-> WARNING: Driver '$driver' lacks the settable attribute ". + print "\t-> WARNING: Driver '$driver' lacks the settable attribute ". "'$attribute', ignoring.\n\n"; next; } @@ -3154,6 +3269,7 @@ # Set the existing attribute if ($driverCap && !$SCST->checkDriverDynamicAttributes($driver, $attribute)) { addDriverDynamicAttribute($driver, $attribute, $value); + $changes++; } else { my $rc = setDriverAttribute($driver, $attribute, $value); issueWarning($SCST->errorString($rc)) if ($rc); @@ -3170,13 +3286,16 @@ if (!$$existing{$attribute}->{$value}) { if ($deletions) { removeDriverDynamicAttribute($driver, $attribute, $value); + $changes++; } else { - print "-> Driver dynamic attribute '$attribute' with value '$value' ". + print "\t-> Driver dynamic attribute '$attribute' with value '$value' ". "is not in configuration. Use -force to remove it.\n"; } } } } + + return $changes; } sub addDriverDynamicAttributes { @@ -3192,7 +3311,7 @@ foreach my $attribute (keys %{$attributes}) { if (defined($$existing{$attribute}->{$$attributes{$attribute}})) { my $value = $$attributes{$attribute}; - print "-> Attribute/value '$attribute/$value' already exists for driver '$driver'.\n"; + print "\t-> Attribute/value '$attribute/$value' already exists for driver '$driver'.\n"; next; } @@ -3205,7 +3324,7 @@ my $attribute = shift; my $value = shift; - print "-> Attempting to add driver attribute '$attribute' with value '$value' for driver '$driver': "; + print "\t-> Adding driver attribute '$attribute' with value '$value' for driver '$driver': "; my $rc = $SCST->addDriverDynamicAttribute($driver, $attribute, $value); print "done.\n"; @@ -3225,7 +3344,7 @@ foreach my $attribute (keys %{$attributes}) { if (!defined($$existing{$attribute}->{$$attributes{$attribute}})) { my $value = $$attributes{$attribute}; - print "-> Attribute/value '$attribute/$value' doesn't exist for driver '$driver'.\n"; + print "\t-> Attribute/value '$attribute/$value' doesn't exist for driver '$driver'.\n"; next; } @@ -3240,7 +3359,7 @@ return if (!$SCST->driverIsVirtualCapable($driver)); - print "-> Removing dynamic attribute '$attribute' with value '$value' for driver '$driver': "; + print "\t-> Removing dynamic attribute '$attribute' with value '$value' for driver '$driver': "; my $rc = $SCST->removeDriverDynamicAttribute($driver, $attribute, $value); print "done.\n"; @@ -3255,9 +3374,9 @@ if ($attribute eq 'enabled') { my $onoff = $value ? 'Enabling' : 'Disabling'; - print "-> $onoff driver/target '$driver/$target': "; + print "\t-> $onoff driver/target '$driver/$target': "; } else { - print "-> Setting target attribute '$attribute' to value '$value' for ". + print "\t-> Setting target attribute '$attribute' to value '$value' for ". "driver/target '$driver/$target': "; } @@ -3273,6 +3392,7 @@ my $attributes = shift; my $deletions = shift; my %toset; + my $changes = 0; my $driverCap = $SCST->driverIsVirtualCapable($driver); my $_attributes = $SCST->targetAttributes($driver, $target); @@ -3298,9 +3418,10 @@ if (!defined($$existing{$attribute}) && $driverCap && !$SCST->checkTargetDynamicAttributes($driver, $attribute)) { addTargetDynamicAttribute($driver, $target, $attribute, $value); + $changes++; next; } elsif (!defined($$existing{$attribute})) { - print "-> WARNING: Driver/target '$driver/$target' lacks the settable attribute ". + print "\t-> WARNING: Driver/target '$driver/$target' lacks the settable attribute ". "'$attribute', ignoring.\n\n"; next; } @@ -3314,9 +3435,11 @@ # Set the existing attribute if ($driverCap && !$SCST->checkTargetDynamicAttributes($driver, $attribute)) { addTargetDynamicAttribute($driver, $target, $attribute, $value); + $changes++; } else { my $rc = setTargetAttribute($driver, $target, $attribute, $value); issueWarning($SCST->errorString($rc)) if ($rc); + $changes++ if (!$rc); } $$existing{$attribute}->{$value} = TRUE; @@ -3330,13 +3453,16 @@ if (!$$existing{$attribute}->{$value}) { if ($deletions) { removeTargetDynamicAttribute($driver, $target, $attribute, $value); + $changes++; } else { - print "-> Target dynamic attribute '$attribute' with value '$value' ". + print "\t-> Target dynamic attribute '$attribute' with value '$value' ". "is not in configuration. Use -force to remove it.\n"; } } } } + + return $changes; } sub addTargetDynamicAttributes { @@ -3353,7 +3479,7 @@ foreach my $attribute (keys %{$attributes}) { if (defined($$existing{$attribute}->{$$attributes{$attribute}})) { my $value = $$attributes{$attribute}; - print "-> Attribute/value '$attribute/$value' already exists for driver/target ". + print "\t-> Attribute/value '$attribute/$value' already exists for driver/target ". "'$driver/$target'.\n"; next; } @@ -3368,7 +3494,7 @@ my $attribute = shift; my $value = shift; - print "-> Attempting to add driver attribute '$attribute' with value '$value' ". + print "\t-> Adding driver attribute '$attribute' with value '$value' ". "for driver/target '$driver/$target': "; my $rc = $SCST->addTargetDynamicAttribute($driver, $target, $attribute, $value); print "done.\n"; @@ -3390,7 +3516,7 @@ foreach my $attribute (keys %{$attributes}) { if (!defined($$existing{$attribute}->{$$attributes{$attribute}})) { my $value = $$attributes{$attribute}; - print "-> Attribute/value '$attribute/$value' doesn't exist for driver/target ". + print "\t-> Attribute/value '$attribute/$value' doesn't exist for driver/target ". "'$driver/$target'.\n"; next; } @@ -3407,7 +3533,7 @@ return if (!$SCST->driverIsVirtualCapable($driver)); - print "-> Removing dynamic attribute '$attribute' with value '$value' for driver/target '$driver/$target': "; + print "\t-> Removing dynamic attribute '$attribute' with value '$value' for driver/target '$driver/$target': "; my $rc = $SCST->removeTargetDynamicAttribute($driver, $target, $attribute, $value); print "done.\n"; @@ -3421,7 +3547,7 @@ my $device = shift; my $attributes = shift; - print "-> Opening device '$device' using handler '$handler': "; + print "\t-> Opening device '$device' using handler '$handler': "; my $rc = $SCST->openDevice($handler, $device, $attributes); @@ -3445,7 +3571,7 @@ } } - print "-> Closing device '$device' using handler '$handler': "; + print "\t-> Closing device '$device' using handler '$handler': "; my $rc = $SCST->closeDevice($handler, $device); @@ -3468,7 +3594,7 @@ my $target = shift; my $group = shift; - print "-> Adding new group '$group' to driver/target '$driver/$target': "; + print "\t-> Adding new group '$group' to driver/target '$driver/$target': "; my $rc = $SCST->addGroup($driver, $target, $group); @@ -3493,7 +3619,7 @@ } } - print "-> Removing group '$group' from driver/target '$driver/$target': "; + print "\t-> Removing group '$group' from driver/target '$driver/$target': "; my $rc = $SCST->removeGroup($driver, $target, $group); @@ -3517,14 +3643,14 @@ foreach my $init (@{$initiators}) { if ($init eq $initiator) { - print "-> Initiator '$initiator' already belongs to group '$group' ". + print "\t-> Initiator '$initiator' already belongs to group '$group' ". "for driver/target '$driver/target', ignoring.\n"; return; } } } - print "-> Adding new initiator '$initiator' to driver/target/group ". + print "\t-> Adding new initiator '$initiator' to driver/target/group ". "'$driver/$target/$group': "; my $rc = $SCST->addInitiator($driver, $target, $group, $initiator); @@ -3540,7 +3666,7 @@ my $group = shift; my $initiator = shift; - print "-> Removing initiator '$initiator' from driver/target/group ". + print "\t-> Removing initiator '$initiator' from driver/target/group ". "'$driver/$target/$group': "; my $rc = $SCST->removeInitiator($driver, $target, $group, $initiator); @@ -3557,7 +3683,7 @@ my $initiator = shift; my $to = shift; - print "-> Moving initiator '$initiator' from group '$group' to group '$to': "; + print "\t-> Moving initiator '$initiator' from group '$group' to group '$to': "; my $rc = $SCST->moveInitiator($driver, $target, $group, $to, $initiator); @@ -3571,7 +3697,7 @@ my $target = shift; my $group = shift; - print "-> Removing all initiators driver/target/group '$driver/$target/$group': "; + print "\t-> Removing all initiators driver/target/group '$driver/$target/$group': "; my $rc = $SCST->clearInitiators($driver, $target, $group); @@ -3591,10 +3717,10 @@ my $group = shift; if ($group) { - print "-> Adding device '$device' at LUN $lun to driver/target/group ". + print "\t-> Adding device '$device' at LUN $lun to driver/target/group ". "'$driver/$target/$group': "; } else { - print "-> Adding device '$device' at LUN $lun to driver/target ". + print "\t-> Adding device '$device' at LUN $lun to driver/target ". "'$driver/$target': "; } @@ -3612,10 +3738,10 @@ my $group = shift; if ($group) { - print "-> Removing LUN $lun from driver/target/group ". + print "\t-> Removing LUN $lun from driver/target/group ". "'$driver/$target/$group': "; } else { - print "-> Removing LUN $lun from driver/target ". + print "\t-> Removing LUN $lun from driver/target ". "'$driver/$target': "; } @@ -3634,7 +3760,7 @@ my $device = shift; my $attributes = shift; - print "-> Replacing device at LUN $lun with device '$device' ". + print "\t-> Replacing device at LUN $lun with device '$device' ". "in driver/target/group '$driver/$target/$group': "; my $rc = $SCST->replaceLun($driver, $target, $lun, $device, $attributes, $group); @@ -3650,9 +3776,9 @@ my $group = shift; if ($group) { - print "-> Removing all LUNs from driver/target/group '$driver/$target/$group': "; + print "\t-> Removing all LUNs from driver/target/group '$driver/$target/$group': "; } else { - print "-> Removing all LUNs from driver/target '$driver/$target': "; + print "\t-> Removing all LUNs from driver/target '$driver/$target': "; } my $rc = $SCST->clearLuns($driver, $target, $group); @@ -3667,7 +3793,7 @@ return if (!$SCST->driverIsVirtualCapable($driver)); - print "-> Removing all dynamic attributes from driver '$driver': "; + print "\t-> Removing all dynamic attributes from driver '$driver': "; my $attributes = $SCST->driverAttributes($driver); my $dynamic = $SCST->driverDynamicAttributes($driver); @@ -3694,7 +3820,7 @@ return if (!$SCST->driverIsVirtualCapable($driver)); - print "-> Removing all dynamic attributes from driver/target '$driver/$target': "; + print "\t-> Removing all dynamic attributes from driver/target '$driver/$target': "; my $attributes = $SCST->targetAttributes($driver, $target); my $dynamic = $SCST->targetDynamicAttributes($driver); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-09-23 18:52:29
|
Revision: 2220 http://scst.svn.sourceforge.net/scst/?rev=2220&view=rev Author: mgandalf Date: 2010-09-23 18:52:23 +0000 (Thu, 23 Sep 2010) Log Message: ----------- - Fix some minor error reporting issues. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-09-23 18:42:47 UTC (rev 2219) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-09-23 18:52:23 UTC (rev 2220) @@ -1958,7 +1958,8 @@ foreach my $target (keys %{$CURRENT{'assign'}->{$driver}}) { if (!defined($$targets{$target})) { if ($deletions) { - removeVirtualTarget($driver, $target); + my $rc = removeVirtualTarget($driver, $target); + immediateExit($SCST->errorString($rc)) if ($rc); $changes++; } else { print "\t-> Virtual target '$target' for driver '$driver' is not in configuration. ". @@ -2139,7 +2140,7 @@ removeTargetDynamicAttributes($driver, $target); if ($SCST->targetType($driver, $target) == $SCST::SCST::TGT_TYPE_VIRTUAL) { my $rc = removeVirtualTarget($driver, $target); - issueWarning($rc) if ($rc); + issueWarning($SCST->errorString($rc)) if ($rc); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-09-24 15:50:05
|
Revision: 2242 http://scst.svn.sourceforge.net/scst/?rev=2242&view=rev Author: mgandalf Date: 2010-09-24 15:49:59 +0000 (Fri, 24 Sep 2010) Log Message: ----------- - Disable targets on -clear_config. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-09-24 15:37:20 UTC (rev 2241) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-09-24 15:49:59 UTC (rev 2242) @@ -2157,8 +2157,17 @@ } # Todo - check return code - # TODO: should we disable all target drivers as well? + my $drivers = $SCST->drivers(); + + foreach my $driver (@{$drivers}) { + my $targets = $SCST->targets($driver); + + foreach my $target (@{$targets}) { + disableTarget($driver, $target); + } + } + print "\t-> Configuration cleared.\n"; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-09-24 20:13:37
|
Revision: 2255 http://scst.svn.sourceforge.net/scst/?rev=2255&view=rev Author: mgandalf Date: 2010-09-24 20:13:31 +0000 (Fri, 24 Sep 2010) Log Message: ----------- - Disable targets on -clear_config. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-09-24 19:39:40 UTC (rev 2254) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-09-24 20:13:31 UTC (rev 2255) @@ -2166,6 +2166,8 @@ foreach my $target (@{$targets}) { disableTarget($driver, $target); } + + disableDriver($driver); } print "\t-> Configuration cleared.\n"; @@ -3869,6 +3871,28 @@ setTargetAttributes($driver, $target, \%attributes); } +sub enableDriver { + my $driver = shift; + my %attributes = ('enabled', 1); + + my $attrs = $SCST->driverAttributes($driver); +use Data::Dumper; +print Dumper($attrs); + return if (!defined($$attrs{'enabled'})); + + setDriverAttributes($driver, \%attributes); +} + +sub disableDriver { + my $driver = shift; + my %attributes = ('enabled', 0); + + my $attrs = $SCST->driverAttributes($driver); + return if (!defined($$attrs{'enabled'})); + + setDriverAttributes($driver, \%attributes); +} + sub issueLip { my $driver = shift; my $target = shift; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-09-24 20:16:38
|
Revision: 2256 http://scst.svn.sourceforge.net/scst/?rev=2256&view=rev Author: mgandalf Date: 2010-09-24 20:16:32 +0000 (Fri, 24 Sep 2010) Log Message: ----------- - Last commit should have been 'Disable driver on clear_config'. Remove debugging code. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-09-24 20:13:31 UTC (rev 2255) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-09-24 20:16:32 UTC (rev 2256) @@ -3876,8 +3876,6 @@ my %attributes = ('enabled', 1); my $attrs = $SCST->driverAttributes($driver); -use Data::Dumper; -print Dumper($attrs); return if (!defined($$attrs{'enabled'})); setDriverAttributes($driver, \%attributes); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-09-30 16:57:37
|
Revision: 2315 http://scst.svn.sourceforge.net/scst/?rev=2315&view=rev Author: mgandalf Date: 2010-09-30 16:57:31 +0000 (Thu, 30 Sep 2010) Log Message: ----------- - Write group attributes on -write_config. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-09-30 06:11:04 UTC (rev 2314) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-09-30 16:57:31 UTC (rev 2315) @@ -1280,6 +1280,7 @@ } $t_lun_buff .= "\n" if ($t_lun_buff); + $t_lun_buff =~ s/\n+$/\n\n/; my $groups = $CURRENT{'assign'}->{$driver}->{$target}->{'GROUP'}; @@ -1397,7 +1398,7 @@ $init_buff .= "\n"; } - $init_buff =~ s/\n\n$/\n/; + $init_buff =~ s/\n+$/\n\n/; if ($lun_buff || $init_buff) { $group_buff .= " {\n"; @@ -1409,20 +1410,59 @@ if ($init_buff) { $group_buff .= $init_buff; } + } + my $grp_attributes = $SCST->groupAttributes($driver, $target, $group); + + my $g_attribute_buff; + my $g_attribute_buff_nk; + foreach my $attribute (sort keys %{$grp_attributes}) { + next if (defined($$grp_attributes{$attribute}->{'set'})); + + if (!$$grp_attributes{$attribute}->{'static'}) { + if (defined($$grp_attributes{$attribute}->{'keys'})) { + foreach my $key (keys %{$$grp_attributes{$attribute}->{'keys'}}) { + my $value = $$grp_attributes{$attribute}->{'keys'}->{$key}->{'value'}; + $value = "\"$value\"" if ($value =~ / /); + $g_attribute_buff .= "\t\t\t$attribute $value\n" + if (defined($value)); + } + } elsif (($attribute eq 'enabled') || $nonkey) { + my $value = $$grp_attributes{$attribute}->{'value'}; + $value = "\"$value\"" if ($value =~ / /); + if ($attribute eq 'enabled') { + $g_attribute_buff .= "\t\t\t$attribute $value\n" + if (defined($value)); + } else { + $g_attribute_buff_nk .= "\t\t\t$attribute $value\n" + if (defined($value)); + } + } + } + } + + if ($g_attribute_buff_nk) { + $g_attribute_buff .= "\n" if ($g_attribute_buff); + $g_attribute_buff .= "\t\t\t# Non-key attributes\n"; + $g_attribute_buff .= $g_attribute_buff_nk; + } + + if ($g_attribute_buff) { + $group_buff .= $g_attribute_buff . "\n"; + } + + if ($group_buff) { $group_buff =~ s/\n\n$/\n/; $group_buff .= "\t\t}\n\n"; + $group_buff .= "\n"; + $group_buff =~ s/\n+$/\n/; } - $group_buff .= "\n"; - $group_buff =~ s/\n\n$/\n/; + $group_buff .= "\n" if ($group_buff); } - $group_buff .= "\n" if ($group_buff); - $group_buff =~ s/\n+$/\n/; - if ($attribute_buff_nk) { - $attribute_buff .= "\t\t# Non-key attributes\n"; + $attribute_buff .= "\n\t\t# Non-key attributes\n"; $attribute_buff .= $attribute_buff_nk; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-09-30 20:24:27
|
Revision: 2321 http://scst.svn.sourceforge.net/scst/?rev=2321&view=rev Author: mgandalf Date: 2010-09-30 20:24:21 +0000 (Thu, 30 Sep 2010) Log Message: ----------- - Fix some -write_config formatting. Probably more to come. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-09-30 18:51:18 UTC (rev 2320) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-09-30 20:24:21 UTC (rev 2321) @@ -1121,7 +1121,8 @@ } if ($attribute_buff_nk) { - $attribute_buff .= "\n\t\t# Non-key attributes\n"; + $attribute_buff .= "\n" if ($attribute_buff); + $attribute_buff .= "\t\t# Non-key attributes\n"; $attribute_buff .= $attribute_buff_nk; } @@ -1340,7 +1341,7 @@ if ($l_attribute_buff) { $lun_buff .= " {\n"; $lun_buff .= $l_attribute_buff; - $lun_buff .= "\t\t\t}\n\n"; + $lun_buff .= "\t\t\t}\n"; } else { $lun_buff .= "\n"; } @@ -1350,7 +1351,7 @@ my $init_buff; foreach my $init (@{$inits}) { - $init_buff .= "\t\t\tINITIATOR $init"; + $init_buff .= "\n\t\t\tINITIATOR $init"; $attributes = $SCST->initiatorAttributes($driver, $target, $group, $init); @@ -1389,17 +1390,13 @@ if ($i_attribute_buff) { $init_buff .= " {\n"; - $init_buff .= i_$attribute_buff; + $init_buff .= $attribute_buff; $init_buff .= "\t\t\t}\n"; } else { $init_buff .= "\n"; } - - $init_buff .= "\n"; } - $init_buff =~ s/\n+$/\n\n/; - if ($lun_buff || $init_buff) { $group_buff .= " {\n"; @@ -1448,13 +1445,12 @@ } if ($g_attribute_buff) { - $group_buff .= $g_attribute_buff . "\n"; + $group_buff .= "\n"; + $group_buff .= $g_attribute_buff; } if ($group_buff) { - $group_buff =~ s/\n\n$/\n/; $group_buff .= "\t\t}\n\n"; - $group_buff .= "\n"; $group_buff =~ s/\n+$/\n/; } @@ -1462,7 +1458,7 @@ } if ($attribute_buff_nk) { - $attribute_buff .= "\n\t\t# Non-key attributes\n"; + $attribute_buff .= "\t\t# Non-key attributes\n"; $attribute_buff .= $attribute_buff_nk; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-10-14 14:39:19
|
Revision: 2407 http://scst.svn.sourceforge.net/scst/?rev=2407&view=rev Author: mgandalf Date: 2010-10-14 14:39:12 +0000 (Thu, 14 Oct 2010) Log Message: ----------- - Differentiate between hardware and virtual targets within the config file when using mixed type drivers. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-10-14 14:32:00 UTC (rev 2406) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-10-14 14:39:12 UTC (rev 2407) @@ -1198,6 +1198,12 @@ my $attribute_buff; my $attribute_buff_nk; + + if (defined($$attributes{'hw_target'}) && + ($$attributes{'hw_target'}->{'value'} == TRUE)) { + $attribute_buff = "\t\tHW_TARGET\n\n"; + } + foreach my $attr (keys %{$attributes}) { next if ($$attributes{$attr}->{'static'} && !defined($$tgt_attrs{$attr})); @@ -1210,7 +1216,7 @@ $attribute_buff .= "\t\t$attr $value\n" if (defined($value)); } - } elsif (($attr eq 'enabled') || $nonkey) { + } elsif (($attr eq 'hw_target') || ($attr eq 'enabled') || $nonkey) { my $value = $$attributes{$attr}->{'value'}; $value = "\"$value\"" if ($value =~ /\s/); if ($attr eq 'enabled') { @@ -2030,6 +2036,11 @@ } my $attributes = configToAttr(\%_attributes); + + if (defined($$attributes{'HW_TARGET'})) { + immediateExit("Hardware target '$target' for driver '$driver' does not exist."); + } + filterCreateAttributes($possible, $attributes, FALSE); my $rc = addVirtualTarget($driver, $target, $attributes); @@ -3468,6 +3479,7 @@ # add/change foreach my $attribute (keys %toset) { foreach my $value (keys %{$toset{$attribute}}) { + next if ($attribute eq 'HW_TARGET'); if (!defined($$existing{$attribute}) && $driverCap && !$SCST->checkTargetDynamicAttributes($driver, $attribute)) { addTargetDynamicAttribute($driver, $target, $attribute, $value); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-11-14 03:04:51
|
Revision: 2698 http://scst.svn.sourceforge.net/scst/?rev=2698&view=rev Author: mgandalf Date: 2010-11-14 03:04:45 +0000 (Sun, 14 Nov 2010) Log Message: ----------- - Return 0 from applyConfiguration() so scstadmin can exit 0 on success. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-11-13 22:30:40 UTC (rev 2697) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-11-14 03:04:45 UTC (rev 2698) @@ -1694,6 +1694,8 @@ $changes += setScstAttributes($attributes); print "\t-> Done, $changes change(s) made.\n"; + + return 0; } sub applyConfigDevices { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-11-15 15:55:45
|
Revision: 2710 http://scst.svn.sourceforge.net/scst/?rev=2710&view=rev Author: mgandalf Date: 2010-11-15 15:55:39 +0000 (Mon, 15 Nov 2010) Log Message: ----------- - Apply target attributes before assigning LUNs. - Always enable/disable targets and drivers last. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-11-14 16:16:15 UTC (rev 2709) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-11-15 15:55:39 UTC (rev 2710) @@ -1912,14 +1912,18 @@ } my %_attributes; + my %special; foreach my $item (keys %{$$assignments{$driver}}) { if ($item eq 'TARGET') { $changes += applyTargetAssignments($driver, $$assignments{$driver}->{$item}, $deletions); + } elsif ($item ne 'enabled') { + # Enable driver last + $_attributes{$item} = $$assignments{$driver}->{$item}; } else { - $_attributes{$item} = $$assignments{$driver}->{$item}; + $special{$item} = $$assignments{$driver}->{$item}; + } - } my $attributes = configToAttr(\%_attributes); @@ -1927,6 +1931,15 @@ if (scalar keys %{$attributes}) { $changes += setDriverAttributes($driver, $attributes, $deletions); } + + $attributes = configToAttr(\%special); + my $d_attributes = $SCST->driverAttributes($driver); + + if (defined($$d_attributes{'enabled'}) && + ($$d_attributes{'enabled'}->{'value'} != $$attributes{'enabled'})) { + setDriverAttribute($driver, 'enabled', $$attributes{'enabled'}); + $changes++; + } } return $changes; @@ -2051,21 +2064,38 @@ } } + # Apply attribute changes first in case we want a different address method applied my %_attributes; foreach my $item (keys %{$$targets{$target}}) { + # Handle enabled attribute last + next if (($item eq 'GROUP') || ($item eq 'LUN') || ($item eq 'enabled')); + $_attributes{$item} = $$targets{$target}->{$item}; + } + + my $attributes = configToAttr(\%_attributes); + filterCreateAttributes($possible, $attributes, TRUE); + $changes += setTargetAttributes($driver, $target, $attributes, $deletions); + + %_attributes = (); + foreach my $item (keys %{$$targets{$target}}) { if ($item eq 'GROUP') { $changes += applyGroupAssignments($driver, $target, $$targets{$target}->{$item}); $changes += applyInitiatorAssignments($driver, $target, $$targets{$target}->{$item}, $deletions); } elsif ($item eq 'LUN') { $changes += applyLunAssignments($driver, $target, undef, $$targets{$target}->{$item}); - } else { + } elsif ($item eq 'enabled') { $_attributes{$item} = $$targets{$target}->{$item}; } } - my $attributes = configToAttr(\%_attributes); - filterCreateAttributes($possible, $attributes, TRUE); - $changes += setTargetAttributes($driver, $target, $attributes, $deletions); + $attributes = configToAttr(\%_attributes); + my $t_attributes = $SCST->targetAttributes($driver, $target); + + if (defined($$t_attributes{'enabled'}) && + ($$t_attributes{'enabled'}->{'value'} != $$attributes{'enabled'})) { + setTargetAttribute($driver, $target, 'enabled', $$attributes{'enabled'}); + $changes++; + } } return $changes; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bva...@us...> - 2010-12-07 09:35:25
|
Revision: 2952 http://scst.svn.sourceforge.net/scst/?rev=2952&view=rev Author: bvassche Date: 2010-12-07 09:35:18 +0000 (Tue, 07 Dec 2010) Log Message: ----------- Fixed a bug that could cause scstadmin -write_config to generate an invalid configuration file, e.g. ... GROUP a } ... Reported-by: Frank Zago <fz...@sy...> Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-12-07 09:25:23 UTC (rev 2951) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-12-07 09:35:18 UTC (rev 2952) @@ -1405,9 +1405,8 @@ } } + $group_buff .= " {\n"; if ($lun_buff || $init_buff) { - $group_buff .= " {\n"; - if ($lun_buff) { $group_buff .= $lun_buff; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |