IB/iser: Always check sig MR before putting it to the free pool
authorSergey Gorenko <sergeygo@mellanox.com>
Wed, 25 Mar 2020 15:12:10 +0000 (15:12 +0000)
committerJason Gunthorpe <jgg@mellanox.com>
Thu, 26 Mar 2020 19:46:54 +0000 (16:46 -0300)
commit26e28deb813eed908cf31a6052870b6493ec0e86
treee4a88ded7ff6c2dca60a9f53358f479317512ea6
parentd0ca2c35dd15a3d989955caec02beea02f735ee6
IB/iser: Always check sig MR before putting it to the free pool

libiscsi calls the check_protection transport handler only if SCSI-Respose
is received. So, the handler is never called if iSCSI task is completed
for some other reason like a timeout or error handling. And this behavior
looks correct. But the iSER does not handle this case properly because it
puts a non-checked signature MR to the free pool. Then the error occurs at
reusing the MR because it is not allowed to invalidate a signature MR
without checking.

This commit adds an extra check to iser_unreg_mem_fastreg(), which is a
part of the task cleanup flow. Now the signature MR is checked there if it
is needed.

Link: https://lore.kernel.org/r/20200325151210.1548-1-sergeygo@mellanox.com
Signed-off-by: Sergey Gorenko <sergeygo@mellanox.com>
Reviewed-by: Max Gurtovoy <maxg@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/ulp/iser/iser_memory.c