scsi: ufs: add reference counting for scsi block requests
authorSubhash Jadavani <subhashj@codeaurora.org>
Thu, 3 May 2018 11:07:18 +0000 (16:37 +0530)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 18 May 2018 16:20:48 +0000 (12:20 -0400)
commit38135535dcc25af856336fda31aeef79d8ad9dab
tree8e1b74cad3a3f72ba6aec9f9b98d1ac9be5faff9
parentb334456ec2021b1addc19806990115e69ec4ac32
scsi: ufs: add reference counting for scsi block requests

Currently we call the scsi_block_requests()/scsi_unblock_requests()
whenever we want to block/unblock scsi requests but as there is no
reference counting, nesting of these calls could leave us in undesired
state sometime. Consider following call flow sequence:

1. func1() calls scsi_block_requests() but calls func2() before
   calling scsi_unblock_requests()
2. func2() calls scsi_block_requests()
3. func2() calls scsi_unblock_requests()
4. func1() calls scsi_unblock_requests()

As there is no reference counting, we will have scsi requests unblocked
after #3 instead of it to be unblocked only after #4. Though we may not
have failures seen with this, we might run into some failures in future.
Better solution would be to fix this by adding reference counting.

Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
Signed-off-by: Can Guo <cang@codeaurora.org>
Signed-off-by: Asutosh Das <asutoshd@codeaurora.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/ufs/ufshcd.c
drivers/scsi/ufs/ufshcd.h