All of lore.kernel.org
 help / color / mirror / Atom feed
From: Douglas Gilbert <dgilbert@interlog.com>
To: bugzilla-daemon@bugzilla.kernel.org
Cc: linux-scsi@vger.kernel.org
Subject: Re: [Bug 15185] New: Sending a 48bit ATA-Command with "CheckCondition" through SG_IO does not return correct 48bit sense descriptor
Date: Mon, 01 Feb 2010 13:11:38 -0500	[thread overview]
Message-ID: <4B67195A.9060806@interlog.com> (raw)
In-Reply-To: <bug-15185-11613@http.bugzilla.kernel.org/>

[-- Attachment #1: Type: text/plain, Size: 2445 bytes --]

bugzilla-daemon@bugzilla.kernel.org wrote:
> http://bugzilla.kernel.org/show_bug.cgi?id=15185
> 
>            Summary: Sending a 48bit ATA-Command with "CheckCondition"
>                     through SG_IO does not return correct 48bit sense
>                     descriptor
>            Product: SCSI Drivers
>            Version: 2.5
>     Kernel Version: 2.6.31
>           Platform: All
>         OS/Version: Linux
>               Tree: Mainline
>             Status: NEW
>           Severity: normal
>           Priority: P1
>          Component: Other
>         AssignedTo: scsi_drivers-other@kernel-bugs.osdl.org
>         ReportedBy: stefan.huebner@stud.tu-ilmenau.de
>         Regression: No
> 
> 
> Example: sending a correct "READ_NATIVE_MAX_ADDRESS_EXT" to /dev/sdd (opened
> O_RDWR | O_NONBLOCK) via ATA_PASSTHROUGH_16 (SCSI-Command 0x85) with the EXTEND
> and the CHECK_CONDITION bits set to 1 yields sense data in descriptor-format. 
> Unfortunately, the descriptor does not have EXTEND set, and by that only
> returns 24 Bits of LBA.
> 
> This obviously is a bug, as the SAT-2 Draft says: "If the sense data is for an
> ATA PASS-THROUGH (16) command with the EXTEND bit set to one, then the SATL
> shall return the 48-bit extended status and shall set the EXTEND bit to one."
> 
> Contents of important data-structures for SG_IO:
> sg_io_hdr.cmdlen = 16
> *sg_io_hdr.cmdp = {0x85 0x07 0x20 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
> 0x00 0x00 0x27 0x00}
> 
> sense-data after command:
> 0x72 0x00 0x00 0x00 0x00 0x00 0x00 0x0e 0x09 0x0c 0x00 0x00 0x00 0x00 0x00 0xaf
> 0x00 0x6d 0x00 0x70 0x00 0x50
> meaning: descriptor-sense, no error
> descriptor:
>  code=0x09 -> ATA-Return descriptor
>  length=0x0c
>  EXTEND=0
>  Error = 0x00
>  SectorCount = 0x00
>  LBA_Low = 0xaf
>  LBA_Mid = 0x6d
>  LBA_High= 0x70
>  Device  = 0
>  Status  = DeviceReady | DeferredWriteError
> 
> The drive used should be reporting a native max lba of 0x74706daf (1.02TB), so
> the expected sense data should look like:
> 0x72 0x00 0x00 0x00 0x00 0x00 0x00 0x0e 0x09 0x0c 0x01 0x00 0x00 0x00 0x6d 0xaf
> 0x74 0x70 0x00 0x00 0x00 0x50

This bug does not occur in lk 2.6.30 but does in lk
2.6.32 . There was a pretty large rework of libata
in that period and there is obvious bug in
drivers/ata/libata-scsi.c that causes this.

The attached patch fixes this problem in lk 2.6.32 in
my test.

Signed-off-by: Douglas Gilbert <dgilbert@interlog.com>





[-- Attachment #2: latascsi2632.diff --]
[-- Type: text/x-patch, Size: 492 bytes --]

--- linux/drivers/ata/libata-scsi.c	2009-12-03 11:11:13.000000000 -0500
+++ linux/drivers/ata/libata-scsi.c2632dpg1	2010-02-01 10:55:36.000000000 -0500
@@ -2825,7 +2825,7 @@
 	 * write indication (used for PIO/DMA setup), result TF is
 	 * copied back and we don't whine too much about its failure.
 	 */
-	tf->flags = ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
+	tf->flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
 	if (scmd->sc_data_direction == DMA_TO_DEVICE)
 		tf->flags |= ATA_TFLAG_WRITE;
 


  reply	other threads:[~2010-02-01 18:11 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-01-31 11:30 [Bug 15185] New: Sending a 48bit ATA-Command with "CheckCondition" through SG_IO does not return correct 48bit sense descriptor bugzilla-daemon
2010-02-01 18:11 ` Douglas Gilbert [this message]
2010-02-01 18:25   ` Douglas Gilbert
2010-02-01 19:01 ` [Bug 15185] " bugzilla-daemon
2010-02-01 19:06 ` bugzilla-daemon
2010-02-01 21:22 ` bugzilla-daemon
2010-02-09 16:13 ` bugzilla-daemon

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=4B67195A.9060806@interlog.com \
    --to=dgilbert@interlog.com \
    --cc=bugzilla-daemon@bugzilla.kernel.org \
    --cc=linux-scsi@vger.kernel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.