qemu-commits
[Top][All Lists]
Advanced

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

[Qemu-commits] [qemu/qemu] a410a7: backup: allow target without .bdrv_ge


From: GitHub
Subject: [Qemu-commits] [qemu/qemu] a410a7: backup: allow target without .bdrv_get_info
Date: Mon, 13 Mar 2017 11:15:09 -0700

  Branch: refs/heads/master
  Home:   https://github.com/qemu/qemu
  Commit: a410a7f1af725cee94c7c847ddc85be043d88439
      
https://github.com/qemu/qemu/commit/a410a7f1af725cee94c7c847ddc85be043d88439
  Author: Vladimir Sementsov-Ogievskiy <address@hidden>
  Date:   2017-03-13 (Mon, 13 Mar 2017)

  Changed paths:
    M block/backup.c

  Log Message:
  -----------
  backup: allow target without .bdrv_get_info

Currently backup to nbd target is broken, as nbd doesn't have
.bdrv_get_info realization.

Signed-off-by: Vladimir Sementsov-Ogievskiy <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>


  Commit: 9103f1ceb46614b150bcbc3c9a4fbc72b47fedcc
      
https://github.com/qemu/qemu/commit/9103f1ceb46614b150bcbc3c9a4fbc72b47fedcc
  Author: Fam Zheng <address@hidden>
  Date:   2017-03-13 (Mon, 13 Mar 2017)

  Changed paths:
    M block/file-posix.c

  Log Message:
  -----------
  file-posix: Consider max_segments for BlockLimits.max_transfer

BlockLimits.max_transfer can be too high without this fix, guest will
encounter I/O error or even get paused with werror=stop or rerror=stop. The
cause is explained below.

Linux has a separate limit, /sys/block/.../queue/max_segments, which in
the worst case can be more restrictive than the BLKSECTGET which we
already consider (note that they are two different things). So, the
failure scenario before this patch is:

1) host device has max_sectors_kb = 4096 and max_segments = 64;
2) guest learns max_sectors_kb limit from QEMU, but doesn't know
   max_segments;
3) guest issues e.g. a 512KB request thinking it's okay, but actually
   it's not, because it will be passed through to host device as an
   SG_IO req that has niov > 64;
4) host kernel doesn't like the segmenting of the request, and returns
   -EINVAL;

This patch checks the max_segments sysfs entry for the host device and
calculates a "conservative" bytes limit using the page size, which is
then merged into the existing max_transfer limit. Guest will discover
this from the usual virtual block device interfaces. (In the case of
scsi-generic, it will be done in the INQUIRY reply interception in
device model.)

The other possibility is to actually propagate it as a separate limit,
but it's not better. On the one hand, there is a big complication: the
limit is per-LUN in QEMU PoV (because we can attach LUNs from different
host HBAs to the same virtio-scsi bus), but the channel to communicate
it in a per-LUN manner is missing down the stack; on the other hand,
two limits versus one doesn't change much about the valid size of I/O
(because guest has no control over host segmenting).

Also, the idea to fall back to bounce buffering in QEMU, upon -EINVAL,
was explored. Unfortunately there is no neat way to ensure the bounce
buffer is less segmented (in terms of DMA addr) than the guest buffer.

Practically, this bug is not very common. It is only reported on a
Emulex (lpfc), so it's okay to get it fixed in the easier way.

Reviewed-by: Paolo Bonzini <address@hidden>
Signed-off-by: Fam Zheng <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>


  Commit: e32ccbc6e9ff95330e916fd72c541894d440fcd5
      
https://github.com/qemu/qemu/commit/e32ccbc6e9ff95330e916fd72c541894d440fcd5
  Author: Eric Blake <address@hidden>
  Date:   2017-03-13 (Mon, 13 Mar 2017)

  Changed paths:
    M MAINTAINERS
    M block/Makefile.objs
    R block/archipelago.c
    M configure
    M qapi/block-core.json
    M tests/qemu-iotests/025
    M tests/qemu-iotests/common
    M tests/qemu-iotests/common.filter
    M tests/qemu-iotests/common.rc

  Log Message:
  -----------
  block: Drop unmaintained 'archipelago' driver

The driver has failed to build since commit da34e65, in qemu 2.6,
due to a missing include of qapi/error.h for error_setg().
Since no one has complained in three releases, it is easier to
remove the dead code than to keep it around, especially since it
is not being built by default and therefore prone to bitrot.

