[012/117] block: Convert SCSI and bsg code to the scsi_status union

Message ID 20210420000845.25873-13-bvanassche@acm.org
State New
Headers show
Series
  • Make better use of static type checking
Related show

Commit Message

Bart Van Assche April 20, 2021, 12:07 a.m.
An explanation of the purpose of this patch is available in the patch
"scsi: Introduce the scsi_status union".

Cc: Jens Axboe <axboe@kernel.dk>
Cc: Christoph Hellwig <hch@lst.de>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 block/bsg-lib.c    | 16 ++++++++--------
 block/bsg.c        |  6 +++---
 block/scsi_ioctl.c | 14 +++++++-------
 3 files changed, 18 insertions(+), 18 deletions(-)

Patch

diff --git a/block/bsg-lib.c b/block/bsg-lib.c
index 330fede77271..35a01a264816 100644
--- a/block/bsg-lib.c
+++ b/block/bsg-lib.c
@@ -82,18 +82,18 @@  static int bsg_transport_complete_rq(struct request *rq, struct sg_io_v4 *hdr)
 	 * The assignments below don't make much sense, but are kept for
 	 * bug by bug backwards compatibility:
 	 */
-	hdr->device_status = job->result & 0xff;
-	hdr->transport_status = host_byte(job->result);
-	hdr->driver_status = driver_byte(job->result);
+	hdr->device_status = job->status.b.status;
+	hdr->transport_status = host_byte(job->status);
+	hdr->driver_status = driver_byte(job->status);
 	hdr->info = 0;
 	if (hdr->device_status || hdr->transport_status || hdr->driver_status)
 		hdr->info |= SG_INFO_CHECK;
 	hdr->response_len = 0;
 
-	if (job->result < 0) {
+	if (job->status.combined < 0) {
 		/* we're only returning the result field in the reply */
 		job->reply_len = sizeof(u32);
-		ret = job->result;
+		ret = job->status.combined;
 	}
 
 	if (job->reply_len && hdr->response) {
@@ -183,7 +183,7 @@  void bsg_job_done(struct bsg_job *job, int result,
 {
 	struct request *rq = blk_mq_rq_from_pdu(job);
 
-	job->result = result;
+	job->status.combined = result;
 	job->reply_payload_rcv_len = reply_payload_rcv_len;
 	if (likely(!blk_should_fake_timeout(rq->q)))
 		blk_mq_complete_request(rq);
@@ -247,7 +247,7 @@  static bool bsg_prepare_job(struct device *dev, struct request *req)
 failjob_rls_rqst_payload:
 	kfree(job->request_payload.sg_list);
 failjob_rls_job:
-	job->result = -ENOMEM;
+	job->status.combined = -ENOMEM;
 	return false;
 }
 
@@ -257,7 +257,7 @@  static bool bsg_prepare_job(struct device *dev, struct request *req)
  * @bd: queue data
  *
  * On error the create_bsg_job function should return a -Exyz error value
- * that will be set to ->result.
+ * that will be set to ->status.
  *
  * Drivers/subsys should pass this to the queue init function.
  */
diff --git a/block/bsg.c b/block/bsg.c
index bd10922d5cbb..a03d43ed2bcc 100644
--- a/block/bsg.c
+++ b/block/bsg.c
@@ -94,9 +94,9 @@  static int bsg_scsi_complete_rq(struct request *rq, struct sg_io_v4 *hdr)
 	/*
 	 * fill in all the output members
 	 */
-	hdr->device_status = sreq->result & 0xff;
-	hdr->transport_status = host_byte(sreq->result);
-	hdr->driver_status = driver_byte(sreq->result);
+	hdr->device_status = sreq->status.b.status;
+	hdr->transport_status = host_byte(sreq->status);
+	hdr->driver_status = driver_byte(sreq->status);
 	hdr->info = 0;
 	if (hdr->device_status || hdr->transport_status || hdr->driver_status)
 		hdr->info |= SG_INFO_CHECK;
diff --git a/block/scsi_ioctl.c b/block/scsi_ioctl.c
index 6599bac0a78c..3a56dc979df2 100644
--- a/block/scsi_ioctl.c
+++ b/block/scsi_ioctl.c
@@ -252,11 +252,11 @@  static int blk_complete_sghdr_rq(struct request *rq, struct sg_io_hdr *hdr,
 	/*
 	 * fill in all the output members
 	 */
-	hdr->status = req->result & 0xff;
-	hdr->masked_status = status_byte(req->result);
-	hdr->msg_status = msg_byte(req->result);
-	hdr->host_status = host_byte(req->result);
-	hdr->driver_status = driver_byte(req->result);
+	hdr->status = req->status.b.status;
+	hdr->masked_status = status_byte(req->status);
+	hdr->msg_status = msg_byte(req->status);
+	hdr->host_status = host_byte(req->status);
+	hdr->driver_status = driver_byte(req->status);
 	hdr->info = 0;
 	if (hdr->masked_status || hdr->host_status || hdr->driver_status)
 		hdr->info |= SG_INFO_CHECK;
@@ -495,7 +495,7 @@  int sg_scsi_ioctl(struct request_queue *q, struct gendisk *disk, fmode_t mode,
 
 	blk_execute_rq(disk, rq, 0);
 
-	err = req->result & 0xff;	/* only 8 bit SCSI status */
+	err = req->status.b.status;	/* only 8 bit SCSI status */
 	if (err) {
 		if (req->sense_len && req->sense) {
 			bytes = (OMAX_SB_LEN > req->sense_len) ?
@@ -533,7 +533,7 @@  static int __blk_send_generic(struct request_queue *q, struct gendisk *bd_disk,
 	scsi_req(rq)->cmd[4] = data;
 	scsi_req(rq)->cmd_len = 6;
 	blk_execute_rq(bd_disk, rq, 0);
-	err = scsi_req(rq)->result ? -EIO : 0;
+	err = scsi_req(rq)->status.combined ? -EIO : 0;
 	blk_put_request(rq);
 
 	return err;