From aee3ce6fabdc3cd9a46b65b07ded239fcd66b070 Mon Sep 17 00:00:00 2001 From: Mark Buechler Date: Mon, 11 Oct 2010 16:26:20 +0000 Subject: [PATCH] Merge scstadmin from trunk. git-svn-id: http://svn.code.sf.net/p/scst/svn/branches/2.0.0.x@2393 d57e44dd-8a1f-0410-8b47-8ef2f437770f --- .../scst-0.9.00/lib/SCST/SCST.pm | 5 ++-- scstadmin/scstadmin.sysfs/scstadmin | 23 +++++++++++-------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/scstadmin/scstadmin.sysfs/scst-0.9.00/lib/SCST/SCST.pm b/scstadmin/scstadmin.sysfs/scst-0.9.00/lib/SCST/SCST.pm index 7316384cf..447ff493a 100644 --- a/scstadmin/scstadmin.sysfs/scst-0.9.00/lib/SCST/SCST.pm +++ b/scstadmin/scstadmin.sysfs/scst-0.9.00/lib/SCST/SCST.pm @@ -780,9 +780,10 @@ sub targetType { my $target = shift; if ($self->driverIsVirtualCapable($driver)) { - my $attribs = $self->driverAttributes($driver); + my $attribs = $self->targetAttributes($driver, $target); - if (defined($$attribs{'hw_target'})) { + if (defined($$attribs{'hw_target'}) && + ($$attribs{'hw_target'}->{'value'} == TRUE)) { return $TGT_TYPE_HARDWARE; } else { return $TGT_TYPE_VIRTUAL; diff --git a/scstadmin/scstadmin.sysfs/scstadmin b/scstadmin/scstadmin.sysfs/scstadmin index 88bca52e3..bea14ea8a 100755 --- a/scstadmin/scstadmin.sysfs/scstadmin +++ b/scstadmin/scstadmin.sysfs/scstadmin @@ -1188,28 +1188,30 @@ sub writeConfiguration { $drv_attr_buff_nk .= "\n" if ($drv_attr_buff_nk); my $targets = $CURRENT{'assign'}->{$driver}; + my $tgt_attrs = $SCST->targetCreateAttributes($driver); my $target_buff; foreach my $target (sort keys %{$targets}) { $target_buff .= "\tTARGET $target"; - my $tgt_attrs = $SCST->targetAttributes($driver, $target); + my $attributes = $SCST->targetAttributes($driver, $target); my $attribute_buff; my $attribute_buff_nk; - foreach my $attr (keys %{$tgt_attrs}) { - next if ($$tgt_attrs{$attr}->{'static'}); - next if ($$tgt_attrs{$attr}->{'set'}); + foreach my $attr (keys %{$attributes}) { + next if ($$attributes{$attr}->{'static'} && + !defined($$tgt_attrs{$attr})); + next if ($$attributes{$attr}->{'set'}); - if (defined($$tgt_attrs{$attr}->{'keys'})) { - foreach my $key (keys %{$$tgt_attrs{$attr}->{'keys'}}) { - my $value = $$tgt_attrs{$attr}->{'keys'}->{$key}->{'value'}; + if (defined($$attributes{$attr}->{'keys'})) { + foreach my $key (keys %{$$attributes{$attr}->{'keys'}}) { + my $value = $$attributes{$attr}->{'keys'}->{$key}->{'value'}; $value = "\"$value\"" if ($value =~ / /); $attribute_buff .= "\t\t$attr $value\n" if (defined($value)); } } elsif (($attr eq 'enabled') || $nonkey) { - my $value = $$tgt_attrs{$attr}->{'value'}; + my $value = $$attributes{$attr}->{'value'}; $value = "\"$value\"" if ($value =~ /\s/); if ($attr eq 'enabled') { $attribute_buff .= "\t\t$attr $value\n" @@ -1993,7 +1995,9 @@ sub applyTargetAssignments { foreach my $target (keys %{$CURRENT{'assign'}->{$driver}}) { if (!defined($$targets{$target})) { - if ($deletions) { + my $isVirtual = ($SCST->targetType($driver, $target) == $SCST::SCST::TGT_TYPE_VIRTUAL); + + if ($deletions && $isVirtual) { my $rc = removeVirtualTarget($driver, $target); immediateExit($SCST->errorString($rc)) if ($rc); $changes++; @@ -2174,6 +2178,7 @@ sub clearConfiguration { clearLuns($driver, $target); removeTargetDynamicAttributes($driver, $target); + if ($SCST->targetType($driver, $target) == $SCST::SCST::TGT_TYPE_VIRTUAL) { my $rc = removeVirtualTarget($driver, $target); issueWarning($SCST->errorString($rc)) if ($rc);