mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 18:51:56 -04:00
block: fold cmd_type into the REQ_OP_ space
Instead of keeping two levels of indirection for requests types, fold it all into the operations. The little caveat here is that previously cmd_type only applied to struct request, while the request and bio op fields were set to plain REQ_OP_READ/WRITE even for passthrough operations. Instead this patch adds new REQ_OP_* for SCSI passthrough and driver private requests, althought it has to add two for each so that we can communicate the data in/out nature of the request. Signed-off-by: Christoph Hellwig <[email protected]> Signed-off-by: Jens Axboe <[email protected]>
This commit is contained in:
parent
2f5a8e80f7
commit
aebf526b53
53 changed files with 338 additions and 326 deletions
|
|
@ -84,9 +84,6 @@ static int do_blktrans_request(struct mtd_blktrans_ops *tr,
|
|||
nsect = blk_rq_cur_bytes(req) >> tr->blkshift;
|
||||
buf = bio_data(req->bio);
|
||||
|
||||
if (req->cmd_type != REQ_TYPE_FS)
|
||||
return -EIO;
|
||||
|
||||
if (req_op(req) == REQ_OP_FLUSH)
|
||||
return tr->flush(dev);
|
||||
|
||||
|
|
@ -94,16 +91,16 @@ static int do_blktrans_request(struct mtd_blktrans_ops *tr,
|
|||
get_capacity(req->rq_disk))
|
||||
return -EIO;
|
||||
|
||||
if (req_op(req) == REQ_OP_DISCARD)
|
||||
switch (req_op(req)) {
|
||||
case REQ_OP_DISCARD:
|
||||
return tr->discard(dev, block, nsect);
|
||||
|
||||
if (rq_data_dir(req) == READ) {
|
||||
case REQ_OP_READ:
|
||||
for (; nsect > 0; nsect--, block++, buf += tr->blksize)
|
||||
if (tr->readsect(dev, block, buf))
|
||||
return -EIO;
|
||||
rq_flush_dcache_pages(req);
|
||||
return 0;
|
||||
} else {
|
||||
case REQ_OP_WRITE:
|
||||
if (!tr->writesect)
|
||||
return -EIO;
|
||||
|
||||
|
|
@ -112,6 +109,8 @@ static int do_blktrans_request(struct mtd_blktrans_ops *tr,
|
|||
if (tr->writesect(dev, block, buf))
|
||||
return -EIO;
|
||||
return 0;
|
||||
default:
|
||||
return -EIO;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -323,16 +323,15 @@ static int ubiblock_queue_rq(struct blk_mq_hw_ctx *hctx,
|
|||
struct ubiblock *dev = hctx->queue->queuedata;
|
||||
struct ubiblock_pdu *pdu = blk_mq_rq_to_pdu(req);
|
||||
|
||||
if (req->cmd_type != REQ_TYPE_FS)
|
||||
switch (req_op(req)) {
|
||||
case REQ_OP_READ:
|
||||
ubi_sgl_init(&pdu->usgl);
|
||||
queue_work(dev->wq, &pdu->work);
|
||||
return BLK_MQ_RQ_QUEUE_OK;
|
||||
default:
|
||||
return BLK_MQ_RQ_QUEUE_ERROR;
|
||||
}
|
||||
|
||||
if (rq_data_dir(req) != READ)
|
||||
return BLK_MQ_RQ_QUEUE_ERROR; /* Write not implemented */
|
||||
|
||||
ubi_sgl_init(&pdu->usgl);
|
||||
queue_work(dev->wq, &pdu->work);
|
||||
|
||||
return BLK_MQ_RQ_QUEUE_OK;
|
||||
}
|
||||
|
||||
static int ubiblock_init_request(void *data, struct request *req,
|
||||
|
|
|
|||
Loading…
Reference in a new issue