Signed-off-by: Eric Blake <address@hidden>
Reviewed-by: Max Reitz <address@hidden>
Reviewed-by: Fam Zheng <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>


  Commit: 666a9543fa957169b6e25805aac88ca72c08f0b5
      
https://github.com/qemu/qemu/commit/666a9543fa957169b6e25805aac88ca72c08f0b5
  Author: Eric Blake <address@hidden>
  Date:   2017-03-13 (Mon, 13 Mar 2017)

  Changed paths:
    M block/backup.c

  Log Message:
  -----------
  backup: React to bdrv_is_allocated() errors

If bdrv_is_allocated() fails, we should immediately do the backup
error action, rather than attempting backup_do_cow() (although
that will likely fail too).

Signed-off-by: Eric Blake <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>


  Commit: 6f712ee08036f4e8066cdddcfed288bf01914e55
      
https://github.com/qemu/qemu/commit/6f712ee08036f4e8066cdddcfed288bf01914e55
  Author: Eric Blake <address@hidden>
  Date:   2017-03-13 (Mon, 13 Mar 2017)

  Changed paths:
    M block/vvfat.c

  Log Message:
  -----------
  vvfat: React to bdrv_is_allocated() errors

If bdrv_is_allocated() fails, we should react to that failure.
For 2 of the 3 callers, reporting the error was easy.  But in
cluster_was_modified() and its lone caller
get_cluster_count_for_direntry(), it's rather invasive to update
the logic to pass the error back; so there, I went with merely
documenting the issue by changing the return type to bool (in
all likelihood, treating the cluster as modified will then
trigger a read which will also fail, and eventually get to an
error - but given the appalling number of abort() calls in this
code, I'm not making it any worse).

Signed-off-by: Eric Blake <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>


  Commit: 7d66b1fbd2112a0c1433ad7106d74c7c39e57f5f
      
https://github.com/qemu/qemu/commit/7d66b1fbd2112a0c1433ad7106d74c7c39e57f5f
  Author: Eric Blake <address@hidden>
  Date:   2017-03-13 (Mon, 13 Mar 2017)

  Changed paths:
    M migration/block.c

  Log Message:
  -----------
  migration: Document handling of bdrv_is_allocated() errors

Migration is the only code left in the tree that does not react
to bdrv_is_allocated() failures.  But as there is no useful way
to react to the failure, and we are merely skipping unallocated
sectors on success, just document that our choice of handling
is intended.

Signed-off-by: Eric Blake <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>


  Commit: 466787fbca9b25b47365b3d2c09d308df67a61db
      
https://github.com/qemu/qemu/commit/466787fbca9b25b47365b3d2c09d308df67a61db
  Author: Kevin Wolf <address@hidden>
  Date:   2017-03-13 (Mon, 13 Mar 2017)

  Changed paths:
    M block.c

  Log Message:
  -----------
  block: Remove check_new_perm from bdrv_replace_child()

All callers pass false now, so the parameter can go away again.

Signed-off-by: Kevin Wolf <address@hidden>
Reviewed-by: Eric Blake <address@hidden>


  Commit: b64aa441955b9aa72a05456650303015ac2bea28
      
https://github.com/qemu/qemu/commit/b64aa441955b9aa72a05456650303015ac2bea28
  Author: Kevin Wolf <address@hidden>
  Date:   2017-03-13 (Mon, 13 Mar 2017)

  Changed paths:
    M block/io.c

  Log Message:
  -----------
  block: Request block status from *file for BDRV_BLOCK_RAW

This fixes bdrv_co_get_block_status() for the bdrv_mirror_top block
driver, which must fall through to bs->backing instead of bs->file.

Signed-off-by: Kevin Wolf <address@hidden>
Reviewed-by: Eric Blake <address@hidden>


  Commit: 91965658664cc5da412049de0dd309d50ac09917
      
https://github.com/qemu/qemu/commit/91965658664cc5da412049de0dd309d50ac09917
  Author: Kevin Wolf <address@hidden>
  Date:   2017-03-13 (Mon, 13 Mar 2017)

  Changed paths:
    M block/commit.c

  Log Message:
  -----------
  commit: Implement bdrv_commit_top.bdrv_co_get_block_status

In some cases, bdrv_co_get_block_status() is called recursively for the
whole backing chain. The automatically inserted bdrv_commit_top filter
driver must not stop the recursion, so implement a callback that simply
forwards the request to bs->backing.

Signed-off-by: Kevin Wolf <address@hidden>
Reviewed-by: Eric Blake <address@hidden>


  Commit: 9e7e940c3dc9d9643065dc0f64eb51efca954e54
      
https://github.com/qemu/qemu/commit/9e7e940c3dc9d9643065dc0f64eb51efca954e54
  Author: Kevin Wolf <address@hidden>
  Date:   2017-03-13 (Mon, 13 Mar 2017)

  Changed paths:
    M block.c

  Log Message:
  -----------
  block: Refresh filename after changing backing file

In bdrv_open_inherit(), the filename is refreshed after opening the
backing file, but we neglected to do the same when the backing file
changes later.

Signed-off-by: Kevin Wolf <address@hidden>
Reviewed-by: Eric Blake <address@hidden>


  Commit: fd4a6493bb7c5f9bea0e7d9de09ccc0d573e3789
      
https://github.com/qemu/qemu/commit/fd4a6493bb7c5f9bea0e7d9de09ccc0d573e3789
  Author: Kevin Wolf <address@hidden>
  Date:   2017-03-13 (Mon, 13 Mar 2017)

  Changed paths:
    M block/mirror.c

  Log Message:
  -----------
  mirror: Implement .bdrv_refresh_filename

We want query-block to return the right filename, even if a mirror job
put a bdrv_mirror_top on top of the actual image format driver. Let
bdrv_mirror_top.bdrv_refresh_filename get the filename from its backing
file.

Signed-off-by: Kevin Wolf <address@hidden>
Reviewed-by: Eric Blake <address@hidden>


  Commit: dcbf37ce41a52698550f8f8b2f14b5e6fee22d2d
      
https://github.com/qemu/qemu/commit/dcbf37ce41a52698550f8f8b2f14b5e6fee22d2d
  Author: Kevin Wolf <address@hidden>
  Date:   2017-03-13 (Mon, 13 Mar 2017)

  Changed paths:
    M block/commit.c

  Log Message:
  -----------
  commit: Implement .bdrv_refresh_filename

We want query-block to return the right filename, even if a commit job
put a bdrv_commit_top on top of the actual image format driver. Let
bdrv_commit_top.bdrv_refresh_filename get the filename from its backing
file.

Signed-off-by: Kevin Wolf <address@hidden>
Reviewed-by: Eric Blake <address@hidden>


  Commit: 5bac3c39c82e149515c10643acafd1d292433775
      
https://github.com/qemu/qemu/commit/5bac3c39c82e149515c10643acafd1d292433775
  Author: Peter Maydell <address@hidden>
  Date:   2017-03-13 (Mon, 13 Mar 2017)

  Changed paths:
    M MAINTAINERS
    M block.c
    M block/Makefile.objs
    R block/archipelago.c
    M block/backup.c
    M block/commit.c
    M block/file-posix.c
    M block/io.c
    M block/mirror.c
    M block/vvfat.c
    M configure
    M migration/block.c
    M qapi/block-core.json
    M tests/qemu-iotests/025
    M tests/qemu-iotests/common
    M tests/qemu-iotests/common.filter
    M tests/qemu-iotests/common.rc

  Log Message:
  -----------
  Merge remote-tracking branch 'remotes/kevin/tags/for-upstream' into staging

Block layer fixes for 2.9.0-rc1

# gpg: Signature made Mon 13 Mar 2017 11:53:16 GMT
# gpg:                using RSA key 0x7F09B272C88F2FD6
# gpg: Good signature from "Kevin Wolf <address@hidden>"
# Primary key fingerprint: DC3D EB15 9A9A F95D 3D74  56FE 7F09 B272 C88F 2FD6

* remotes/kevin/tags/for-upstream:
  commit: Implement .bdrv_refresh_filename
  mirror: Implement .bdrv_refresh_filename
  block: Refresh filename after changing backing file
  commit: Implement bdrv_commit_top.bdrv_co_get_block_status
  block: Request block status from *file for BDRV_BLOCK_RAW
  block: Remove check_new_perm from bdrv_replace_child()
  migration: Document handling of bdrv_is_allocated() errors
  vvfat: React to bdrv_is_allocated() errors
  backup: React to bdrv_is_allocated() errors
  block: Drop unmaintained 'archipelago' driver
  file-posix: Consider max_segments for BlockLimits.max_transfer
  backup: allow target without .bdrv_get_info

Signed-off-by: Peter Maydell <address@hidden>


Compare: https://github.com/qemu/qemu/compare/f962709c69a0...5bac3c39c82e

reply via email to

[Prev in Thread] Current Thread [Next in Thread]