On Fri, Jun 16, 2017 at 08:40:49PM +0000, Jaromir Dolecek wrote: > Module Name: src > Committed By: jdolecek > Date: Fri Jun 16 20:40:49 UTC 2017 > > Modified Files: > src/sys/dev/ata [jdolecek-ncq]: ata.c ata_wdc.c atavar.h wd.c > src/sys/dev/ic [jdolecek-ncq]: ahcisata_core.c mvsata.c siisata.c wdc.c > src/sys/dev/scsipi [jdolecek-ncq]: atapi_wdc.c > > Log Message: > adjust reset channel and dump paths > - channel reset now always kills active transfer, even on dump path, but > now doesn't touch the queued waiting transfers; also kill_xfer hook is > always called, so that HBA can free any private xfer resources and thus > the dump request has chance to work
Sounds like a recipe for more lost/corrupt data. Remember, channel reset is requestable from userland. > - kill_xfer routines now always call ata_deactivate_xfer(); added KASSERT()s > to ata_free_xfer() to expect deactivated xfer > - when called during channel reset before dump, ata_kill_active() drops > any queued waiting transfers without processing Again, as above. > - do not (re)queue any transfers in wddone() when dumping > - kill AT_RST_NOCMD flag > > This should also hopefully fix the 'polled command has been queued' panic > as reported in: > PR kern/11811 by John Hawkinson > PR kern/47041 by Taylor R Campbell > PR kern/51979 by Martin Husemann > > dump tested working with piixide(4) and ahci(4). mvsata(4) dump times out, > but otherwise tested working, will be fixed separately. siisata(4) > mechanically > changed and not tested. > > > To generate a diff of this commit: > cvs rdiff -u -r1.132.8.8 -r1.132.8.9 src/sys/dev/ata/ata.c > cvs rdiff -u -r1.105.6.3 -r1.105.6.4 src/sys/dev/ata/ata_wdc.c > cvs rdiff -u -r1.92.8.8 -r1.92.8.9 src/sys/dev/ata/atavar.h > cvs rdiff -u -r1.428.2.15 -r1.428.2.16 src/sys/dev/ata/wd.c > cvs rdiff -u -r1.57.6.12 -r1.57.6.13 src/sys/dev/ic/ahcisata_core.c > cvs rdiff -u -r1.35.6.10 -r1.35.6.11 src/sys/dev/ic/mvsata.c > cvs rdiff -u -r1.30.4.15 -r1.30.4.16 src/sys/dev/ic/siisata.c > cvs rdiff -u -r1.283.2.4 -r1.283.2.5 src/sys/dev/ic/wdc.c > cvs rdiff -u -r1.123.4.4 -r1.123.4.5 src/sys/dev/scsipi/atapi_wdc.c > > Please note that diffs are not public domain; they are subject to the > copyright notices on the relevant files. >