[libvirt] [PATCH 1/1] Add SCSI pool support.
Daniel P. Berrange
berrange at redhat.com
Fri Mar 27 15:22:20 UTC 2009
On Fri, Mar 27, 2009 at 11:16:42AM -0400, Dave Allan wrote:
> Daniel P. Berrange wrote:
> >The new generic 'NewLUN' method has lost this bit of retry / sleep logic.
> >This unfortauntely causes us to randomly loose LUNs due to fact that
> >udev may not yet have created the /dev/ node or the stable path.
>
> [Forgive me if you've been through this before and I just don't know the
> history.]
>
> This is a race with no easy answer if udev settle does not provide the
> protection we need. I removed the retries because I thought udevadm
> settle provided the correct protection against the race, so I thought
> the retries only added complexity.
>
> As your example demonstrates, though, that's not enough everywhere. I
> can put the timeout and retry back to preserve the existing behavior,
> but that only makes it more likely that the path we want will win the
> race, it doesn't actually fix the problem. The iSCSI login should not
> return until the devices have appeared in the kernel, which should
> populate the udev queue and cause udev settle to pause until the queue
> clears. Is that assumption not valid everywhere?
>
> I think we need to understand why this is happening; if we have to pad
> the timing until the right guy wins the race, so be it, but I'd really
> like to understand the situation before we go there. What OS is this
> on? As you are, I am testing iSCSI with the IET. I have 20 LUs, and I
> don't see the problem. Does your system have udevadm settle?
Spot the obvious mistake...
virStorageBackendWaitForDevices(conn);
if ((session = virStorageBackendISCSISession(conn, pool, 0)) == NULL)
goto cleanup;
if (virStorageBackendISCSIRescanLUNs(conn, pool, session) < 0)
goto cleanup;
if (virStorageBackendISCSIFindLUNs(conn, pool, session) < 0)
goto cleanup;
Its calling udev settle before it has actually told the iSCSI client
to rescan the target for new LUNs :-) Probably best to move the call
to virStorageBackendWaitForDevices() into the method
virStorageBackendISCSIFindLUNs() itself.
Regards,
Daniel
--
|: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|
More information about the libvir-list
mailing list