[Pkg-iscsi-maintainers] Bug#850060: 2.0.874-2~exp1 issues

Andrew Patterson andrew.patterson at hpe.com
Thu Jan 5 18:29:17 UTC 2017


On 01/05/2017 11:10 AM, Andrew Patterson wrote:
> 
> On 01/04/2017 04:11 PM, Christian Seiler wrote:
>> Control: reopen -1
>>
>> Hi,
>> (reopening the bug report since iscsiuio doesn't actually work
>> according to what you're telling me)
>>
>> On 01/04/2017 11:30 PM, Andrew Patterson wrote:
>>> 1. In debian/extra/initramfs.local-top and
>>> debian/extra/initramfs.local-bottom /sbin/iscsuio creates a pid file
>>> in /run/iscsiuio.pid. You cannot override it on the command-line. The
>>> --pidfile option for start-stop-daemon should point to this location
>>> instead of /run/initramfs/iscsiuio.pid.
>>
>> Gah. I thought I had fixed that before the upload. :-(
>> A good thing there's experimental...
>>
>> OTOH, initramfs should write to /run/initramfs only, so maybe
>> we should pass -p /run/initramfs/iscsiuio.pid to iscsiuio
>> instead as well.
> 
> Yes. I believe that will work. I wonder why this option is not in the
> man-page.
> 
>>
>>> 2. The /sbin/iscsiuio deamon is trying to create a logfile in
>>> /var/log/iscsiuio.log. The /var/log directory does not exist in the
>>> initramfs.
>>
>> Unfortunately that's hardcoded. OTOH from reading the code
>> this shouldn't be an issue.
>>
>>> 3. The iscsiuio daemon is dieing before or during iscsistart -b. I am
>>> investigating why. It works fine when run after boot.
>>
>> This is weird, on my test VM (no offloading NIC though) it
>> does start (and shut down again).
>>
>> Question: does the network card require firmware for offloading
>> to work? If that's the case we might need to add the firmware
>> to the initramfs or this to work properly...
> 
> Yes, the card requires firmware. But it has been loaded (according to
> kernel output).
> 
>>
>>> 4. The commit 02c3051 "Don't ignore offloading NICs in iscsistart"
>>> will cause the interface to be configured in both iscsistart -N and in
>>> iscsistart -b for cards with iscsi hardware offload. I suspect we
>>> instead need a flag in iscsistart to bring up the NIC in iscsistart
>>> regardless if the NIC uses an offloadable driver. The local-top script
>>> can use this flag if /sbin/iscsiuio is not present, e.g.,
>>>
>>> ISCSISTART_FLAGS=""
>>> if [ ! -x /sbin/iscsiuio ] ; then
>>>    ISCSISTART_FLAGS="-S"
>>> fi
>>
>> Hmm, now I see what you mean. I also dug up this commit which
>> gives a little insight.
>>
>> https://github.com/open-iscsi/open-iscsi/commit/ee115be828362653478e6fe7cd4c6ee3318223ff
>>
>> However, I think the solution is different from what you suggest: the
>> "fix" for #850057 is wrong I believe.
>>
>> Debian sid package (w/o -DOFFLOAD_BOOT_SUPPORTED):
>>
>>  - cxgb*i: iscsistart -N ignores interface
>>            iscsistart -b doesn't configure offloading
>>        => won't work
>>
>>  - bnx2i (any mode): iscsistart -N ignores interface
>>                      iscsistart -b doesn't configure offloading
>>        => won't work
>>
>> Current upstream situation (w/ -DOFFLOAD_BOOT_SUPPORTED):
>>
>>  - cxgb*i: iscsistart -N ignores interface
>>            iscsistart -b configures offloading 
>>        => should work
>>           (but don't have hardware)
>>           (also: remind me to check whether we copy the
>>           module into the initramfs)
>>
>>  - bnx2i non-hba: iscsistart -N ignores it
>>                   iscsistart -b doesn't configure offloading
>>        => won't work
>>
>>  - bnx2i hba: iscsistart -N ignores it
>>               iscsistart -b configures offloading
>>        => should work (once iscsiuio is running)
>>
>> "Fix" for 850057 (in experimental):
>>
>>  - cxgb*i: iscsistart -N configures interface on host
>>            iscsistart -b configures offloading
>>          => no idea what happens thereafter
>>             (since MAC address is the same on these cards: is
>>             this a problem if they have the same IP?)
>>
>>  - bnx2i non-hba: iscsistart -N configures interface
>>                   iscsistart -b doesn't configure offloading,
>>                                 but enables software iSCSI
>>           => should work
>>
>>  - bnx2i hba: iscsistart -N configures interface
>>               iscsistart -b configures offloading
>>           => same IP, different MAC addresses
>>           => will cause trouble
>>
>> The ideal solution would be to mirror the check that is done
>> for -b in -N. In that case we'd either configure the host
>> interface (and use software iSCSI), or configure offloading
>> (and use hardware iSCSI), but never both, and never neither.
>> So instead of the current patch for #850057 I would suggest
>> to do that instead. That should then also be upstream-able. I
>> can prepare a patch for that tomorrow.
> 
> That was my thought. However, I don't think you can programaticaly
> determine whether the card is configured for iscsi offload. We need to
> use some sort of signal from the admin, hence my suggestion to check
> for the presence of iscsiuio or to use a flag.
> 
>>
>> That still leaves us with the question why iscsiuio doesn't
>> appear to work in the initramfs on your system. You could
>> just add strace to your initramfs and call iscsiuio in a
>> detached strace, a la
>>
>> old:
>> start-stop-daemon ... /sbin/iscsiuio
>>
>> new:
>> start-stop-daemon ... /bin/strace -- -D -f \
>>    -o /run/initramfs/iscsiuio.trace  -- /sbin/iscsiuio
>>
>> (The first -- is for start-stop-daemon, the second one for
>> strace itself.)
>>
> 
> It looks like iscsuio is complaining about a missing libgcc:
> 
> writev(2, [{"libgcc_s.so.1 must be installed "..., 59]], 1) = 59
> 
> which is indeed missing.  I think pthreads needs libgcc, but shouldn't
> copy_exec take care of this?
>

The copy_exec function only copies libraries found with ldd, e.g.,

# ldd /sbin/iscsiuio
	linux-vdso.so.1 (0x00007fff868c1000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f0de9051000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f0de8e34000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0de8a89000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f0de9480000)

The iscsiuio daemon must be dloading libgcc. Here is strace output on
a running system after running iscsistart -b:

4168  msync(0x7effb477e000, 56, MS_SYNC <unfinished ...>
4167  <... mmap resumed> )              = 0x7effb4759000
4168  <... msync resumed> )             = -1 EINVAL (Invalid argument)
4167  close(11 <unfinished ...>
4168  select(9, [8], NULL, NULL, {0, 100} <unfinished ...>
4167  <... close resumed> )             = 0
4167  access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
4167  open("/lib/x86_64-linux-gnu/libgcc_s.so.1", O_RDONLY|O_CLOEXEC) = 11
4168  <... select resumed> )            = 0 (Timeout)
4167  read(11,  <unfinished ...>
4168  select(9, [8], NULL, NULL, {0, 100} <unfinished ...>

Is there a supported way to copy this library and its dependencies over?

Andrew

-- 
Andrew Patterson
Hewlett-Packard Enterprise



More information about the Pkg-iscsi-maintainers mailing list