[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

CVS Update: src



CVSROOT:	/cvs
Module name:	src
Repository:	src/sys/dev/ic/
Changes by:	odin@mace.cleannorth.org.	03/06/12 18:12:34

Modified files:
	src/sys/dev/ic/: siop.c 

Log message:
	From OPENBSD_3_3
	
	MFC:
	Fix by krw@
	
	Fix erroneous handling of i/o's during a reset.
	
	a) Set xs->status rather than cmd_tables->status because there will be
	no interrupt processing to move it from cmd_tables->status to
	xs->status.
	
	b) Set cmd_c.status to correct value (CMDST_SENSE_DONE) when an active
	sense command is reset.
	
	c) Don't put a reset command from the ready queue into the free_list
	twice, once in siop_scsicmd_end() and once manually.
	
	Condition a) meant that the scsi layer was seeing successfully
	completed i/o's (xs->error == XS_NOERROR) when they were in fact reset
	and should have had xs->error == XS_TIMEOUT or xs->error == XS_RESET.
	This meant lost data on output, and random or zero'ed data on input.
	
	Condition b) meant that the wrong bus_dmamap_sync() was called, though
	the actual action was apparently identical.
	
	Condition c) meant that the free_list could become corrupt.
	
	The problem was discovered by pb@ on a heavily loaded server that
	experienced timeouts. This fix was tested by pb@ and henric@ to prove
	it did not affect normal processing. If nothing else it will provide
	better error messages if the problem is ever encountered again.
	
	Probably a good candidate for -stable if pb@ can successfully
	reproduce his timeout problems and not have his server crash.
	
	deraadt@ ok


Main Menu:

Site Tools:


Here, spammer, have some addresses.