kopia lustrzana https://gitlab.com/sane-project/backends
sanei_scsi.c: Fixed a buf in the rror handling for the Linux SG driver v3.x;
disabled direct IO by defaultDEVEL_2_0_BRANCH-1
rodzic
bc4002f3c8
commit
2b29b35e30
20
README.linux
20
README.linux
|
@ -33,12 +33,12 @@ device mustek:/dev/scanner' is a Mustek ScanExpress 12000SP flatbed scanner
|
||||||
|
|
||||||
If this doesn't work you may have to add the right SCSI generic device name
|
If this doesn't work you may have to add the right SCSI generic device name
|
||||||
to the configuration file. This should be documented in the man page for
|
to the configuration file. This should be documented in the man page for
|
||||||
your backend. To find out about the right SCSI device use sane-find-scanner:
|
your backend. To find out about the right SCSI device use tools/find-scanner:
|
||||||
|
|
||||||
# sane-find-scanner
|
# tools/find-scanner
|
||||||
sane-find-scanner: found scanner "SCANNER 2.02" at device /dev/scanner
|
find-scanner: found scanner "SCANNER 2.02" at device /dev/scanner
|
||||||
sane-find-scanner: found scanner "SCANNER 2.02" at device /dev/sg0
|
find-scanner: found scanner "SCANNER 2.02" at device /dev/sg0
|
||||||
sane-find-scanner: found scanner "SCANNER 2.02" at device /dev/sga
|
find-scanner: found scanner "SCANNER 2.02" at device /dev/sga
|
||||||
|
|
||||||
It may help to set a soft link /dev/scanner to the respective device.
|
It may help to set a soft link /dev/scanner to the respective device.
|
||||||
|
|
||||||
|
@ -60,6 +60,16 @@ idescsi:
|
||||||
SANE. If your scanner isn't found or you encounter segmentation faults
|
SANE. If your scanner isn't found or you encounter segmentation faults
|
||||||
try to disable idescsi.
|
try to disable idescsi.
|
||||||
|
|
||||||
|
Direct IO: Recent versions of the Linux SG driver for the 2.4 kernels support
|
||||||
|
direct IO, i.e., the SCSI adapter's DMA chip copies data directly to/from
|
||||||
|
user memory. Direct IO reduces memory usage and it may give better
|
||||||
|
throughput for very fast scanners, but it can lead to access conflicts,
|
||||||
|
if a backend uses shared memory. Sane does not use direct IO by default,
|
||||||
|
if you want to use it, run
|
||||||
|
|
||||||
|
configure --enable-directio=yes
|
||||||
|
|
||||||
|
|
||||||
Other Information
|
Other Information
|
||||||
=================
|
=================
|
||||||
|
|
||||||
|
|
|
@ -1693,7 +1693,6 @@ issue (struct req *req)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
IF_DBG(if (DBG_LEVEL >= 255) system("cat /proc/scsi/sg/debug 1>&2");)
|
|
||||||
#ifdef SG_IO
|
#ifdef SG_IO
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1916,7 +1915,16 @@ sanei_scsi_req_enter2 (int fd,
|
||||||
req->sgdata.sg3.hdr.sbp = &(req->sgdata.sg3.sense_buffer[0]);
|
req->sgdata.sg3.hdr.sbp = &(req->sgdata.sg3.sense_buffer[0]);
|
||||||
/* 10 minutes should be ok even for slow scanners */
|
/* 10 minutes should be ok even for slow scanners */
|
||||||
req->sgdata.sg3.hdr.timeout = 1000 * 60 * 10;
|
req->sgdata.sg3.hdr.timeout = 1000 * 60 * 10;
|
||||||
|
#ifdef ENABLE_DIRECTIO
|
||||||
|
/* for the adventurous: If direct IO is used,
|
||||||
|
the kernel locks the buffer. This can lead to conflicts,
|
||||||
|
if a backend uses shared memory.
|
||||||
|
OTOH, direct IO may be faster, and it reduces memory usage
|
||||||
|
*/
|
||||||
req->sgdata.sg3.hdr.flags = SG_FLAG_DIRECT_IO;
|
req->sgdata.sg3.hdr.flags = SG_FLAG_DIRECT_IO;
|
||||||
|
#else
|
||||||
|
req->sgdata.sg3.hdr.flags = 0;
|
||||||
|
#endif
|
||||||
req->sgdata.sg3.hdr.pack_id = pack_id++;
|
req->sgdata.sg3.hdr.pack_id = pack_id++;
|
||||||
req->sgdata.sg3.hdr.usr_ptr = 0;
|
req->sgdata.sg3.hdr.usr_ptr = 0;
|
||||||
}
|
}
|
||||||
|
@ -1982,6 +1990,7 @@ sanei_scsi_req_wait (void *id)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
IF_DBG(if (DBG_LEVEL >= 255) system("cat /proc/scsi/sg/debug 1>&2");)
|
||||||
ATOMIC (nread = read (req->fd, &req->sgdata.sg3.hdr, sizeof(Sg_io_hdr));
|
ATOMIC (nread = read (req->fd, &req->sgdata.sg3.hdr, sizeof(Sg_io_hdr));
|
||||||
req->done = 1);
|
req->done = 1);
|
||||||
}
|
}
|
||||||
|
@ -2073,7 +2082,7 @@ sanei_scsi_req_wait (void *id)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* check for errors, but let the sense_handler decide.... */
|
/* check for errors, but let the sense_handler decide.... */
|
||||||
if ( (req->sgdata.sg3.hdr.info && SG_INFO_CHECK != 0)
|
if ( ((req->sgdata.sg3.hdr.info & SG_INFO_CHECK) != 0)
|
||||||
|| (req->sgdata.sg3.hdr.sb_len_wr > 0 &&
|
|| (req->sgdata.sg3.hdr.sb_len_wr > 0 &&
|
||||||
((req->sgdata.sg3.sense_buffer[0] & 0x7f) != 0)))
|
((req->sgdata.sg3.sense_buffer[0] & 0x7f) != 0)))
|
||||||
{
|
{
|
||||||
|
|
Ładowanie…
Reference in New Issue