Re: Is: SKB_MAX_LEN bites again. Was: Re: bug disabling guest interface

Steven Haigh
Tue, 12 Mar 2013 15:05:14 -0000

On 03/13/2013 01:56 AM, Ian Campbell wrote:
> On Tue, 2013-03-12 at 14:49 +0000, Konrad Rzeszutek Wilk wrote:
>> On Fri, Mar 08, 2013 at 11:09:56PM +0100, Jacek Milewicz wrote:
>>>>>> Is there any further information on a possible fix for
this?
>>> Thoughts?
>>>>>> Ideas? As it seems to be hitting multiple sites,
I''d like to get it
>>>>> fixed asap...
>>>>>
>>>>> There are 3 ways I can see this fixed:
>>>>> - update guests so all have same MAX_SKB_FRAGS (that
includes windows
>>>>> drivers (windows drivers use 19 for MAX_SKB_FRAGS)) -add
some sort of
>>>>> negotiation between host and guest
>>>>> - change MAX_SKB_FRAGS to 19 to accommodate all guests
>>>>>
>>>>> Unfortunately first one requires changes to the guest and
most don''t
>>>>> have that luxury. So the only way I see it could be fixed
without
>>>>> breaking compatibility even more  is
>>>>
>>>> Ugh. The negotiations between host and guest is probably the
best
>>> choice.
>>>> The issues you are going to hit are that you might need to redo
the skbs
>>> to
>>>> match what the frontend''s max is.
>>>>
>>>> Annie, Wei, Ian - were there some RFC patches floating around
for this?
>>>>
>>>
>>> As much as I agree that negotiation is the best option in long
term. It
>>> relies on people upgrading their kernels - and this is not the case
(only
>>> people running kernels from before 2011-12-23 are affected by this
bug
>>> (I''m not sure about other platforms)).
>>> And in a lot of cases (VPS providers) there is no easy way to
upgrade
>>> guest kernels.
>>
>> Sure. The other option in the xen-netback might be a configurable
option
>> to let net-back know that it is running with older guests which expect
>> 18 size MAX_SKB_FRAGS. That way we have the negotiation part, the code
to
>> deal with backend MAX_SKB_FRAGS != frontend MAX_SKB_FRAGS and the value
that
>> the system admin provides.
>
> I think this is over complicating things. netback can and should be
> modified to be able to cope with guests using frags == 18 (or larger)
> even if it only itself supports frags == 16 by coalescing things in the
> obvious way. This works for all guest supplied frames up to 64K in size,
> regardless of the number of slots they use to represent that 64K.

On this, while we just hacked this in the kernel source to increase
MAX_SKB_FRAGS to 19, I believe Jacek Milewicz tested 18 to work fine on
linux guests, but it seems Windows guests would still fail unless it was
increased to 19.

--
Steven Haigh

Email: netwiz@crc.id.au
Web: https://www.crc.id.au
Phone: (03) 9001 6090 - 0412 935 897
Fax: (03) 8338 0299