--- ./lib/qpxtransport/qpx_transport.cpp 2008-05-01 01:11:36.000000000 +0200 +++ ./lib/qpxtransport/qpx_transport.cpp2 2008-05-01 01:11:54.000000000 +0200 @@ -14,6 +14,7 @@ int sense2str(int err, char* str); #if defined(__unix) || defined(__unix__) +#include #include #include #include @@ -211,6 +211,21 @@ #define KERNEL_BROKEN 0 if (use_sg_io) { + /* see linux-2.6.23/block/scsi_ioctl.c:36 */ + static const unsigned char scsi_command_size[8] = + { + 6, 10, 10, 12, + 16, 12, 10, 10 + }; + char cmdsize, opcode; + + opcode = cgc.cmd[0]; + /* see linux-2.6.23/include/scsi/scsi.h:25 */ + cmdsize = scsi_command_size[((opcode) >> 5) & 7]; + if ((sg_io.cmd_len > 0) && (sg_io.cmd_len < cmdsize)) { + sg_io.cmd_len = cmdsize; + } + sg_io.dxferp = buf; sg_io.dxfer_len = sz; sg_io.dxfer_direction = use_sg_io[dir];