diff options
Diffstat (limited to 'drivers/s390')
-rw-r--r-- | drivers/s390/scsi/zfcp_fc.h | 22 | ||||
-rw-r--r-- | drivers/s390/scsi/zfcp_fsf.c | 4 |
2 files changed, 10 insertions, 16 deletions
diff --git a/drivers/s390/scsi/zfcp_fc.h b/drivers/s390/scsi/zfcp_fc.h index 2066f9d9ceb5..5243ce44aa42 100644 --- a/drivers/s390/scsi/zfcp_fc.h +++ b/drivers/s390/scsi/zfcp_fc.h | |||
@@ -164,14 +164,21 @@ struct zfcp_fc_wka_ports { | |||
164 | * zfcp_fc_scsi_to_fcp - setup FCP command with data from scsi_cmnd | 164 | * zfcp_fc_scsi_to_fcp - setup FCP command with data from scsi_cmnd |
165 | * @fcp: fcp_cmnd to setup | 165 | * @fcp: fcp_cmnd to setup |
166 | * @scsi: scsi_cmnd where to get LUN, task attributes/flags and CDB | 166 | * @scsi: scsi_cmnd where to get LUN, task attributes/flags and CDB |
167 | * @tm: task management flags to setup task management command | ||
167 | */ | 168 | */ |
168 | static inline | 169 | static inline |
169 | void zfcp_fc_scsi_to_fcp(struct fcp_cmnd *fcp, struct scsi_cmnd *scsi) | 170 | void zfcp_fc_scsi_to_fcp(struct fcp_cmnd *fcp, struct scsi_cmnd *scsi, |
171 | u8 tm_flags) | ||
170 | { | 172 | { |
171 | char tag[2]; | 173 | char tag[2]; |
172 | 174 | ||
173 | int_to_scsilun(scsi->device->lun, (struct scsi_lun *) &fcp->fc_lun); | 175 | int_to_scsilun(scsi->device->lun, (struct scsi_lun *) &fcp->fc_lun); |
174 | 176 | ||
177 | if (unlikely(tm_flags)) { | ||
178 | fcp->fc_tm_flags = tm_flags; | ||
179 | return; | ||
180 | } | ||
181 | |||
175 | if (scsi_populate_tag_msg(scsi, tag)) { | 182 | if (scsi_populate_tag_msg(scsi, tag)) { |
176 | switch (tag[0]) { | 183 | switch (tag[0]) { |
177 | case MSG_ORDERED_TAG: | 184 | case MSG_ORDERED_TAG: |
@@ -198,19 +205,6 @@ void zfcp_fc_scsi_to_fcp(struct fcp_cmnd *fcp, struct scsi_cmnd *scsi) | |||
198 | } | 205 | } |
199 | 206 | ||
200 | /** | 207 | /** |
201 | * zfcp_fc_fcp_tm - setup FCP command as task management command | ||
202 | * @fcp: fcp_cmnd to setup | ||
203 | * @dev: scsi_device where to send the task management command | ||
204 | * @tm: task management flags to setup tm command | ||
205 | */ | ||
206 | static inline | ||
207 | void zfcp_fc_fcp_tm(struct fcp_cmnd *fcp, struct scsi_device *dev, u8 tm_flags) | ||
208 | { | ||
209 | int_to_scsilun(dev->lun, (struct scsi_lun *) &fcp->fc_lun); | ||
210 | fcp->fc_tm_flags |= tm_flags; | ||
211 | } | ||
212 | |||
213 | /** | ||
214 | * zfcp_fc_evap_fcp_rsp - evaluate FCP RSP IU and update scsi_cmnd accordingly | 208 | * zfcp_fc_evap_fcp_rsp - evaluate FCP RSP IU and update scsi_cmnd accordingly |
215 | * @fcp_rsp: FCP RSP IU to evaluate | 209 | * @fcp_rsp: FCP RSP IU to evaluate |
216 | * @scsi: SCSI command where to update status and sense buffer | 210 | * @scsi: SCSI command where to update status and sense buffer |
diff --git a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c index 43ee0288c0e9..a0e05ef65924 100644 --- a/drivers/s390/scsi/zfcp_fsf.c +++ b/drivers/s390/scsi/zfcp_fsf.c | |||
@@ -2210,7 +2210,7 @@ int zfcp_fsf_fcp_cmnd(struct scsi_cmnd *scsi_cmnd) | |||
2210 | zfcp_fsf_set_data_dir(scsi_cmnd, &io->data_direction); | 2210 | zfcp_fsf_set_data_dir(scsi_cmnd, &io->data_direction); |
2211 | 2211 | ||
2212 | fcp_cmnd = (struct fcp_cmnd *) &req->qtcb->bottom.io.fcp_cmnd; | 2212 | fcp_cmnd = (struct fcp_cmnd *) &req->qtcb->bottom.io.fcp_cmnd; |
2213 | zfcp_fc_scsi_to_fcp(fcp_cmnd, scsi_cmnd); | 2213 | zfcp_fc_scsi_to_fcp(fcp_cmnd, scsi_cmnd, 0); |
2214 | 2214 | ||
2215 | if (scsi_prot_sg_count(scsi_cmnd)) { | 2215 | if (scsi_prot_sg_count(scsi_cmnd)) { |
2216 | zfcp_qdio_set_data_div(qdio, &req->qdio_req, | 2216 | zfcp_qdio_set_data_div(qdio, &req->qdio_req, |
@@ -2299,7 +2299,7 @@ struct zfcp_fsf_req *zfcp_fsf_fcp_task_mgmt(struct scsi_cmnd *scmnd, | |||
2299 | zfcp_qdio_set_sbale_last(qdio, &req->qdio_req); | 2299 | zfcp_qdio_set_sbale_last(qdio, &req->qdio_req); |
2300 | 2300 | ||
2301 | fcp_cmnd = (struct fcp_cmnd *) &req->qtcb->bottom.io.fcp_cmnd; | 2301 | fcp_cmnd = (struct fcp_cmnd *) &req->qtcb->bottom.io.fcp_cmnd; |
2302 | zfcp_fc_fcp_tm(fcp_cmnd, scmnd->device, tm_flags); | 2302 | zfcp_fc_scsi_to_fcp(fcp_cmnd, scmnd, tm_flags); |
2303 | 2303 | ||
2304 | zfcp_fsf_start_timer(req, ZFCP_SCSI_ER_TIMEOUT); | 2304 | zfcp_fsf_start_timer(req, ZFCP_SCSI_ER_TIMEOUT); |
2305 | if (!zfcp_fsf_req_send(req)) | 2305 | if (!zfcp_fsf_req_send(req)) |