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 @@ ...@@ -18,8 +18,8 @@
* *
*/ */
#include <linux/config.h> #include <linux/config.h>
static char *sg_version_str = "3.5.28 [20030308]"; static char *sg_version_str = "3.5.29 [20030529]";
static int sg_version_num = 30528; /* 2 digits for each component */ static int sg_version_num = 30529; /* 2 digits for each component */
/* /*
* D. P. Gilbert (dgilbert@interlog.com, dougg@triode.net.au), notes: * D. P. Gilbert (dgilbert@interlog.com, dougg@triode.net.au), notes:
* - scsi logging is available via SCSI_LOG_TIMEOUT macros. First * - scsi logging is available via SCSI_LOG_TIMEOUT macros. First
...@@ -1994,11 +1994,8 @@ sg_write_xfer(Sg_request * srp) ...@@ -1994,11 +1994,8 @@ sg_write_xfer(Sg_request * srp)
if (res) if (res)
return res; return res;
for (; k < schp->k_use_sg; ++k, ++sclp) { for (; p; ++sclp, ksglen = (int) sclp->length,
ksglen = (int) sclp->length; p = sg_scatg2virt(sclp)) {
p = sg_scatg2virt(sclp);
if (NULL == p)
break;
if (usglen <= 0) if (usglen <= 0)
break; break;
if (ksglen > usglen) { if (ksglen > usglen) {
...@@ -2025,6 +2022,9 @@ sg_write_xfer(Sg_request * srp) ...@@ -2025,6 +2022,9 @@ sg_write_xfer(Sg_request * srp)
up += ksglen; up += ksglen;
usglen -= ksglen; usglen -= ksglen;
} }
++k;
if (k >= schp->k_use_sg)
return 0;
} }
} }
} }
...@@ -2151,11 +2151,8 @@ sg_read_xfer(Sg_request * srp) ...@@ -2151,11 +2151,8 @@ sg_read_xfer(Sg_request * srp)
if (res) if (res)
return res; return res;
for (; k < schp->k_use_sg; ++k, ++sclp) { for (; p; ++sclp, ksglen = (int) sclp->length,
ksglen = (int) sclp->length; p = sg_scatg2virt(sclp)) {
p = sg_scatg2virt(sclp);
if (NULL == p)
break;
if (usglen <= 0) if (usglen <= 0)
break; break;
if (ksglen > usglen) { if (ksglen > usglen) {
...@@ -2182,6 +2179,9 @@ sg_read_xfer(Sg_request * srp) ...@@ -2182,6 +2179,9 @@ sg_read_xfer(Sg_request * srp)
up += ksglen; up += ksglen;
usglen -= ksglen; usglen -= ksglen;
} }
++k;
if (k >= schp->k_use_sg)
return 0;
} }
} }
} }
......
...@@ -9,11 +9,18 @@ ...@@ -9,11 +9,18 @@
Original driver (sg.h): Original driver (sg.h):
* Copyright (C) 1992 Lawrence Foard * Copyright (C) 1992 Lawrence Foard
Version 2 and 3 extensions to driver: 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. 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) Changes since 3.5.26 (20020708)
- re-add direct IO using Kai Makisara's work - re-add direct IO using Kai Makisara's work
- re-tab to 8, start using C99-isms - re-tab to 8, start using C99-isms
...@@ -237,7 +244,7 @@ typedef struct sg_req_info { /* used by SG_GET_REQUEST_TABLE ioctl() */ ...@@ -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 read/written by a single scsi command. The user can find the value of
PAGE_SIZE by calling getpagesize() defined in unistd.h . */ 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 */ /* Defaults, commented if they differ from original sg driver */
#define SG_DEF_FORCE_LOW_DMA 0 /* was 1 -> memory below 16MB on i386 */ #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