[STABLE,0.13,06/13] scsi-disk: fix the check of the DBD bit in the MODE SENSE command

Message ID 1284381771-7333-7-git-send-email-kwolf@redhat.com
State New
Headers show

Commit Message

Kevin Wolf Sept. 13, 2010, 12:42 p.m.
From: Bernhard Kohl <bernhard.kohl@nsn.com>

The DBD bit does not work as expected.

"A disable block descriptors (DBD) bit of zero indicates that the target
may return zero or more block descriptors in the returned MODE SENSE
data (see 8.3.3), at the target's discretion. A DBD bit of one
specifies that the target shall not return any block descriptors in the
returned MODE SENSE data."

Signed-off-by: Bernhard Kohl <bernhard.kohl@nsn.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
(cherry picked from commit 333d50fe3d9a1ff0a6a1a44ef42a0d3a2a7f2abe)
 hw/scsi-disk.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)


diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
index 70c7a08..b64dd31 100644
--- a/hw/scsi-disk.c
+++ b/hw/scsi-disk.c
@@ -654,7 +654,7 @@  static int scsi_disk_emulate_mode_sense(SCSIRequest *req, uint8_t *outbuf)
     bdrv_get_geometry(s->bs, &nb_sectors);
-    if ((~dbd) & nb_sectors) {
+    if (!dbd && nb_sectors) {
         if (req->cmd.buf[0] == MODE_SENSE) {
             outbuf[3] = 8; /* Block descriptor length  */
         } else { /* MODE_SENSE_10 */