]> git.baikalelectronics.ru Git - kernel.git/commit
libata: mask swap internal and hardware tag
authorJens Axboe <axboe@kernel.dk>
Thu, 20 Sep 2018 14:30:55 +0000 (08:30 -0600)
committerJens Axboe <axboe@kernel.dk>
Thu, 20 Sep 2018 14:30:55 +0000 (08:30 -0600)
commit7df6442ecff25a09d17af3c1d91ae91ed11dc86b
treee96780b5a38b979bc8555717c5eb798edc171017
parent8d0cd987b2e8497ca02a2a7f737f6a03ab3bd06d
libata: mask swap internal and hardware tag

hen we're comparing the hardware completion mask passed in from the
driver with the internal tag pending mask, we need to account for the
fact that the internal tag is different from the hardware tag. If not,
then we can end up either prematurely completing the internal tag (since
it's not set in the hw mask), or simply flag an error:

ata2: illegal qc_active transition (100000000->00000001)

If the internal tag is set, then swap that with the hardware tag in this
case before comparing with what the hardware reports.

Fixes: a3a798daf762 ("libata: add extra internal command")
Buglink: https://bugzilla.kernel.org/show_bug.cgi?id=201151
Cc: stable@vger.kernel.org
Reported-by: Paul Sbarra <sbarra.paul@gmail.com>
Tested-by: Paul Sbarra <sbarra.paul@gmail.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/ata/libata-core.c