Wouter,

Please pull from my tree
  http://git.alex.org.uk/nbd.git
from and including commit
  39e2020730daefaa2414ff97795edd40ad28a967
(I think you took the others earlier)

Since the last email I've added a comment to the documentation for
NBD_COMMAND_FLUSH indicating use of non-zero offsets/lengths is
reserved per thread with Goswin von Brederlow <[email protected]>.

The commits are listed below.

-- 
Alex Bligh


commit 777461042a908d9fee5daa9a72bd9df25bc3c7cd
Author: Alex Bligh <[email protected]>
Date:   Sun May 22 11:07:12 2011 +0100

    Use nbd-tester-client.tr data with conformant MBD_CMD_FLUSH 
offset/length fields

commit f65d7a3b11542177b856f6a621e12d6ec072995b
Author: Alex Bligh <[email protected]>
Date:   Sun May 22 10:58:47 2011 +0100

    Change documentation for NBD_CMD_FLUSH again.

    Use offset, length=0 for normal flushes. Reserve other options
    for later (idea from Goswin von Brederlow <[email protected]>)

commit 8965fe7e2d7dc7a13065c0b00ee335068e7b9752
Author: Alex Bligh <[email protected]>
Date:   Sat May 21 08:47:21 2011 +0100

    Add transaction log support and integrity test

commit ef44e8ac42197b607646a711761c060f8fa159e5
Author: Alex Bligh <[email protected]>
Date:   Wed May 18 19:34:35 2011 +0100

    fix documentation of NBD_CMD_FLUSH

commit 065a1b241dde2ab6fe333ccf5bc057e7e327f8d4
Author: Alex Bligh <[email protected]>
Date:   Wed May 18 19:02:48 2011 +0100

    copy handle on all requests

commit 8d4b9f4e3d10fdfa319b17f385eeaae775d0071c
Author: Alex Bligh <[email protected]>
Date:   Wed May 18 17:34:09 2011 +0100

    nbd-server: don't check length and offset on flush

commit 39e2020730daefaa2414ff97795edd40ad28a967
Author: Alex Bligh <[email protected]>
Date:   Tue May 17 19:35:41 2011 +0100

    Implement support for flush, fua and rotational.

    This commit implements support for the flush, fua, and rotational 
directives
    within the configuration file.

    FUA means "force the current write to hit the media service" and FLUSH
    means "empty the current write queue to disk". Broadly they have the 
same
    semantics as the linux kernel REQ_FLUSH and REQ_FUA. FUA is implemented
    through sync_file_range() (or if that doesn't exist, fdatasync() on the
    file handle concerned), FLUSH through fsync() on all files. FUA and
    FLUSH are selected in the config file, and set new flags bits which will
    cause the client to sent FUA and FLUSH requests. The way these are
    implemented is further explained in doc/proto.txt.

    The purpose of this is reasonably obvious: without supporting either FUA
    or FLUSH (and it's relatively easy to support both), filesystems on the
    client have no way to ensure the relevant sectors have hit the disk.
    The patch is implement such that the default behaviour is unchanged.

    Additionally, it introduces an F_ROTATIONAL flag. This will turn off
    the use of QUEUE_FLAG_NONROT in the client. QUEUE_FLAG_NONROT 
effectively
    disables the elevator algorithm, making the algorithm merge only. That 
is
    unhelpful where the server does not have its own elevator algorithm
    or where the client elevator algorithm is neutered (e.g. writing to a
    raw partition with F_SYNC with nbd-server). It's not going to be used
    often where the backing store is a file.

    It also incidentally fixes a bug where F_SYNC is ignored if 
F_COPYONWRITE
    is set (not that this currently has much utility).

    Note the following:

    * The top 16 bits of the command type have been reserved
      (see NBD_CMD_MASK_COMMAND) for passing flags to be attached to 
commands.
      NBD_CMD_FLAG_FUA is the first of these.

    * simple_test has been modified so it does not stomp over nbd.conf and
      pid files in the current directory.

    * A new ioctl has been added which passes the export flags to the 
kernel.
      There is currently no support for this in the kernel (I will submit
      a patch in due course)

    * "make check" now performs a flush and fua test. These have been 
verified
      by strace to "do the right thing".

    * nbd-client incorrectly shifted the flags value left by 16 after 
reading it.
      This caused the test of the readonly bit to always fail. I suspect 
this
      may have been an attempt to combine server flags and export flags into
      a single 32 bit word. However, the low 16 bits were never set, and 
only
      the low 16 bits are tested. As the only thing it was testing for was 
the
      read only flag, and that is supplied in the flags, and as this allows
      transparent passing to the ioctl, I suggest it is changed as per this 
commit.
      If there's something else to add, it can be put in the upper 16 bits.

    I have tested this lightly with nbd-client (obviously the kernel does 
not
    yet send FLUSH or FUA) and with the test suite. It's probably ready to
    go in marked "experimental".




------------------------------------------------------------------------------
What Every C/C++ and Fortran developer Should Know!
Read this article and learn how Intel has extended the reach of its 
next-generation tools to help Windows* and Linux* C/C++ and Fortran 
developers boost performance applications - including clusters. 
http://p.sf.net/sfu/intel-dev2devmay
_______________________________________________
Nbd-general mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/nbd-general

Reply via email to