From nobody  Wed Feb 25 10:22:47 1998
Received: (from nobody@localhost)
          by hub.freebsd.org (8.8.8/8.8.8) id KAA13960;
          Wed, 25 Feb 1998 10:22:47 -0800 (PST)
          (envelope-from nobody)
Message-Id: <199802251822.KAA13960@hub.freebsd.org>
Date: Wed, 25 Feb 1998 10:22:47 -0800 (PST)
From: gene@nttlabs.com
To: freebsd-gnats-submit@freebsd.org
Subject: Generic SCSI ioctl w/ big data transfer fails with "physio split the request" diagnostics.
X-Send-Pr-Version: www-1.0

>Number:         5846
>Category:       kern
>Synopsis:       Generic SCSI ioctl w/ big data transfer fails with "physio split the request" diagnostics.
>Confidential:   no
>Severity:       critical
>Priority:       high
>Responsible:    freebsd-bugs
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Wed Feb 25 10:30:01 PST 1998
>Closed-Date:    Tue Jun 16 14:59:17 MEST 1998
>Last-Modified:  Tue Jun 16 15:01:26 MEST 1998
>Originator:     Eugene M. Kim
>Release:        3.0-CURRENT
>Organization:
NTT Multimedia Communications Laboratories
>Environment:
FreeBSD seerajeane.ho.pl.cp 3.0-CURRENT FreeBSD 3.0-CURRENT #3: Wed Feb 25 09:43:49 PST 1998     root@seerajeane.ho.pl.cp:/usr/src/sys/compile/SEERA  i386
SCSI controller: Adaptec 2940UW
>Description:
Generic SCSI ioctl, particularly SCIOCCOMMAND, with data-in/out phase
fails if the size of data to be transferred is larger than a certain
threshold (approximately 128 bytes in my case).  The kernel dumps
"physio split the request.. cannot proceed" onto the console and the
ioctl returns -1 with errno=EIO, as programmed in /sys/scsi/scsi_ioctl.h.

>How-To-Repeat:
Run a program which uses a user-level SCSI command directly with
SCSI devices. (e.g. scsi(8), /usr/ports/sysutils/cdrecord)
>Fix:
None known.
>Release-Note:
>Audit-Trail:

From: Bruce Evans <bde@zeta.org.au>
To: freebsd-gnats-submit@FreeBSD.ORG, gene@nttlabs.com
Cc:  Subject: Re: kern/5846: Generic SCSI ioctl w/ big data transfer fails with "physio split the request" diagnostics.
Date: Thu, 26 Feb 1998 15:12:19 +1100

 >>Description:
 >Generic SCSI ioctl, particularly SCIOCCOMMAND, with data-in/out phase
 >fails if the size of data to be transferred is larger than a certain
 >threshold (approximately 128 bytes in my case).  The kernel dumps
 >"physio split the request.. cannot proceed" onto the console and the
 >ioctl returns -1 with errno=EIO, as programmed in /sys/scsi/scsi_ioctl.h.
 
 This is essentially the same problem as in PR 5599.
 
 >>Fix:
 
 Untested unimplemented fixes:
 
 1) In maxphys(), don't reduce the transfer size to bp->b_kvasize if that
    size is 0.
 2) Consider fixing all the places that allocate buffer headers bogusly
    using malloc() and bzero().  scsi_do_ioctl() knows nothing of
    bp->b_kvasize, but it happens to initialize it correctly using
    bzero() (I think the bug is in maxphys() in this case - some buffers
    just don't have kva).
 
 Bruce
State-Changed-From-To: open->closed 
State-Changed-By: bde 
State-Changed-When: Tue Jun 16 14:59:17 MEST 1998 
State-Changed-Why:  
Believed to be fixed in rev.1.26 of kern_physio.c. 
>Unformatted:
