Bug in SCSI ioctl? (Was: OT - Journaling File Systems?)
Edwards, Scott (MED, Kelly IT Resouces)
James.Edwards at med.ge.com
Tue May 11 19:07:52 UTC 2004
My appologies for replying to my own e-mail. I have found and
subscribed to the linux-scsi mailing list at kernel.org (as listed in
the /usr/src/linux/MAINTAINERS file). I am currently looking through
the archives to see if I can find anything there. I know I should have
RTFM first...
-----Original Message-----
From: fedora-test-list-bounces at redhat.com
[mailto:fedora-test-list-bounces at redhat.com]On Behalf Of Edwards, Scott
(MED, Kelly IT Resouces)
Sent: Tuesday, May 11, 2004 12:02 PM
To: 'For testers of Fedora Core development releases'
Subject: Bug in SCSI ioctl? (Was: OT - Journaling File Systems?)
I am still trying to switch off the write cache on the serial ATA
drives. I
first tried removing the scsi check from hdparms to allow the -W flag to
be
passed to a scsi device. I got a "Invalid Argument" error back from it.
I then tried the sg_utils and I couldn't get them to work either (I
can't
remember now how they failed).
So finally I took some code from both the hdparm and sg_utils and made
the
following little program (note I left out the #includes):
int main()
{
int fd;
int result;
unsigned char args[4] = {WIN_SETFEATURES,0,0x82,0};
fd = open("/dev/sda", O_RDONLY|O_NONBLOCK);
if (fd < 0) {
perror("/dev/sda");
exit(errno);
}
result = ioctl(fd, SCSI_IOCTL_SEND_COMMAND, &args);
if (result) {
perror(" SCSI_IOCTL_SEND_COMMAND(setcache) failed");
}
else {
printf("OK!");
}
close(fd);
return result;
}
When I run it I get the same result as with hdparms: "Invalid Argument".
So
I started digging further into the problem and I have found where it
fails
and gets rejected. It's in the
/usr/src/linux/drivers/block/scsi_ioctl.c
file. In the scsi_cmd_ioctl routine, in the SCSI_IOCTL_SEND_COMMAND
case it
casts the arguments to (Scsi_Ioctl_Command *) and passes it to the
sg_scsi_ioctl routine (which is also in the same scsi_ioctl.c file).
One of the first things that sg_scsi_ioctl does is read the inlen and
outlen
from the Scsi_Ioctl_Command structure and verifies they are smaller than
the
page size. It appears to me that the arguments are not a
Scsi_Ioctl_Command
structure. I printk'ed out the inlen and outlen that is read and they
are 8
and 5 some odd megabytes. So then I did a copy_from_user and printed
the
arguments and they are the original args that I passed in: { EF, 00, 82,
00,
... }. My guess is that casting those arguments to Scsi_Ioctl_Command
is
wrong. But then I could be completely wrong, I don't have the big
picture.
I know this is all off topic for this list, but I don't know how to
proceed
from here. Since I don't understand what all should be happening in the
code, I don't know if I should start stirring around trying to get it to
work? Is there a kernel list that I should post to?
Thanks
-Scott
-----Original Message-----
From: fedora-test-list-bounces at redhat.com
[mailto:fedora-test-list-bounces at redhat.com]On Behalf Of Alan Cox
Sent: Tuesday, April 27, 2004 3:05 PM
To: For testers of Fedora Core development releases
Subject: Re: OT - Journaling File Systems?
On Tue, Apr 27, 2004 at 03:50:28PM -0500, Edwards, Scott (MED, Kelly IT
Resouces) wrote:
>
> Unfortunately the drive I have right now is a Serial ATA so FC2
> treats it as a SCSI drive and hdparm won't let me change the
> write cache. I'm trying to dig up a regular IDE drive to test
> it on. Is there any way to change it on a SCSI drive?
Some of the scsi generic tools using /dev/sg can set the mode page
bits that control caching. Nothing Fedora ships however. Also some scsi
controllers can set it at bios time.
--
fedora-test-list mailing list
fedora-test-list at redhat.com
To unsubscribe:
http://www.redhat.com/mailman/listinfo/fedora-test-list
--
fedora-test-list mailing list
fedora-test-list at redhat.com
To unsubscribe:
http://www.redhat.com/mailman/listinfo/fedora-test-list
More information about the fedora-test-list
mailing list