[ENBD] Doubled requests

Peter T. Breuer ptb at it.uc3m.es
Fri Jan 16 02:37:02 MST 2004


"Also sprach Arne Wiebalck:"
> 
> The new version has problems to detect the size of the device (not only
> for my device, but also for other devices such as disk partitions). Is
> that anything to worry about?

Yes - nothing there got changed recently. Perhaps there were already
some other differences than only in the opfile routines. No - I see no
differences wrt 2.4.31 other than those I made in separating the 
execution paths for the three file server major modes.

Perhaps you need to do a make clean?

> 
> e004:/home/wiebalck/nbd # /tmp/enbd-server 5000 /dev/hda8
> enbd-server  6733: <#3392> main server: Could not find size of exported
> block device: Success
> enbd-server  6733: server: assuming very large number for size and hoping.
> 
> 
> Later the server complains about:
> 
> file  6766: <#1237> opfile unknown mode 108!

That is serious. 

            switch(self->mode) {
              default:
                PERR("unknown mode %d!\n", self->mode);
                tot = -1;

The mode on the server object has changed to something other than 
one of the three expected values!

> enbd-server  6766: <#1403> do_srv_read errored request!
> enbd-server  6766: <#1461> newproto net errored on packet. Breaking off.
> 

> This is from the enbd-2.4.32, which is currently on the web.

You mean all of it, or only the file.c? I wanted you to take the
file.c and replace your current one with it. It simply splits
the three service routines for linear, stripe and mirror modes
into three different routines, instead of having all in one
routine with mode switches.

I'm pretty sure it's right because I made the change by copying the
original routine three times and then cutting out of each routine the
case switches that were not pertinent to that routine. And I ran 
10 million requests through the code yesterday without error (or size
problems).

That you see a change in the mode value to 108 indicates ... yes, 
108 is ascii 'l'. And that is no longer a valid value. I changed the
mode values to 0, 1, 2. I think you maybe did not recompile the
whole of the code with the newer file.h, but only the one file, so
that the server code is passing down the 'l' value instead of the 0
value.

Could that be it?


Peter


More information about the ENBD mailing list