diff options
author | K. Y. Srinivasan <kys@microsoft.com> | 2012-01-12 12:38:00 -0800 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-02-08 17:07:36 -0800 |
commit | a8c18c573bf896f81dbcd68fdb81d81d4200dcad (patch) | |
tree | 4a0766537e55c38f427d83d1cf7bdf9b9b3a60b9 | |
parent | ddcbf65e484c3473d3e808718ddb6c8166822c4c (diff) | |
download | op-kernel-dev-a8c18c573bf896f81dbcd68fdb81d81d4200dcad.zip op-kernel-dev-a8c18c573bf896f81dbcd68fdb81d81d4200dcad.tar.gz |
Staging: hv: storvsc: Add a comment to explain life-cycle management
Add a comment to explain life-cycle management and fix format issue.
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/staging/hv/storvsc_drv.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/drivers/staging/hv/storvsc_drv.c b/drivers/staging/hv/storvsc_drv.c index e0e471c..204b3ca 100644 --- a/drivers/staging/hv/storvsc_drv.c +++ b/drivers/staging/hv/storvsc_drv.c @@ -375,6 +375,21 @@ done: kfree(wrk); } +/* + * We can get incoming messages from the host that are not in response to + * messages that we have sent out. An example of this would be messages + * received by the guest to notify dynamic addition/removal of LUNs. To + * deal with potential race conditions where the driver may be in the + * midst of being unloaded when we might receive an unsolicited message + * from the host, we have implemented a mechanism to gurantee sequential + * consistency: + * + * 1) Once the device is marked as being destroyed, we will fail all + * outgoing messages. + * 2) We permit incoming messages when the device is being destroyed, + * only to properly account for messages already sent out. + */ + static inline struct storvsc_device *get_out_stor_device( struct hv_device *device) { @@ -569,7 +584,7 @@ static void storvsc_on_io_completion(struct hv_device *device, */ if ((stor_pkt->vm_srb.cdb[0] == INQUIRY) || - (stor_pkt->vm_srb.cdb[0] == MODE_SENSE)) { + (stor_pkt->vm_srb.cdb[0] == MODE_SENSE)) { vstor_packet->vm_srb.scsi_status = 0; vstor_packet->vm_srb.srb_status = SRB_STATUS_SUCCESS; } |