From: Matthew Wilcox <matthew@wil.cx>
To: "Martin K. Petersen" <martin.petersen@oracle.com>
Cc: James Bottomley <James.Bottomley@HansenPartnership.com>,
linux-scsi@vger.kernel.org
Subject: Re: [DO NOT APPLY] sd take advantage of rotation speed
Date: Sun, 22 Jun 2008 12:44:36 -0600 [thread overview]
Message-ID: <20080622184435.GB4392@parisc-linux.org> (raw)
In-Reply-To: <yq14p7lttuo.fsf@sermon.lab.mkp.net>
On Sun, Jun 22, 2008 at 10:41:35AM -0400, Martin K. Petersen wrote:
> + memset(cmd, 0, 16);
> + cmd[0] = INQUIRY;
> + cmd[1] = 1; /* EVPD */
> + cmd[2] = page; /* VPD page */
> + cmd[3] = len;
This looks like a bug to me.
The MSB of the length is supposed to be in byte 3 and the LSB in byte 4.
So you're asking for much more data than could fit in the buffer --
fortunately the device won't be able to return as much as you ask for,
so the buffer won't overflow.
> + result = scsi_execute_req(sdkp->device, cmd, DMA_FROM_DEVICE, buffer,
> + len, &sshdr, SD_TIMEOUT, SD_MAX_RETRIES);
> +
> + if (media_not_present(sdkp, &sshdr))
> + return -EIO;
> +
> + if (result) {
> + sd_printk(KERN_ERR, sdkp, "EVPD Inquiry failed\n");
> + return -EIO;
> + }
> +
> + if (buffer[1] != page) {
> + sd_printk(KERN_ERR, sdkp, "Page code not %2x (%2x)\n", page,
> + buffer[1]);
> + return -EIO;
> + }
> +
> + return buffer[3];
This isn't true for all pages. For example, 0x83 and 0x85 have a length in
buffer[2] and [3]. Now, all other pages I've looked at reserve byte 2,
and devices should be setting that to 0 ... but I wouldn't feel right
depending on it. For scsi_request_vpd(), I think we should return 0 for
success and -Error. The caller knows which page it requested and can
find out the length for itself.
> +static int sd_get_vpd_page(struct scsi_disk *sdkp, unsigned char *buffer, u8 page, u8 len)
> +{
> + int i, result;
> +
> + /* Get Supported Pages list */
> + if (sd_vpd_inquiry(sdkp, buffer, 0x0, 255) < 0)
> + return -1;
> +
> + for (i = 0 ; i < buffer[3] ; i++)
> + if (buffer[4+i] == page)
> + goto found;
> +
> + return -1;
> +
> +found:
> + result = sd_vpd_inquiry(sdkp, buffer, page, len);
> +
> + if (result < 0)
> + return -1;
> +
> + if (buffer[3] != len)
> + sd_printk(KERN_ERR, sdkp, "VPD pg %x, req. %u bytes, got %u\n",
> + page, len, buffer[3]);
> +
> + return result;
> +}
Yes, this refactoring is exactly what I had in mind.
--
Intel are signing my paycheques ... these opinions are still mine
"Bill, look, we understand that you're interested in selling us this
operating system, but compare it to ours. We can't possibly take such
a retrograde step."
next prev parent reply other threads:[~2008-06-22 18:44 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-06-19 16:03 [DO NOT APPLY] sd take advantage of rotation speed Matthew Wilcox
2008-06-19 17:12 ` Mike Anderson
2008-06-19 18:10 ` Matthew Wilcox
2008-06-22 12:16 ` Boaz Harrosh
2008-06-22 13:19 ` Matthew Wilcox
2008-06-22 13:27 ` Boaz Harrosh
2008-06-22 13:38 ` James Bottomley
2008-06-22 14:03 ` Matthew Wilcox
2008-06-22 14:41 ` Martin K. Petersen
2008-06-22 18:44 ` Matthew Wilcox [this message]
2008-06-25 2:06 ` Martin K. Petersen
2008-06-22 17:26 ` James Bottomley
2008-06-25 13:47 ` Jens Axboe
2008-06-25 13:57 ` Jens Axboe
2008-06-25 14:24 ` Ric Wheeler
2008-06-25 16:25 ` Boaz Harrosh
2008-06-25 16:57 ` Jens Axboe
2008-06-25 17:20 ` Matthew Wilcox
2008-06-25 17:26 ` Jens Axboe
2008-06-25 17:34 ` Matthew Wilcox
2008-06-25 17:43 ` James Bottomley
2008-06-25 17:53 ` Matthew Wilcox
2008-06-25 18:01 ` Jens Axboe
2008-06-25 18:06 ` James Bottomley
2008-06-25 17:59 ` Jens Axboe
2008-06-25 18:06 ` Martin K. Petersen
2008-06-25 18:12 ` Jens Axboe
2008-07-28 13:36 ` Ric Wheeler
2008-07-28 14:10 ` James Bottomley
2008-07-28 14:31 ` Martin K. Petersen
2008-07-31 21:00 ` Grant Grundler
2008-07-31 21:19 ` Andrew Patterson
2008-07-31 22:26 ` Ric Wheeler
2008-07-31 23:44 ` Grant Grundler
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=20080622184435.GB4392@parisc-linux.org \
--to=matthew@wil.cx \
--cc=James.Bottomley@HansenPartnership.com \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
/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).