1. 06 9月, 2013 3 次提交
  2. 02 9月, 2013 2 次提交
  3. 01 9月, 2013 2 次提交
  4. 30 8月, 2013 17 次提交
    • M
      qcow2-refcount: Repair OFLAG_COPIED errors · e23e400e
      Max Reitz 提交于
      Since the OFLAG_COPIED checks are now executed after the refcounts have
      been repaired (if repairing), it is safe to assume that they are correct
      but the OFLAG_COPIED flag may be not. Therefore, if its value differs
      from what it should be (considering the according refcount), that
      discrepancy can be repaired by correctly setting (or clearing that flag.
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      e23e400e
    • M
      qcow2-refcount: Move OFLAG_COPIED checks · 4f6ed88c
      Max Reitz 提交于
      Move the OFLAG_COPIED checks out of check_refcounts_l1 and
      check_refcounts_l2 and after the actual refcount checks/fixes (since the
      refcounts might actually change there).
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      4f6ed88c
    • M
      qcow2: Employ metadata overlap checks · cf93980e
      Max Reitz 提交于
      The pre-write overlap check function is now called before most of the
      qcow2 writes (aborting it on collision or other error).
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      cf93980e
    • M
      qcow2: Metadata overlap checks · a40f1c2a
      Max Reitz 提交于
      Two new functions are added; the first one checks a given range in the
      image file for overlaps with metadata (main header, L1 tables, L2
      tables, refcount table and blocks).
      
      The second one should be used immediately before writing to the image
      file as it calls the first function and, upon collision, marks the
      image as corrupt and makes the BDS unusable, thereby preventing
      further access.
      
      Both functions take a bitmask argument specifying the structures which
      should be checked for overlaps, making it possible to also check
      metadata writes against colliding with other structures.
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      a40f1c2a
    • M
      qcow2: Add corrupt bit · 69c98726
      Max Reitz 提交于
      This adds an incompatible bit indicating corruption to qcow2. Any image
      with this bit set may not be written to unless for repairing (and
      subsequently clearing the bit if the repair has been successful).
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      69c98726
    • M
      qcow2-refcount: Snapshot update for zero clusters · 8b81a7b6
      Max Reitz 提交于
      Account for all cluster types in qcow2_update_snapshot_refcounts;
      this prevents this function from updating the refcount of unallocated
      zero clusters which effectively led to wrong adjustments of the refcount
      of cluster 0 (the main qcow2 header). This in turn resulted in images
      with (unallocated) zero clusters having a cluster 0 refcount greater
      than one after creating a snapshot.
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      8b81a7b6
    • B
      gluster: Abort on AIO completion failure · 9faa574f
      Bharata B Rao 提交于
      Currently if gluster AIO callback thread fails to notify the QEMU thread about
      AIO completion, we try graceful recovery by marking the disk drive as
      inaccessible. This error recovery code is race-prone as found by Asias and
      Stefan. However as found out by Paolo, this kind of error is impossible and
      hence simplify the code that handles this error recovery.
      Signed-off-by: NBharata B Rao <bharata@linux.vnet.ibm.com>
      Reviewed-by: NStefan Hajnoczi <stefanha@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      9faa574f
    • K
      block: Remove old raw driver · e5b1d99f
      Kevin Wolf 提交于
      This is unused code now.
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      e5b1d99f
    • L
      switch raw block driver from "raw.o" to "raw_bsd.o" · 7a6d3fc5
      Laszlo Ersek 提交于
      "Incoming" function prototypes and "outgoing" function calls must match
      reality. Implemented using the "struct BlockDriver" definition in
      "include/block/block_int.h", and gcc errors & warnings.
      
      v1->v2:
      
      On 08/20/13 09:51, Kevin Wolf wrote:
      > Am 18.08.2013 um 16:29 hat Paolo Bonzini geschrieben:
      >> Il 16/08/2013 16:15, Laszlo Ersek ha scritto:
      >>> +static int raw_reopen_prepare(BDRVReopenState *reopen_state,
      >>> +                              BlockReopenQueue *queue, Error **errp)
      >>>  {
      >>> -    return bdrv_reopen_prepare(bs->file);
      >>> +    BDRVReopenState tmp = *reopen_state;
      >>> +
      >>> +    tmp.bs = tmp.bs->file;
      >>> +    return bdrv_reopen_prepare(&tmp, queue, errp);
      >>>  }
      >>
      >> This should just return zero, my fault.
      >
      > Which is because bdrv_reopen_queue() already queues bs->file for reopen.
      > The simple return 0; implementation is shared by all other format drivers
      > that support reopening images.
      Signed-off-by: NLaszlo Ersek <lersek@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      7a6d3fc5
    • L
      raw_bsd: register bdrv_raw · 775d6afd
      Laszlo Ersek 提交于
      On 08/05/13 15:03, Paolo Bonzini wrote:
      >
      > [...]
      >
      > 5) Formats are registered with bdrv_register (takes a BlockDriver*). You
      > also need to pass the caller of bdrv_register to block_init.
      
      Fill in the BlockDriver structure with the raw_*() functions that have
      been added to "block/raw_bsd.c", in the order the fields are defined in
      "include/block/block_int.h".
      
      I needed more explanation / naming examples for registering the driver
      than what Paolo gave me, so I copied / adapted from "block/qcow2.c". The
      parts I took as basis for modification are blamed on
      
          commit 5efa9d5a
          Author: Anthony Liguori <aliguori@us.ibm.com>
          Date:   Sat May 9 17:03:42 2009 -0500
      
              Convert block infrastructure to use new module init functionality
      
          commit 20d97356
          Author: Blue Swirl <blauwirbel@gmail.com>
          Date:   Fri Apr 23 20:19:47 2010 +0000
      
              Fix OpenBSD build
      Signed-off-by: NLaszlo Ersek <lersek@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      775d6afd
    • L
      raw_bsd: add raw_create_options · ff369a48
      Laszlo Ersek 提交于
      On 08/05/13 15:03, Paolo Bonzini wrote:
      >
      > [...]
      >
      > 4) There is another member, .create_options, which is an array of
      > QEMUOptionParameter structs, terminated by an all-zero item.  The only
      > option you need is for the virtual disk size.  You will find something
      > to copy from in other block drivers, for example block/qcow2.c.
      
      Code taken and adapted from "block/qcow2.c", as suggested. The code being
      copied/modified is blamed on
      
          commit 20d97356
          Author: Blue Swirl <blauwirbel@gmail.com>
          Date:   Fri Apr 23 20:19:47 2010 +0000
      
              Fix OpenBSD build
      
      and
      
          commit 7c80ab3f
          Author: Jes Sorensen <Jes.Sorensen@redhat.com>
          Date:   Fri Dec 17 16:02:39 2010 +0100
      
              block/qcow2.c: rename qcow_ functions to qcow2_
      Signed-off-by: NLaszlo Ersek <lersek@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      ff369a48
    • L
      raw_bsd: introduce "special members" · 01dd96d8
      Laszlo Ersek 提交于
      On 08/05/13 15:03, Paolo Bonzini wrote:
      >
      > [...]
      >
      > 3) These members are special
      >
      >     .format_name   is the string "raw"
      >     .bdrv_open     raw_open should set bs->sg to bs->file->sg and return 0
      >     .bdrv_close    raw_close should do nothing
      >     .bdrv_probe    raw_probe should just return 1.
      
      v1->v2:
      
      On 08/20/13 10:11, Kevin Wolf wrote:
      > Am 16.08.2013 um 16:15 hat Laszlo Ersek geschrieben:
      
      >> +static int raw_probe(void)
      >> +{
      >> +    return 1;
      >> +}
      >
      > Maybe add a comment here like "smallest possible positive score so that
      > raw is used if and only if no other block driver works".
      Signed-off-by: NLaszlo Ersek <lersek@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      01dd96d8
    • L
      raw_bsd: add raw_create() · 1565262c
      Laszlo Ersek 提交于
      On 08/05/13 15:03, Paolo Bonzini wrote:
      >
      > [...]
      >
      > 2) This is also a simple forwarder function:
      >
      >     .bdrv_create
      >
      > but there is no BlockDriverState argument so the forwarded-to function
      > does not have a bs->file argument either.  The forwarded-to function is
      > bdrv_create_file.
      Signed-off-by: NLaszlo Ersek <lersek@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      1565262c
    • L
      raw_bsd: emit debug events in bdrv_co_readv() and bdrv_co_writev() · 9eaafd90
      Laszlo Ersek 提交于
      On 08/05/13 15:03, Paolo Bonzini wrote:
      >
      > [...]
      >
      > 1) BlockDriver is a struct in which these function members are
      > interesting:
      >
      >     .bdrv_reopen_prepare
      >     .bdrv_co_readv
      >     .bdrv_co_writev
      >     .bdrv_co_is_allocated
      >     .bdrv_co_write_zeroes
      >     .bdrv_co_discard
      >     .bdrv_getlength
      >     .bdrv_get_info
      >     .bdrv_truncate
      >     .bdrv_is_inserted
      >     .bdrv_media_changed
      >     .bdrv_eject
      >     .bdrv_lock_medium
      >     .bdrv_ioctl
      >     .bdrv_aio_ioctl
      >     .bdrv_has_zero_init
      >
      > They should be implemented as simple forwarders (see above). There are
      > 16 functions listed here, you can easily see how this already accounts
      > for 100+ SLOC roughly...
      >
      > The implementations of bdrv_co_readv and bdrv_co_writev should also call
      > BLKDBG_EVENT on bs->file too, before forwarding to bs->file.  The events
      > to be generated are BLKDBG_READ_AIO and BLKDBG_WRITE_AIO.
      Signed-off-by: NLaszlo Ersek <lersek@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      9eaafd90
    • L
      add skeleton for BSD licensed "raw" BlockDriver · e1c66c6d
      Laszlo Ersek 提交于
      On 08/05/13 15:03, Paolo Bonzini wrote:
      >
      >
      > ----- Original Message -----
      >> From: "Laszlo Ersek" <lersek@redhat.com>
      >> To: "Paolo Bonzini" <pbonzini@redhat.com>
      >> Sent: Monday, August 5, 2013 2:43:46 PM
      >> Subject: Re: [PATCH 1/2] raw: add license header
      >>
      >> On 08/02/13 00:27, Paolo Bonzini wrote:
      >>> On 08/01/2013 10:13 AM, Christoph Hellwig wrote:
      >>>> On Wed, Jul 31, 2013 at 08:19:51AM +0200, Paolo Bonzini wrote:
      >>>>> Most of the block layer is under the BSD license, thus it is
      >>>>> reasonable to license block/raw.c the same way.  CCed people should
      >>>>> ACK by replying with a Signed-off-by line.
      >>>>
      >>>> The coded was intended to be GPLv2.
      
      > >>> Laszlo, would you be willing to do clean-room reverse engineering?
      
      >>> (No rants, please. :))
      >>
      >> What's the scope exactly?
      >
      > It's quite small, it's a file full of forwarders like
      >
      > static void raw_foo(BlockDriverState *bs)
      > {
      >     return bdrv_foo(bs->file);
      > }
      >
      > It's 170 lines of code, all as boring as this.  I only picked you
      > because I'm quite certain you have never seen the file (and the answer
      > confirmed it).
      >
      > Basically:
      >
      > 1) BlockDriver is a struct in which these function members are
      > interesting:
      >
      >     .bdrv_reopen_prepare
      >     .bdrv_co_readv
      >     .bdrv_co_writev
      >     .bdrv_co_is_allocated
      >     .bdrv_co_write_zeroes
      >     .bdrv_co_discard
      >     .bdrv_getlength
      >     .bdrv_get_info
      >     .bdrv_truncate
      >     .bdrv_is_inserted
      >     .bdrv_media_changed
      >     .bdrv_eject
      >     .bdrv_lock_medium
      >     .bdrv_ioctl
      >     .bdrv_aio_ioctl
      >     .bdrv_has_zero_init
      >
      > They should be implemented as simple forwarders (see above).
      > There are 16 functions listed here, you can easily see how this
      > already accounts for 100+ SLOC roughly...
      >
      > The implementations of bdrv_co_readv and bdrv_co_writev should also
      > call BLKDBG_EVENT on bs->file too, before forwarding to bs->file.  The
      > events to be generated are BLKDBG_READ_AIO and BLKDBG_WRITE_AIO.
      >
      > 2) This is also a simple forwarder function:
      >
      >     .bdrv_create
      >
      > but there is no BlockDriverState argument so the forwarded-to function
      > does not have a bs->file argument either.  The forwarded-to function
      > is bdrv_create_file.
      >
      > 3) These members are special
      >
      >     .format_name   is the string "raw"
      >     .bdrv_open     raw_open should set bs->sg to bs->file->sg and return 0
      >     .bdrv_close    raw_close should do nothing
      >     .bdrv_probe    raw_probe should just return 1.
      >
      > 4) There is another member, .create_options, which is an array of
      > QEMUOptionParameter structs, terminated by an all-zero item.  The only
      > option you need is for the virtual disk size.  You will find something
      > to copy from in other block drivers, for example block/qcow2.c.
      >
      > 5) Formats are registered with bdrv_register (takes a BlockDriver*).
      > You also need to pass the caller of bdrv_register to block_init.
      >
      > 6) I'm not sure how to organize the patch series, so I'll leave this to
      > your creativity.  I guess in this case move/copy detection of git should
      > be disabled.  I would definitely include this spec in the commit
      > message as a proof of clean-room reverse engineering.
      >
      > 7) Remember a BSD header like the one in block.c.
      >
      > Paolo
      
      This patch implements the email up to the paragraph ending with "100+ SLOC
      roughly". The skeleton is generated from the list there, with a simple
      shell loop using "sed" and the raw_foo() template.
      
      The BSD license block is copied (and reflowed) from
      "util/qemu-progress.c".
      Signed-off-by: NLaszlo Ersek <lersek@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      e1c66c6d
    • P
      block/qcow2.h: Avoid "1LL << 63" (shifts into sign bit) · 127c84e1
      Peter Maydell 提交于
      The expression "1LL << 63" tries to shift the 1 into the sign bit of a
      'long long', which provokes a clang sanitizer warning:
      
      runtime error: left shift of 1 by 63 places cannot be represented in type 'long long'
      
      Use "1ULL << 63" as the definition of QCOW_OFLAG_COPIED instead
      to avoid this. For consistency, we also update the other QCOW_OFLAG
      definitions to use the ULL suffix rather than LL, though only the
      shift by 63 is undefined behaviour.
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      127c84e1
    • K
      qcow2: Change default for new images to compat=1.1 · 9117b477
      Kevin Wolf 提交于
      By the time that qemu 1.7 will be released, enough time will have passed
      since qemu 1.1, which is the first version to understand version 3
      images, that changing the default shouldn't hurt many people any more
      and the benefits of using the new format outweigh the pain.
      
      qemu-iotests already runs with compat=1.1 by default.
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      9117b477
  5. 23 8月, 2013 3 次提交
  6. 22 8月, 2013 5 次提交
  7. 21 8月, 2013 1 次提交
  8. 19 8月, 2013 7 次提交