@@ -326,28 +326,6 @@ const struct attribute_group blk_integrity_attr_group = {
.attrs = integrity_attrs,
};
-static blk_status_t blk_integrity_nop_fn(struct blk_integrity_iter *iter)
-{
- return BLK_STS_OK;
-}
-
-static void blk_integrity_nop_prepare(struct request *rq)
-{
-}
-
-static void blk_integrity_nop_complete(struct request *rq,
- unsigned int nr_bytes)
-{
-}
-
-static const struct blk_integrity_profile nop_profile = {
- .name = "nop",
- .generate_fn = blk_integrity_nop_fn,
- .verify_fn = blk_integrity_nop_fn,
- .prepare_fn = blk_integrity_nop_prepare,
- .complete_fn = blk_integrity_nop_complete,
-};
-
/**
* blk_integrity_register - Register a gendisk as being integrity-capable
* @disk: struct gendisk pointer to make integrity-aware
@@ -367,7 +345,7 @@ void blk_integrity_register(struct gendisk *disk, struct blk_integrity *template
template->flags;
bi->interval_exp = template->interval_exp ? :
ilog2(queue_logical_block_size(disk->queue));
- bi->profile = template->profile ? template->profile : &nop_profile;
+ bi->profile = template->profile;
bi->tuple_size = template->tuple_size;
bi->tag_size = template->tag_size;
@@ -834,7 +834,8 @@ static void blk_complete_request(struct request *req)
return;
#ifdef CONFIG_BLK_DEV_INTEGRITY
- if (blk_integrity_rq(req) && req_op(req) == REQ_OP_READ)
+ if (blk_integrity_rq(req) && req_op(req) == REQ_OP_READ &&
+ req->q->integrity.profile->complete_fn)
req->q->integrity.profile->complete_fn(req, total_bytes);
#endif
@@ -905,7 +906,7 @@ bool blk_update_request(struct request *req, blk_status_t error,
#ifdef CONFIG_BLK_DEV_INTEGRITY
if (blk_integrity_rq(req) && req_op(req) == REQ_OP_READ &&
- error == BLK_STS_OK)
+ error == BLK_STS_OK && req->q->integrity.profile->complete_fn)
req->q->integrity.profile->complete_fn(req, nr_bytes);
#endif
@@ -1268,7 +1269,8 @@ void blk_mq_start_request(struct request *rq)
rq->mq_hctx->tags->rqs[rq->tag] = rq;
#ifdef CONFIG_BLK_DEV_INTEGRITY
- if (blk_integrity_rq(rq) && req_op(rq) == REQ_OP_WRITE)
+ if (blk_integrity_rq(rq) && req_op(rq) == REQ_OP_WRITE &&
+ q->integrity.profile->prepare_fn)
q->integrity.profile->prepare_fn(rq);
#endif
if (rq->bio && rq->bio->bi_opf & REQ_POLLED)
If no profile is given, we set a 'nop' profile. But we already check for a NULL profile in most spots, so let's get rid of this wasted code. It's also considerably faster to check for a NULL handler rather than have an indirect call into a dummy function. Signed-off-by: Jens Axboe <axboe@kernel.dk> --- block/blk-integrity.c | 24 +----------------------- block/blk-mq.c | 8 +++++--- 2 files changed, 6 insertions(+), 26 deletions(-)