aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--block/bsg-lib.c27
1 files changed, 21 insertions, 6 deletions
diff --git a/block/bsg-lib.c b/block/bsg-lib.c
index dbddff8174e5..15d25ccd51a5 100644
--- a/block/bsg-lib.c
+++ b/block/bsg-lib.c
@@ -207,20 +207,34 @@ static int bsg_init_rq(struct request_queue *q, struct request *req, gfp_t gfp)
207 struct bsg_job *job = blk_mq_rq_to_pdu(req); 207 struct bsg_job *job = blk_mq_rq_to_pdu(req);
208 struct scsi_request *sreq = &job->sreq; 208 struct scsi_request *sreq = &job->sreq;
209 209
210 /* called right after the request is allocated for the request_queue */
211
212 sreq->sense = kzalloc(SCSI_SENSE_BUFFERSIZE, gfp);
213 if (!sreq->sense)
214 return -ENOMEM;
215
216 return 0;
217}
218
219static void bsg_initialize_rq(struct request *req)
220{
221 struct bsg_job *job = blk_mq_rq_to_pdu(req);
222 struct scsi_request *sreq = &job->sreq;
223 void *sense = sreq->sense;
224
225 /* called right before the request is given to the request_queue user */
226
210 memset(job, 0, sizeof(*job)); 227 memset(job, 0, sizeof(*job));
211 228
212 scsi_req_init(sreq); 229 scsi_req_init(sreq);
230
231 sreq->sense = sense;
213 sreq->sense_len = SCSI_SENSE_BUFFERSIZE; 232 sreq->sense_len = SCSI_SENSE_BUFFERSIZE;
214 sreq->sense = kzalloc(sreq->sense_len, gfp);
215 if (!sreq->sense)
216 return -ENOMEM;
217 233
218 job->req = req; 234 job->req = req;
219 job->reply = sreq->sense; 235 job->reply = sense;
220 job->reply_len = sreq->sense_len; 236 job->reply_len = sreq->sense_len;
221 job->dd_data = job + 1; 237 job->dd_data = job + 1;
222
223 return 0;
224} 238}
225 239
226static void bsg_exit_rq(struct request_queue *q, struct request *req) 240static void bsg_exit_rq(struct request_queue *q, struct request *req)
@@ -251,6 +265,7 @@ struct request_queue *bsg_setup_queue(struct device *dev, const char *name,
251 q->cmd_size = sizeof(struct bsg_job) + dd_job_size; 265 q->cmd_size = sizeof(struct bsg_job) + dd_job_size;
252 q->init_rq_fn = bsg_init_rq; 266 q->init_rq_fn = bsg_init_rq;
253 q->exit_rq_fn = bsg_exit_rq; 267 q->exit_rq_fn = bsg_exit_rq;
268 q->initialize_rq_fn = bsg_initialize_rq;
254 q->request_fn = bsg_request_fn; 269 q->request_fn = bsg_request_fn;
255 270
256 ret = blk_init_allocated_queue(q); 271 ret = blk_init_allocated_queue(q);