aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJens Axboe <axboe@fb.com>2014-06-06 09:57:37 -0400
committerJens Axboe <axboe@fb.com>2014-06-06 09:57:37 -0400
commitf27b087b81b70513b8c61ec20596c868f7b93474 (patch)
tree5dbdf3552f2289c28e65b0fee4490803bff87d42
parent762380ad9322951cea4ce9d24864265f9c66a916 (diff)
block: add blk_rq_set_block_pc()
With the optimizations around not clearing the full request at alloc time, we are leaving some of the needed init for REQ_TYPE_BLOCK_PC up to the user allocating the request. Add a blk_rq_set_block_pc() that sets the command type to REQ_TYPE_BLOCK_PC, and properly initializes the members associated with this type of request. Update callers to use this function instead of manipulating rq->cmd_type directly. Includes fixes from Christoph Hellwig <hch@lst.de> for my half-assed attempt. Signed-off-by: Jens Axboe <axboe@fb.com>
-rw-r--r--block/blk-core.c18
-rw-r--r--block/bsg.c3
-rw-r--r--block/scsi_ioctl.c6
-rw-r--r--drivers/block/pktcdvd.c2
-rw-r--r--drivers/cdrom/cdrom.c2
-rw-r--r--drivers/scsi/device_handler/scsi_dh_alua.c2
-rw-r--r--drivers/scsi/device_handler/scsi_dh_emc.c2
-rw-r--r--drivers/scsi/device_handler/scsi_dh_hp_sw.c4
-rw-r--r--drivers/scsi/device_handler/scsi_dh_rdac.c2
-rw-r--r--drivers/scsi/osd/osd_initiator.c4
-rw-r--r--drivers/scsi/osst.c2
-rw-r--r--drivers/scsi/scsi_error.c3
-rw-r--r--drivers/scsi/scsi_lib.c2
-rw-r--r--drivers/scsi/sg.c3
-rw-r--r--drivers/scsi/st.c2
-rw-r--r--drivers/target/target_core_pscsi.c3
-rw-r--r--include/linux/blkdev.h1
17 files changed, 41 insertions, 20 deletions
diff --git a/block/blk-core.c b/block/blk-core.c
index 40d654861c33..9aca8c71e70b 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -1218,6 +1218,8 @@ struct request *blk_make_request(struct request_queue *q, struct bio *bio,
1218 if (unlikely(!rq)) 1218 if (unlikely(!rq))
1219 return ERR_PTR(-ENOMEM); 1219 return ERR_PTR(-ENOMEM);
1220 1220
1221 blk_rq_set_block_pc(rq);
1222
1221 for_each_bio(bio) { 1223 for_each_bio(bio) {
1222 struct bio *bounce_bio = bio; 1224 struct bio *bounce_bio = bio;
1223 int ret; 1225 int ret;
@@ -1235,6 +1237,22 @@ struct request *blk_make_request(struct request_queue *q, struct bio *bio,
1235EXPORT_SYMBOL(blk_make_request); 1237EXPORT_SYMBOL(blk_make_request);
1236 1238
1237/** 1239/**
1240 * blk_rq_set_block_pc - initialize a requeest to type BLOCK_PC
1241 * @rq: request to be initialized
1242 *
1243 */
1244void blk_rq_set_block_pc(struct request *rq)
1245{
1246 rq->cmd_type = REQ_TYPE_BLOCK_PC;
1247 rq->__data_len = 0;
1248 rq->__sector = (sector_t) -1;
1249 rq->bio = rq->biotail = NULL;
1250 memset(rq->__cmd, 0, sizeof(rq->__cmd));
1251 rq->cmd = rq->__cmd;
1252}
1253EXPORT_SYMBOL(blk_rq_set_block_pc);
1254
1255/**
1238 * blk_requeue_request - put a request back on queue 1256 * blk_requeue_request - put a request back on queue
1239 * @q: request queue where request should be inserted 1257 * @q: request queue where request should be inserted
1240 * @rq: request to be inserted 1258 * @rq: request to be inserted
diff --git a/block/bsg.c b/block/bsg.c
index e5214c148096..ff46addde5d8 100644
--- a/block/bsg.c
+++ b/block/bsg.c
@@ -196,7 +196,6 @@ static int blk_fill_sgv4_hdr_rq(struct request_queue *q, struct request *rq,
196 * fill in request structure 196 * fill in request structure
197 */ 197 */
198 rq->cmd_len = hdr->request_len; 198 rq->cmd_len = hdr->request_len;
199 rq->cmd_type = REQ_TYPE_BLOCK_PC;
200 199
201 rq->timeout = msecs_to_jiffies(hdr->timeout); 200 rq->timeout = msecs_to_jiffies(hdr->timeout);
202 if (!rq->timeout) 201 if (!rq->timeout)
@@ -273,6 +272,8 @@ bsg_map_hdr(struct bsg_device *bd, struct sg_io_v4 *hdr, fmode_t has_write_perm,
273 rq = blk_get_request(q, rw, GFP_KERNEL); 272 rq = blk_get_request(q, rw, GFP_KERNEL);
274 if (!rq) 273 if (!rq)
275 return ERR_PTR(-ENOMEM); 274 return ERR_PTR(-ENOMEM);
275 blk_rq_set_block_pc(rq);
276
276 ret = blk_fill_sgv4_hdr_rq(q, rq, hdr, bd, has_write_perm); 277 ret = blk_fill_sgv4_hdr_rq(q, rq, hdr, bd, has_write_perm);
277 if (ret) 278 if (ret)
278 goto out; 279 goto out;
diff --git a/block/scsi_ioctl.c b/block/scsi_ioctl.c
index 9c28a5b38042..14695c6221c8 100644
--- a/block/scsi_ioctl.c
+++ b/block/scsi_ioctl.c
@@ -229,7 +229,6 @@ static int blk_fill_sghdr_rq(struct request_queue *q, struct request *rq,
229 * fill in request structure 229 * fill in request structure
230 */ 230 */
231 rq->cmd_len = hdr->cmd_len; 231 rq->cmd_len = hdr->cmd_len;
232 rq->cmd_type = REQ_TYPE_BLOCK_PC;
233 232
234 rq->timeout = msecs_to_jiffies(hdr->timeout); 233 rq->timeout = msecs_to_jiffies(hdr->timeout);
235 if (!rq->timeout) 234 if (!rq->timeout)
@@ -311,6 +310,7 @@ static int sg_io(struct request_queue *q, struct gendisk *bd_disk,
311 rq = blk_get_request(q, writing ? WRITE : READ, GFP_KERNEL); 310 rq = blk_get_request(q, writing ? WRITE : READ, GFP_KERNEL);
312 if (!rq) 311 if (!rq)
313 return -ENOMEM; 312 return -ENOMEM;
313 blk_rq_set_block_pc(rq);
314 314
315 if (blk_fill_sghdr_rq(q, rq, hdr, mode)) { 315 if (blk_fill_sghdr_rq(q, rq, hdr, mode)) {
316 blk_put_request(rq); 316 blk_put_request(rq);
@@ -491,7 +491,7 @@ int sg_scsi_ioctl(struct request_queue *q, struct gendisk *disk, fmode_t mode,
491 memset(sense, 0, sizeof(sense)); 491 memset(sense, 0, sizeof(sense));
492 rq->sense = sense; 492 rq->sense = sense;
493 rq->sense_len = 0; 493 rq->sense_len = 0;
494 rq->cmd_type = REQ_TYPE_BLOCK_PC; 494 blk_rq_set_block_pc(rq);
495 495
496 blk_execute_rq(q, disk, rq, 0); 496 blk_execute_rq(q, disk, rq, 0);
497 497
@@ -524,7 +524,7 @@ static int __blk_send_generic(struct request_queue *q, struct gendisk *bd_disk,
524 int err; 524 int err;
525 525
526 rq = blk_get_request(q, WRITE, __GFP_WAIT); 526 rq = blk_get_request(q, WRITE, __GFP_WAIT);
527 rq->cmd_type = REQ_TYPE_BLOCK_PC; 527 blk_rq_set_block_pc(rq);
528 rq->timeout = BLK_DEFAULT_SG_TIMEOUT; 528 rq->timeout = BLK_DEFAULT_SG_TIMEOUT;
529 rq->cmd[0] = cmd; 529 rq->cmd[0] = cmd;
530 rq->cmd[4] = data; 530 rq->cmd[4] = data;
diff --git a/drivers/block/pktcdvd.c b/drivers/block/pktcdvd.c
index ef166ad2dbad..758ac442c5b5 100644
--- a/drivers/block/pktcdvd.c
+++ b/drivers/block/pktcdvd.c
@@ -704,6 +704,7 @@ static int pkt_generic_packet(struct pktcdvd_device *pd, struct packet_command *
704 704
705 rq = blk_get_request(q, (cgc->data_direction == CGC_DATA_WRITE) ? 705 rq = blk_get_request(q, (cgc->data_direction == CGC_DATA_WRITE) ?
706 WRITE : READ, __GFP_WAIT); 706 WRITE : READ, __GFP_WAIT);
707 blk_rq_set_block_pc(rq);
707 708
708 if (cgc->buflen) { 709 if (cgc->buflen) {
709 ret = blk_rq_map_kern(q, rq, cgc->buffer, cgc->buflen, 710 ret = blk_rq_map_kern(q, rq, cgc->buffer, cgc->buflen,
@@ -716,7 +717,6 @@ static int pkt_generic_packet(struct pktcdvd_device *pd, struct packet_command *
716 memcpy(rq->cmd, cgc->cmd, CDROM_PACKET_SIZE); 717 memcpy(rq->cmd, cgc->cmd, CDROM_PACKET_SIZE);
717 718
718 rq->timeout = 60*HZ; 719 rq->timeout = 60*HZ;
719 rq->cmd_type = REQ_TYPE_BLOCK_PC;
720 if (cgc->quiet) 720 if (cgc->quiet)
721 rq->cmd_flags |= REQ_QUIET; 721 rq->cmd_flags |= REQ_QUIET;
722 722
diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c
index 49ac5662585b..0f40c95049c0 100644
--- a/drivers/cdrom/cdrom.c
+++ b/drivers/cdrom/cdrom.c
@@ -2184,6 +2184,7 @@ static int cdrom_read_cdda_bpc(struct cdrom_device_info *cdi, __u8 __user *ubuf,
2184 ret = -ENOMEM; 2184 ret = -ENOMEM;
2185 break; 2185 break;
2186 } 2186 }
2187 blk_rq_set_block_pc(rq);
2187 2188
2188 ret = blk_rq_map_user(q, rq, NULL, ubuf, len, GFP_KERNEL); 2189 ret = blk_rq_map_user(q, rq, NULL, ubuf, len, GFP_KERNEL);
2189 if (ret) { 2190 if (ret) {
@@ -2203,7 +2204,6 @@ static int cdrom_read_cdda_bpc(struct cdrom_device_info *cdi, __u8 __user *ubuf,
2203 rq->cmd[9] = 0xf8; 2204 rq->cmd[9] = 0xf8;
2204 2205
2205 rq->cmd_len = 12; 2206 rq->cmd_len = 12;
2206 rq->cmd_type = REQ_TYPE_BLOCK_PC;
2207 rq->timeout = 60 * HZ; 2207 rq->timeout = 60 * HZ;
2208 bio = rq->bio; 2208 bio = rq->bio;
2209 2209
diff --git a/drivers/scsi/device_handler/scsi_dh_alua.c b/drivers/scsi/device_handler/scsi_dh_alua.c
index 5248c888552b..7bcf67eec921 100644
--- a/drivers/scsi/device_handler/scsi_dh_alua.c
+++ b/drivers/scsi/device_handler/scsi_dh_alua.c
@@ -120,6 +120,7 @@ static struct request *get_alua_req(struct scsi_device *sdev,
120 "%s: blk_get_request failed\n", __func__); 120 "%s: blk_get_request failed\n", __func__);
121 return NULL; 121 return NULL;
122 } 122 }
123 blk_rq_set_block_pc(rq);
123 124
124 if (buflen && blk_rq_map_kern(q, rq, buffer, buflen, GFP_NOIO)) { 125 if (buflen && blk_rq_map_kern(q, rq, buffer, buflen, GFP_NOIO)) {
125 blk_put_request(rq); 126 blk_put_request(rq);
@@ -128,7 +129,6 @@ static struct request *get_alua_req(struct scsi_device *sdev,
128 return NULL; 129 return NULL;
129 } 130 }
130 131
131 rq->cmd_type = REQ_TYPE_BLOCK_PC;
132 rq->cmd_flags |= REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | 132 rq->cmd_flags |= REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT |
133 REQ_FAILFAST_DRIVER; 133 REQ_FAILFAST_DRIVER;
134 rq->retries = ALUA_FAILOVER_RETRIES; 134 rq->retries = ALUA_FAILOVER_RETRIES;
diff --git a/drivers/scsi/device_handler/scsi_dh_emc.c b/drivers/scsi/device_handler/scsi_dh_emc.c
index e1c8be06de9d..6f07f7fe3aa1 100644
--- a/drivers/scsi/device_handler/scsi_dh_emc.c
+++ b/drivers/scsi/device_handler/scsi_dh_emc.c
@@ -280,6 +280,7 @@ static struct request *get_req(struct scsi_device *sdev, int cmd,
280 return NULL; 280 return NULL;
281 } 281 }
282 282
283 blk_rq_set_block_pc(rq);
283 rq->cmd_len = COMMAND_SIZE(cmd); 284 rq->cmd_len = COMMAND_SIZE(cmd);
284 rq->cmd[0] = cmd; 285 rq->cmd[0] = cmd;
285 286
@@ -304,7 +305,6 @@ static struct request *get_req(struct scsi_device *sdev, int cmd,
304 break; 305 break;
305 } 306 }
306 307
307 rq->cmd_type = REQ_TYPE_BLOCK_PC;
308 rq->cmd_flags |= REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | 308 rq->cmd_flags |= REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT |
309 REQ_FAILFAST_DRIVER; 309 REQ_FAILFAST_DRIVER;
310 rq->timeout = CLARIION_TIMEOUT; 310 rq->timeout = CLARIION_TIMEOUT;
diff --git a/drivers/scsi/device_handler/scsi_dh_hp_sw.c b/drivers/scsi/device_handler/scsi_dh_hp_sw.c
index 084062bb8ee9..e9d9fea9e272 100644
--- a/drivers/scsi/device_handler/scsi_dh_hp_sw.c
+++ b/drivers/scsi/device_handler/scsi_dh_hp_sw.c
@@ -120,7 +120,7 @@ retry:
120 if (!req) 120 if (!req)
121 return SCSI_DH_RES_TEMP_UNAVAIL; 121 return SCSI_DH_RES_TEMP_UNAVAIL;
122 122
123 req->cmd_type = REQ_TYPE_BLOCK_PC; 123 blk_rq_set_block_pc(req);
124 req->cmd_flags |= REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | 124 req->cmd_flags |= REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT |
125 REQ_FAILFAST_DRIVER; 125 REQ_FAILFAST_DRIVER;
126 req->cmd_len = COMMAND_SIZE(TEST_UNIT_READY); 126 req->cmd_len = COMMAND_SIZE(TEST_UNIT_READY);
@@ -250,7 +250,7 @@ static int hp_sw_start_stop(struct hp_sw_dh_data *h)
250 if (!req) 250 if (!req)
251 return SCSI_DH_RES_TEMP_UNAVAIL; 251 return SCSI_DH_RES_TEMP_UNAVAIL;
252 252
253 req->cmd_type = REQ_TYPE_BLOCK_PC; 253 blk_rq_set_block_pc(req);
254 req->cmd_flags |= REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | 254 req->cmd_flags |= REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT |
255 REQ_FAILFAST_DRIVER; 255 REQ_FAILFAST_DRIVER;
256 req->cmd_len = COMMAND_SIZE(START_STOP); 256 req->cmd_len = COMMAND_SIZE(START_STOP);
diff --git a/drivers/scsi/device_handler/scsi_dh_rdac.c b/drivers/scsi/device_handler/scsi_dh_rdac.c
index 4b9cf93f3fb6..826069db9848 100644
--- a/drivers/scsi/device_handler/scsi_dh_rdac.c
+++ b/drivers/scsi/device_handler/scsi_dh_rdac.c
@@ -279,6 +279,7 @@ static struct request *get_rdac_req(struct scsi_device *sdev,
279 "get_rdac_req: blk_get_request failed.\n"); 279 "get_rdac_req: blk_get_request failed.\n");
280 return NULL; 280 return NULL;
281 } 281 }
282 blk_rq_set_block_pc(rq);
282 283
283 if (buflen && blk_rq_map_kern(q, rq, buffer, buflen, GFP_NOIO)) { 284 if (buflen && blk_rq_map_kern(q, rq, buffer, buflen, GFP_NOIO)) {
284 blk_put_request(rq); 285 blk_put_request(rq);
@@ -287,7 +288,6 @@ static struct request *get_rdac_req(struct scsi_device *sdev,
287 return NULL; 288 return NULL;
288 } 289 }
289 290
290 rq->cmd_type = REQ_TYPE_BLOCK_PC;
291 rq->cmd_flags |= REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | 291 rq->cmd_flags |= REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT |
292 REQ_FAILFAST_DRIVER; 292 REQ_FAILFAST_DRIVER;
293 rq->retries = RDAC_RETRIES; 293 rq->retries = RDAC_RETRIES;
diff --git a/drivers/scsi/osd/osd_initiator.c b/drivers/scsi/osd/osd_initiator.c
index bac04c2335aa..5f4cbf0c4759 100644
--- a/drivers/scsi/osd/osd_initiator.c
+++ b/drivers/scsi/osd/osd_initiator.c
@@ -1570,6 +1570,7 @@ static struct request *_make_request(struct request_queue *q, bool has_write,
1570 if (unlikely(!req)) 1570 if (unlikely(!req))
1571 return ERR_PTR(-ENOMEM); 1571 return ERR_PTR(-ENOMEM);
1572 1572
1573 blk_rq_set_block_pc(req);
1573 return req; 1574 return req;
1574 } 1575 }
1575} 1576}
@@ -1590,7 +1591,6 @@ static int _init_blk_request(struct osd_request *or,
1590 } 1591 }
1591 1592
1592 or->request = req; 1593 or->request = req;
1593 req->cmd_type = REQ_TYPE_BLOCK_PC;
1594 req->cmd_flags |= REQ_QUIET; 1594 req->cmd_flags |= REQ_QUIET;
1595 1595
1596 req->timeout = or->timeout; 1596 req->timeout = or->timeout;
@@ -1608,7 +1608,7 @@ static int _init_blk_request(struct osd_request *or,
1608 ret = PTR_ERR(req); 1608 ret = PTR_ERR(req);
1609 goto out; 1609 goto out;
1610 } 1610 }
1611 req->cmd_type = REQ_TYPE_BLOCK_PC; 1611 blk_rq_set_block_pc(req);
1612 or->in.req = or->request->next_rq = req; 1612 or->in.req = or->request->next_rq = req;
1613 } 1613 }
1614 } else if (has_in) 1614 } else if (has_in)
diff --git a/drivers/scsi/osst.c b/drivers/scsi/osst.c
index 21883a2d6324..0727ea7cc387 100644
--- a/drivers/scsi/osst.c
+++ b/drivers/scsi/osst.c
@@ -365,7 +365,7 @@ static int osst_execute(struct osst_request *SRpnt, const unsigned char *cmd,
365 if (!req) 365 if (!req)
366 return DRIVER_ERROR << 24; 366 return DRIVER_ERROR << 24;
367 367
368 req->cmd_type = REQ_TYPE_BLOCK_PC; 368 blk_rq_set_block_pc(req);
369 req->cmd_flags |= REQ_QUIET; 369 req->cmd_flags |= REQ_QUIET;
370 370
371 SRpnt->bio = NULL; 371 SRpnt->bio = NULL;
diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
index f17aa7aa7879..af624619d547 100644
--- a/drivers/scsi/scsi_error.c
+++ b/drivers/scsi/scsi_error.c
@@ -1951,6 +1951,8 @@ static void scsi_eh_lock_door(struct scsi_device *sdev)
1951 */ 1951 */
1952 req = blk_get_request(sdev->request_queue, READ, GFP_KERNEL); 1952 req = blk_get_request(sdev->request_queue, READ, GFP_KERNEL);
1953 1953
1954 blk_rq_set_block_pc(req);
1955
1954 req->cmd[0] = ALLOW_MEDIUM_REMOVAL; 1956 req->cmd[0] = ALLOW_MEDIUM_REMOVAL;
1955 req->cmd[1] = 0; 1957 req->cmd[1] = 0;
1956 req->cmd[2] = 0; 1958 req->cmd[2] = 0;
@@ -1960,7 +1962,6 @@ static void scsi_eh_lock_door(struct scsi_device *sdev)
1960 1962
1961 req->cmd_len = COMMAND_SIZE(req->cmd[0]); 1963 req->cmd_len = COMMAND_SIZE(req->cmd[0]);
1962 1964
1963 req->cmd_type = REQ_TYPE_BLOCK_PC;
1964 req->cmd_flags |= REQ_QUIET; 1965 req->cmd_flags |= REQ_QUIET;
1965 req->timeout = 10 * HZ; 1966 req->timeout = 10 * HZ;
1966 req->retries = 5; 1967 req->retries = 5;
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index a0c95cac91f0..c3c1697b143e 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -195,6 +195,7 @@ int scsi_execute(struct scsi_device *sdev, const unsigned char *cmd,
195 req = blk_get_request(sdev->request_queue, write, __GFP_WAIT); 195 req = blk_get_request(sdev->request_queue, write, __GFP_WAIT);
196 if (!req) 196 if (!req)
197 return ret; 197 return ret;
198 blk_rq_set_block_pc(req);
198 199
199 if (bufflen && blk_rq_map_kern(sdev->request_queue, req, 200 if (bufflen && blk_rq_map_kern(sdev->request_queue, req,
200 buffer, bufflen, __GFP_WAIT)) 201 buffer, bufflen, __GFP_WAIT))
@@ -206,7 +207,6 @@ int scsi_execute(struct scsi_device *sdev, const unsigned char *cmd,
206 req->sense_len = 0; 207 req->sense_len = 0;
207 req->retries = retries; 208 req->retries = retries;
208 req->timeout = timeout; 209 req->timeout = timeout;
209 req->cmd_type = REQ_TYPE_BLOCK_PC;
210 req->cmd_flags |= flags | REQ_QUIET | REQ_PREEMPT; 210 req->cmd_flags |= flags | REQ_QUIET | REQ_PREEMPT;
211 211
212 /* 212 /*
diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c
index df5e961484e1..53268aaba559 100644
--- a/drivers/scsi/sg.c
+++ b/drivers/scsi/sg.c
@@ -1653,10 +1653,9 @@ static int sg_start_req(Sg_request *srp, unsigned char *cmd)
1653 if (!rq) 1653 if (!rq)
1654 return -ENOMEM; 1654 return -ENOMEM;
1655 1655
1656 blk_rq_set_block_pc(rq);
1656 memcpy(rq->cmd, cmd, hp->cmd_len); 1657 memcpy(rq->cmd, cmd, hp->cmd_len);
1657
1658 rq->cmd_len = hp->cmd_len; 1658 rq->cmd_len = hp->cmd_len;
1659 rq->cmd_type = REQ_TYPE_BLOCK_PC;
1660 1659
1661 srp->rq = rq; 1660 srp->rq = rq;
1662 rq->end_io_data = srp; 1661 rq->end_io_data = srp;
diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c
index afc834e172c6..14eb4b256a03 100644
--- a/drivers/scsi/st.c
+++ b/drivers/scsi/st.c
@@ -484,7 +484,7 @@ static int st_scsi_execute(struct st_request *SRpnt, const unsigned char *cmd,
484 if (!req) 484 if (!req)
485 return DRIVER_ERROR << 24; 485 return DRIVER_ERROR << 24;
486 486
487 req->cmd_type = REQ_TYPE_BLOCK_PC; 487 blk_rq_set_block_pc(req);
488 req->cmd_flags |= REQ_QUIET; 488 req->cmd_flags |= REQ_QUIET;
489 489
490 mdata->null_mapped = 1; 490 mdata->null_mapped = 1;
diff --git a/drivers/target/target_core_pscsi.c b/drivers/target/target_core_pscsi.c
index 0f199f6a0738..94d00df28f39 100644
--- a/drivers/target/target_core_pscsi.c
+++ b/drivers/target/target_core_pscsi.c
@@ -1055,6 +1055,8 @@ pscsi_execute_cmd(struct se_cmd *cmd)
1055 ret = TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE; 1055 ret = TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
1056 goto fail; 1056 goto fail;
1057 } 1057 }
1058
1059 blk_rq_set_block_pc(req);
1058 } else { 1060 } else {
1059 BUG_ON(!cmd->data_length); 1061 BUG_ON(!cmd->data_length);
1060 1062
@@ -1071,7 +1073,6 @@ pscsi_execute_cmd(struct se_cmd *cmd)
1071 } 1073 }
1072 } 1074 }
1073 1075
1074 req->cmd_type = REQ_TYPE_BLOCK_PC;
1075 req->end_io = pscsi_req_done; 1076 req->end_io = pscsi_req_done;
1076 req->end_io_data = cmd; 1077 req->end_io_data = cmd;
1077 req->cmd_len = scsi_command_size(pt->pscsi_cdb); 1078 req->cmd_len = scsi_command_size(pt->pscsi_cdb);
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index dc2c703f05fd..31e11051f1ba 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -796,6 +796,7 @@ extern void __blk_put_request(struct request_queue *, struct request *);
796extern struct request *blk_get_request(struct request_queue *, int, gfp_t); 796extern struct request *blk_get_request(struct request_queue *, int, gfp_t);
797extern struct request *blk_make_request(struct request_queue *, struct bio *, 797extern struct request *blk_make_request(struct request_queue *, struct bio *,
798 gfp_t); 798 gfp_t);
799extern void blk_rq_set_block_pc(struct request *);
799extern void blk_requeue_request(struct request_queue *, struct request *); 800extern void blk_requeue_request(struct request_queue *, struct request *);
800extern void blk_add_request_payload(struct request *rq, struct page *page, 801extern void blk_add_request_payload(struct request *rq, struct page *page,
801 unsigned int len); 802 unsigned int len);