[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [Nbd] found bug in nbd-server.c, handle_info()



Thanks Wouter,

I'm chasing another issue seen both on the trunk and 3.15.2 where an apparent deadlock occurs, leaving the nbd device jammed until the filesystem op, client and server are SIGKILLed at which point the mount can be cleaned up. In this case the tcp connection is running thru an ssh tunnel over a wan, I'm going to try and capture it with the transaction log today. I have a general impression its not a protocol or server issue but something client related.

Greg


On 5/11/2017 4:49 AM, Wouter Verhelst wrote:
Hi Greg,

On Wed, May 10, 2017 at 01:51:31PM -0400, Greg Menke wrote:
Hi all- new nbd user, thanks for all your work.

On the gitlab trunk, I discovered nbd_server.c, handle_info() function
does not perform "return true" as its last line, so no defined return
value back into negotiate().   If the return value register is 0, the
server stays in the protocol negotiation phase after the client says
NBT_OPT_GO, which leads to a "Negotiation failed/5a: magic mismatch"
error on the 1st transaction.
Yup, indeed. Good catch :-)

(note though that handle_info is new functionality, which hasn't
actually been released yet; if you're trying this for a production
environment, I suggest you use 3.15.2 instead)

Because of the undefined return value this error may appear or not
depending on random circumstances, gcc rev, cpu architecture, etc.. I
discovered it on Linux  3.11.10-100.fc18.x86_64
... or it might be aggressively optimized out completely, in some cases
(clang is especially nice at that).

I suspect this might be why my test suite had been hanging recently
(which is one of the main reasons why I hadn't released this yet).
Hopefully this will fix it :)

Thanks,





Reply to: