From: Kevin Wolf <kwolf@redhat.com>
To: anthony@codemonkey.ws
Cc: kwolf@redhat.com, qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH 9/9] scsi-block: always use SG_IO for MMC devices
Date: Fri, 18 Nov 2011 15:03:13 +0100 [thread overview]
Message-ID: <1321624993-19033-10-git-send-email-kwolf@redhat.com> (raw)
In-Reply-To: <1321624993-19033-1-git-send-email-kwolf@redhat.com>
From: Paolo Bonzini <pbonzini@redhat.com>
CD burning messes up the state of the host page cache and host block
device. Just pass all operations down to the device, even though that
might have slightly worse performance. Everything else just is not
reliable in combination with burning.
Reported-by: Thomas Schmitt <scdbackup@gmx.net>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
hw/scsi-disk.c | 16 ++++++++++++++--
1 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
index e3690ec..673948c 100644
--- a/hw/scsi-disk.c
+++ b/hw/scsi-disk.c
@@ -1703,8 +1703,20 @@ static SCSIRequest *scsi_block_new_request(SCSIDevice *d, uint32_t tag,
case WRITE_VERIFY_10:
case WRITE_VERIFY_12:
case WRITE_VERIFY_16:
- return scsi_req_alloc(&scsi_disk_reqops, &s->qdev, tag, lun,
- hba_private);
+ /* MMC writing cannot be done via pread/pwrite, because it sometimes
+ * involves writing beyond the maximum LBA or to negative LBA (lead-in).
+ * And once you do these writes, reading from the block device is
+ * unreliable, too. It is even possible that reads deliver random data
+ * from the host page cache (this is probably a Linux bug).
+ *
+ * We might use scsi_disk_reqops as long as no writing commands are
+ * seen, but performance usually isn't paramount on optical media. So,
+ * just make scsi-block operate the same as scsi-generic for them.
+ */
+ if (s->qdev.type != TYPE_ROM) {
+ return scsi_req_alloc(&scsi_disk_reqops, &s->qdev, tag, lun,
+ hba_private);
+ }
}
return scsi_req_alloc(&scsi_generic_req_ops, &s->qdev, tag, lun,
--
1.7.6.4
next prev parent reply other threads:[~2011-11-18 14:00 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-18 14:03 [Qemu-devel] [PULL 0/9] Block patches for 1.0 Kevin Wolf
2011-11-18 14:03 ` [Qemu-devel] [PATCH 1/9] Documentation: Add section about iSCSI LUNS to qemu-doc Kevin Wolf
2011-11-18 14:03 ` [Qemu-devel] [PATCH 2/9] scsi: fix fw path Kevin Wolf
2011-11-18 14:03 ` [Qemu-devel] [PATCH 3/9] scsi-disk: guess geometry Kevin Wolf
2011-11-18 14:03 ` [Qemu-devel] [PATCH 4/9] atapi: kill MODE SENSE(6), fix MODE SENSE(10) Kevin Wolf
2011-11-18 14:03 ` [Qemu-devel] [PATCH 5/9] scsi: update list of commands Kevin Wolf
2011-11-18 14:03 ` [Qemu-devel] [PATCH 6/9] scsi: fix parsing of allocation length field Kevin Wolf
2011-11-18 14:03 ` [Qemu-devel] [PATCH 7/9] scsi: remove block descriptors from CDs Kevin Wolf
2011-11-18 14:03 ` [Qemu-devel] [PATCH 8/9] scsi: pass down REQUEST SENSE to the device when there is no stored sense Kevin Wolf
2011-11-18 14:03 ` Kevin Wolf [this message]
2011-11-22 0:20 ` [Qemu-devel] [PULL 0/9] Block patches for 1.0 Anthony Liguori
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1321624993-19033-10-git-send-email-kwolf@redhat.com \
--to=kwolf@redhat.com \
--cc=anthony@codemonkey.ws \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).