aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2014-06-12 08:53:23 -0400
committerChristoph Hellwig <hch@lst.de>2014-07-25 17:16:34 -0400
commit4d63716898b5390900a802d889b279ade85f3dac (patch)
tree40a7056c45c3db4f50c8f61825c16f12ebc4bcfe
parentd285203cf647d7c97db3a1c33794315c9008593f (diff)
fnic: reject device resets without assigned tags for the blk-mq case
Current the midlayer fakes up a struct request for the explicit reset ioctls, and those don't have a tag allocated to them. The fnic driver pokes into midlayer structures to paper over this design issue, but that won't work for the blk-mq case. Either someone who can actually test the hardware will have to come up with a similar hack for the blk-mq case, or we'll have to bite the bullet and fix the way the EH ioctls work for real, but until that happens we fail these explicit requests here. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com> Reviewed-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Webb Scales <webbnh@hp.com> Acked-by: Jens Axboe <axboe@kernel.dk> Tested-by: Bart Van Assche <bvanassche@acm.org> Tested-by: Robert Elliott <elliott@hp.com> Cc: Hiral Patel <hiralpat@cisco.com> Cc: Suma Ramars <sramars@cisco.com> Cc: Brian Uchino <buchino@cisco.com>
-rw-r--r--drivers/scsi/fnic/fnic_scsi.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/scsi/fnic/fnic_scsi.c b/drivers/scsi/fnic/fnic_scsi.c
index 3f88f56582a2..961bdf5d31cd 100644
--- a/drivers/scsi/fnic/fnic_scsi.c
+++ b/drivers/scsi/fnic/fnic_scsi.c
@@ -2224,6 +2224,22 @@ int fnic_device_reset(struct scsi_cmnd *sc)
2224 2224
2225 tag = sc->request->tag; 2225 tag = sc->request->tag;
2226 if (unlikely(tag < 0)) { 2226 if (unlikely(tag < 0)) {
2227 /*
2228 * XXX(hch): current the midlayer fakes up a struct
2229 * request for the explicit reset ioctls, and those
2230 * don't have a tag allocated to them. The below
2231 * code pokes into midlayer structures to paper over
2232 * this design issue, but that won't work for blk-mq.
2233 *
2234 * Either someone who can actually test the hardware
2235 * will have to come up with a similar hack for the
2236 * blk-mq case, or we'll have to bite the bullet and
2237 * fix the way the EH ioctls work for real, but until
2238 * that happens we fail these explicit requests here.
2239 */
2240 if (shost_use_blk_mq(sc->device->host))
2241 goto fnic_device_reset_end;
2242
2227 tag = fnic_scsi_host_start_tag(fnic, sc); 2243 tag = fnic_scsi_host_start_tag(fnic, sc);
2228 if (unlikely(tag == SCSI_NO_TAG)) 2244 if (unlikely(tag == SCSI_NO_TAG))
2229 goto fnic_device_reset_end; 2245 goto fnic_device_reset_end;