From 9539887b16fa0c5d7be0d771c51eb7a2c2a5a573 Mon Sep 17 00:00:00 2001 From: Mark Buechler Date: Tue, 11 May 2010 18:58:03 +0000 Subject: [PATCH] - Fix writeConfiguration() to not create empty groups and tidy it up a bit. git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1686 d57e44dd-8a1f-0410-8b47-8ef2f437770f --- scstadmin/scstadmin.sysfs | 141 +++++++++++++++++++++++++++++--------- 1 file changed, 110 insertions(+), 31 deletions(-) diff --git a/scstadmin/scstadmin.sysfs b/scstadmin/scstadmin.sysfs index 88447ff7d..05ab894d5 100755 --- a/scstadmin/scstadmin.sysfs +++ b/scstadmin/scstadmin.sysfs @@ -763,9 +763,9 @@ sub writeConfiguration { print $io "\n"; foreach my $handler (sort keys %{$CURRENT{'handler'}}) { - my $handler_params = $SCST->deviceCreateParameters($handler); + my $handler_buff; - print $io "HANDLER $handler {\n"; + my $handler_params = $SCST->deviceCreateParameters($handler); $parameters = $SCST->handlerParameters($handler); @@ -775,19 +775,19 @@ sub writeConfiguration { if (!$$parameters{$parameter}->{'static'}) { my $value = $$parameters{$parameter}->{'value'}; $value = "\"$value\"" if ($value =~ / /); - print $io "\t$parameter $value\n" if (defined($value)); + $handler_buff .= "\t$parameter $value\n" if (defined($value)); } } my $devices = $CURRENT{'handler'}->{$handler}; + my $device_buff; foreach my $device (@{$devices}) { - print $io "\n\tDEVICE $device {\n"; + $device_buff .= "\tDEVICE $device"; $parameters = $SCST->deviceParameters($device); - my $written = 0; - + my $parameter_buff; foreach my $parameter (sort keys %{$parameters}) { next if (defined($$parameters{$parameter}->{'set'})); @@ -796,17 +796,16 @@ sub writeConfiguration { my $value = $$parameters{$parameter}->{'value'}; $value = "\"$value\"" if ($value =~ / /); if (defined($value)) { - print $io "\t\t$parameter $value\n"; - $written++; + $parameter_buff .= "\t\t$parameter $value\n"; } } } } - print $io "\n" if ($written); + $parameter_buff .= "\n" if ($parameter_buff); if (!defined($$parameters{'scsi_device'})) { - print $io "\t\tCREATE_ATTRIBUTES {\n"; + $parameter_buff .= "\t\tCREATE_ATTRIBUTES {\n"; foreach my $parameter (sort keys %{$parameters}) { next if (defined($$parameters{$parameter}->{'set'})); @@ -814,30 +813,46 @@ sub writeConfiguration { if (defined($$handler_params{$parameter})) { my $value = $$parameters{$parameter}->{'value'}; $value = "\"$value\"" if ($value =~ / /); - print $io "\t\t\t$parameter $value\n" if (defined($value)); + $parameter_buff .= "\t\t\t$parameter $value\n" + if (defined($value)); } } - print $io "\t\t}\n"; + $parameter_buff .= "\t\t}\n"; } - print $io "\t}\n"; + if ($parameter_buff) { + $device_buff .= " {\n"; + $device_buff .= $parameter_buff; + $device_buff .= "\t}\n\n"; + } else { + $device_buff .= "\n"; + } } - print $io "}\n\n"; + $device_buff =~ s/\n+$/\n/; + + $handler_buff .= $device_buff; + + if ($handler_buff) { + print $io "HANDLER $handler {\n"; + print $io $handler_buff; + print $io "}\n\n"; + } } foreach my $driver (sort keys %{$CURRENT{'assign'}}) { - print $io "TARGET_DRIVER $driver {\n"; + my $driver_buff; my $targets = $CURRENT{'assign'}->{$driver}; + my $target_buff; foreach my $target (sort keys %{$targets}) { + $target_buff .= "\tTARGET $target"; + my $tgt_params = $SCST->targetParameters($driver, $target); - print $io "\n\tTARGET $target {"; - - my $_wrote = FALSE; + my $parameter_buff; foreach my $parm (keys %{$tgt_params}) { next if ($$tgt_params{$parm}->{'static'}); next if ($$tgt_params{$parm}->{'set'}); @@ -848,29 +863,31 @@ sub writeConfiguration { $value = "\"$value\"" if ($value =~ /\s/); - print $io "\n\t\t$parm $value"; - $_wrote = TRUE; + $parameter_buff .= "\t\t$parm $value\n"; } - print $io "\n" if ($_wrote); + $parameter_buff .= "\n" if ($parameter_buff); my $groups = $CURRENT{'assign'}->{$driver}->{$target}; + my $group_buff; foreach my $group (sort keys %{$groups}) { my $lun_params = $SCST->lunCreateParameters($driver, $target, $group); my $ini_params = $SCST->initiatorCreateParameters($driver, $target, $group); - print $io "\n\t\tGROUP $group {"; + $group_buff .= "\t\tGROUP $group"; my $luns = $CURRENT{'assign'}->{$driver}->{$target}->{$group}->{'LUNS'}; + my $lun_buff; foreach my $lun (sort numerically keys %{$luns}) { my $lun_dev = $$luns{$lun}; - print $io "\n\t\t\tLUN $lun $lun_dev {\n"; + $lun_buff .= "\t\t\tLUN $lun $lun_dev"; $parameters = $SCST->lunParameters($driver, $target, $group, $lun); + my $parameter_buff; foreach my $parameter (sort keys %{$parameters}) { next if (defined($$parameters{$parameter}->{'set'})); @@ -878,20 +895,29 @@ sub writeConfiguration { defined($$lun_params{$parameter})) { my $value = $$parameters{$parameter}->{'value'}; $value = "\"$value\"" if ($value =~ / /); - print $io "\t\t\t\t$parameter $value\n" if (defined($value)); + $parameter_buff .= "\t\t\t\t$parameter $value\n" + if (defined($value)); } } - print $io "\t\t\t}\n"; + if ($parameter_buff) { + $lun_buff .= " {\n"; + $lun_buff .= $parameter_buff; + $lun_buff .= "\t\t\t}\n\n"; + } else { + $lun_buff .= "\n"; + } } my $inits = $CURRENT{'assign'}->{$driver}->{$target}->{$group}->{'INITIATORS'}; + my $init_buff; foreach my $init (@{$inits}) { - print $io "\n\t\t\tINITIATOR $init {\n"; + $init_buff .= "\t\t\tINITIATOR $init"; $parameters = $SCST->initiatorParameters($driver, $target, $group, $init); + my $parameter_buff; foreach my $parameter (sort keys %{$parameters}) { next if (defined($$parameters{$parameter}->{'set'})); @@ -899,20 +925,71 @@ sub writeConfiguration { defined($$ini_params{$parameter})) { my $value = $$parameters{$parameter}->{'value'}; $value = "\"$value\"" if ($value =~ / /); - print $io "\t\t\t\t$parameter $value\n" if (defined($value)); + $parameter_buff .= "\t\t\t\t$parameter $value\n" + if (defined($value)); } } - print $io "\t\t\t}\n"; + if ($parameter_buff) { + $init_buff .= " {\n"; + $init_buff .= $parameter_buff; + $init_buff .= "\t\t\t}\n"; + } else { + $init_buff .= "\n"; + } + + $init_buff .= "\n"; } - print $io "\t\t}\n"; + $init_buff =~ s/\n\n$/\n/; + + if ($lun_buff || $init_buff) { + $group_buff .= " {\n"; + + if ($lun_buff) { + $group_buff .= $lun_buff; + } + + if ($init_buff) { + $group_buff .= $init_buff; + } + + $group_buff =~ s/\n\n$/\n/; + $group_buff .= "\t\t}\n\n"; + } + + $group_buff .= "\n"; + $group_buff =~ s/\n\n$/\n/; } - print $io "\t}\n"; + $group_buff .= "\n" if ($group_buff); + + if ($parameter_buff || $group_buff ) { + $target_buff .= " {\n"; + + if ($parameter_buff) { + $target_buff .= $parameter_buff; + } + + if ($group_buff) { + $target_buff .= $group_buff; + } + + $target_buff =~ s/\n\n$/\n/; + $target_buff .= "\t}\n\n"; + } else { + $target_buff .= "\n"; + } } - print $io "}\n\n"; + $driver_buff .= $target_buff; + $driver_buff =~ s/\n\n$/\n/; + + if ($driver_buff) { + print $io "TARGET_DRIVER $driver {\n"; + print $io $driver_buff; + print $io "}\n\n"; + } } close $io; @@ -1148,6 +1225,8 @@ sub clearConfiguration { } } } + + # TODO: should we disable all target drivers as well? } ####################################################################