fnic: fix fnic_scsi_host_{start,end}_tag

The way these functions abuse ->special to try to store the dummy
request looks completely broken, given that it actually stores the
original scsi command.

Instead switch to ->host_scribble and store the actual dummy command.

Reviewed-by: Hannes Reinecke <hare@suse.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
Christoph Hellwig 2018-11-10 09:30:44 +01:00 committed by Jens Axboe
parent e41128cfd9
commit 511c49fe18

View File

@ -2274,7 +2274,7 @@ fnic_scsi_host_start_tag(struct fnic *fnic, struct scsi_cmnd *sc)
return SCSI_NO_TAG; return SCSI_NO_TAG;
sc->tag = sc->request->tag = dummy->tag; sc->tag = sc->request->tag = dummy->tag;
sc->request->special = sc; sc->host_scribble = (unsigned char *)dummy;
return dummy->tag; return dummy->tag;
} }
@ -2286,7 +2286,7 @@ fnic_scsi_host_start_tag(struct fnic *fnic, struct scsi_cmnd *sc)
static inline void static inline void
fnic_scsi_host_end_tag(struct fnic *fnic, struct scsi_cmnd *sc) fnic_scsi_host_end_tag(struct fnic *fnic, struct scsi_cmnd *sc)
{ {
struct request *dummy = sc->request->special; struct request *dummy = (struct request *)sc->host_scribble;
blk_mq_free_request(dummy); blk_mq_free_request(dummy);
} }