Well, it turns out it's not so much "sporadically"... The image's disk was 
just a bit too small.

Sorry for the noise and thanks again for fixing the root cause,
-Gregor

On Wednesday, 15 March 2017 09:13:48 UTC+1, Gregor Berginc wrote:
>
> Hi Nadav,
>
> looks like this resolved the issue we had with MPI on AWS. The jobs are 
> successfully linked and started.
>
> Unfortunately, there seem to be another problem because instances 
> sporadically stop - probably unrelated to this change.
>
> Thanks,
> -Gregor
>
> On Tuesday, 14 March 2017 14:33:24 UTC+1, Nadav Har'El wrote:
>>
>> The SIOCGIFFLAGS ioctl returns a set of flags for a network interface. 
>> Many of the classic bits there, like IFF_UP and IFF_LOOPBACK, are the 
>> same 
>> in our internal implementation (BSD-based) and desired output (Linux), 
>> but not all of them are the same. We already had a function to convert 
>> the internal bitmask into a Linux bitmask, but it was incomplete. 
>>
>> Of particular importance is BSD's IFF_SIMPLEX flag, which does not exist 
>> on Linux, and is set by OSv's Xen network driver. As we failed to clear 
>> this flag, clients thought they were seeing Linux's IFF_SLAVE (which is 
>> at the same bit position, 0x800). In particular OpenMPI did not like 
>> seeing this flag, and refused to use this network interface. 
>>
>> Fixes #862 
>>
>> Signed-off-by: Nadav Har'El <[email protected]> 
>> --- 
>>  bsd/sys/compat/linux/linux_ioctl.cc | 19 ++++++++++--------- 
>>  1 file changed, 10 insertions(+), 9 deletions(-) 
>>
>> diff --git a/bsd/sys/compat/linux/linux_ioctl.cc 
>> b/bsd/sys/compat/linux/linux_ioctl.cc 
>> index 59f1eb3..43a50bb 100644 
>> --- a/bsd/sys/compat/linux/linux_ioctl.cc 
>> +++ b/bsd/sys/compat/linux/linux_ioctl.cc 
>> @@ -143,26 +143,27 @@ linux_ifconf(struct bsd_ifconf *ifc_p) 
>>      return (0); 
>>  } 
>>   
>> +// While many of the traditional bits returned by SIOCGIFFLAGS are the 
>> same 
>> +// on BSD and Linux, some of the newer ones have different location, or 
>> +// different meaning for the same bit location. So we need to convert 
>> the 
>> +// BSD bits which we store internally to the Linux bits applications 
>> expect 
>> +// us to return. 
>>  static void 
>>  linux_gifflags(struct ifnet *ifp, struct l_ifreq *ifr) 
>>  { 
>>      l_short flags; 
>>   
>> +    // This assignment drops all the flags beyond the 16th bit. 
>> +    // None of them have a Linux equivalent. 
>>      flags = (ifp->if_flags | ifp->if_drv_flags); 
>> -    /* These flags have no Linux equivalent 
>> -     * 
>> -     *  Notes: 
>> -     *       - We do show IFF_SMART|IFF_DRV_OACTIVE|IFF_SIMPLEX 
>> -     *       - IFF_LINK0 has a value of 0x1000 which conflics with the 
>> Linux 
>> -     *         IFF_MULTICAST value. 
>> -     */ 
>> -    flags &= ~(IFF_LINK0|IFF_LINK1|IFF_LINK2); 
>> +    // These flags have no Linux equivalent: 
>> +    flags &= 
>> ~(IFF_SMART|IFF_DRV_OACTIVE|IFF_SIMPLEX|IFF_LINK0|IFF_LINK1|IFF_LINK2); 
>>      /* Linux' multicast flag is in a different bit */ 
>>      if (flags & IFF_MULTICAST) { 
>>          flags &= ~IFF_MULTICAST; 
>>          flags |= 0x1000; 
>>      } 
>> -    ifr->ifr_flags = flags ; 
>> +    ifr->ifr_flags = flags; 
>>  } 
>>   
>>  #define ARPHRD_ETHER        1 
>> -- 
>> 2.9.3 
>>
>>

-- 
You received this message because you are subscribed to the Google Groups "OSv 
Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to