]> xenbits.xensource.com Git - libvirt.git/commitdiff
viriscsi: Need to sendtargets on Initiator IQN
authorJohn Ferlan <jferlan@redhat.com>
Tue, 9 Dec 2014 23:34:32 +0000 (18:34 -0500)
committerJohn Ferlan <jferlan@redhat.com>
Wed, 10 Dec 2014 11:58:37 +0000 (06:58 -0500)
https://bugzilla.redhat.com/show_bug.cgi?id=1172015

The refactoring done as part of commit id '59446096' caused a regression
for the multi initiator IQN commit '6aabcb5b' because the sendtargets was
not done on/for the initiator IQN prior to login (or trying to disable
autologin)

Prior to that commit, the paths were essentially

virStorageBackendISCSIStartPool
    virStorageBackendISCSILogin
        virStorageBackendISCSIConnection
            if initiatoriqn
                virStorageBackendCreateIfaceIQN
                Issue sendtargets
                Perform --login
            else
                Issue sendtargets
                Perform --login

After that commit:

virStorageBackendISCSIStartPool
    Issue sendtargets
    Call virStorageBackendISCSIConnection
        If initiatoriqn
            virStorageBackendCreateIfaceIQN
            Perform --login
        else
            Perform --login

So for non initiator IQN paths, nothing changed. For the initiator path,
the --login fails as does any attempts to change autologin via "--op update
--name node.startup --value manual".

src/util/viriscsi.c

index ef8fb59508388e3223c0968ccbc77ea4a4bbdcbd..bd34feaa3766f2401f8b1165577c0be9d6afefd4 100644 (file)
@@ -295,10 +295,17 @@ virISCSIConnection(const char *portal,
             VIR_DEBUG("ifacename: '%s'", ifacename);
             break;
         case IQN_MISSING:
-            if (virStorageBackendCreateIfaceIQN(initiatoriqn,
-                                                &ifacename) != 0) {
+            if (virStorageBackendCreateIfaceIQN(initiatoriqn, &ifacename) != 0)
                 goto cleanup;
-            }
+            /*
+             * iscsiadm doesn't let you send commands to the Interface IQN,
+             * unless you've first issued a 'sendtargets' command to the
+             * portal. Without the sendtargets all that is received is a
+             * "iscsiadm: No records found"
+             */
+            if (virISCSIScanTargets(portal, initiatoriqn, NULL, NULL) < 0)
+                goto cleanup;
+
             break;
         case IQN_ERROR:
         default: