Commit 54156ef1 authored by Douglas Gilbert's avatar Douglas Gilbert Committed by James Bottomley

[PATCH] sg driver for lk 2.5.70

This is a bug fix for a flawed patch I put in lk 2.4.19
(sg version 3.1.24) and has been carried through into
the 2.5 series. Thanks to Andy Polyakov
<appro@fy.chalmers.se> for pointing this out (more than once).

The sg.h header didn't get updated last time I submitted
an sg patch so this patch also addresses that.
parent 83169a1a
......@@ -18,8 +18,8 @@
*
*/
#include <linux/config.h>
static char *sg_version_str = "3.5.28 [20030308]";
static int sg_version_num = 30528; /* 2 digits for each component */
static char *sg_version_str = "3.5.29 [20030529]";
static int sg_version_num = 30529; /* 2 digits for each component */
/*
* D. P. Gilbert (dgilbert@interlog.com, dougg@triode.net.au), notes:
* - scsi logging is available via SCSI_LOG_TIMEOUT macros. First
......@@ -1994,11 +1994,8 @@ sg_write_xfer(Sg_request * srp)
if (res)
return res;
for (; k < schp->k_use_sg; ++k, ++sclp) {
ksglen = (int) sclp->length;
p = sg_scatg2virt(sclp);
if (NULL == p)
break;
for (; p; ++sclp, ksglen = (int) sclp->length,
p = sg_scatg2virt(sclp)) {
if (usglen <= 0)
break;
if (ksglen > usglen) {
......@@ -2025,6 +2022,9 @@ sg_write_xfer(Sg_request * srp)
up += ksglen;
usglen -= ksglen;
}
++k;
if (k >= schp->k_use_sg)
return 0;
}
}
}
......@@ -2151,11 +2151,8 @@ sg_read_xfer(Sg_request * srp)
if (res)
return res;
for (; k < schp->k_use_sg; ++k, ++sclp) {
ksglen = (int) sclp->length;
p = sg_scatg2virt(sclp);
if (NULL == p)
break;
for (; p; ++sclp, ksglen = (int) sclp->length,
p = sg_scatg2virt(sclp)) {
if (usglen <= 0)
break;
if (ksglen > usglen) {
......@@ -2182,6 +2179,9 @@ sg_read_xfer(Sg_request * srp)
up += ksglen;
usglen -= ksglen;
}
++k;
if (k >= schp->k_use_sg)
return 0;
}
}
}
......
......@@ -9,11 +9,18 @@
Original driver (sg.h):
* Copyright (C) 1992 Lawrence Foard
Version 2 and 3 extensions to driver:
* Copyright (C) 1998 - 2002 Douglas Gilbert
* Copyright (C) 1998 - 2003 Douglas Gilbert
Version: 3.5.27 (20020812)
Version: 3.5.29 (20030529)
This version is for 2.5 series kernels.
Changes since 3.5.28 (20030308)
- fix bug introduced in version 3.1.24 (last segment of sgat list)
Changes since 3.5.27 (20020812)
- remove procfs entries: hosts, host_hdr + host_strs (now in sysfs)
- add sysfs sg driver params: def_reserved_size, allow_dio, version
- new boot option: "sg_allow_dio" and module parameter: "allow_dio"
- multiple internal changes due to scsi subsystem rework
Changes since 3.5.26 (20020708)
- re-add direct IO using Kai Makisara's work
- re-tab to 8, start using C99-isms
......@@ -237,7 +244,7 @@ typedef struct sg_req_info { /* used by SG_GET_REQUEST_TABLE ioctl() */
read/written by a single scsi command. The user can find the value of
PAGE_SIZE by calling getpagesize() defined in unistd.h . */
#define SG_DEFAULT_RETRIES 1
#define SG_DEFAULT_RETRIES 0
/* Defaults, commented if they differ from original sg driver */
#define SG_DEF_FORCE_LOW_DMA 0 /* was 1 -> memory below 16MB on i386 */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment