Skip to contentSkip to conversation

Possible bug with 2.6.20 and SG_IO

DISCUSSION Wakko Warner 1 participant 1 message Jun 8, 2007 SCSI

lore
Share & tools
lore
#0 lore raw

Please keep me in the CC.

I was attempting to send an INQUIRY to a scsi device using /dev/sg* and SG_IO. My first attempt hard locked the machine.

My code was:
memset(&sg_io, 0, sizeof(sg_io));
sg_io.interface_id='S';
sg_io.dxfer_direction=SG_DXFER_FROM_DEV;
sg_io.cmd_len=sizeof(cmd);
sg_io.cmdp=(void *)&cmd;
sg_io.timeout=1000; /* 1 second */
sg_io.dxferp=inq;
if (sense)
{
sg_io.mx_sb_len=sizeof(*sense);
sg_io.sbp=(void *)sense;
}

if (ioctl(fd, SG_IO, &sg_io) == -1)
return -1;

I'm fairly new to SG_IO so I didn't notice what I did wrong until it was too late. I did not set sg_io.dxfer_len=sizeof(*inq) ! This was with sg8, a scsi processor (saf-te device) on an aic7xxx (aha-39160) controller.

I decided to try it on my laptop, sg1 (a usb flash drive) just gave me some bizare data, sg0 (an IDE cdrom using ide-scsi) hard locked the machine. The kernel version on this machine is 2.6.18.

I'm wondering if I hit a bug since the sg_io.dxfer_len was 0 when it locked up. Maybe the SG_IO code should detect that if there is an xfer to/from the device and sg_io.dxfer_len is 0 returning -1 ?

P.S. I know ide-scsi is depreciated and I have problems with it. I intend to migrate that machine to libata on the next kernel upgrade.

Signature · 2 lines
 Lab tests show that use of micro$oft causes cancer in lab animals
 Got Gas???