From f76294a6557b6c99c9ca58d89232171cf693eac2 Mon Sep 17 00:00:00 2001 From: hao lv Date: Wed, 10 Jan 2024 20:18:19 +0800 Subject: [PATCH] ANDROID: add hooks into blk-flush.c for customized I/O scheduler android_vh_blk_alloc_flush_queue: Expand the flush request size to carry more customized information Bug: 319582497 Change-Id: I728852bd29ff7f851545c52fbdeafa7cd3a4addf Signed-off-by: hao lv --- block/blk-flush.c | 10 ++++++++-- drivers/android/vendor_hooks.c | 1 + include/trace/hooks/block.h | 6 ++++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/block/blk-flush.c b/block/blk-flush.c index 33b487b5cbf7..af59a7e4684f 100644 --- a/block/blk-flush.c +++ b/block/blk-flush.c @@ -467,11 +467,13 @@ int blkdev_issue_flush(struct block_device *bdev, gfp_t gfp_mask) } EXPORT_SYMBOL(blkdev_issue_flush); +#include struct blk_flush_queue *blk_alloc_flush_queue(int node, int cmd_size, gfp_t flags) { struct blk_flush_queue *fq; int rq_sz = sizeof(struct request); + bool skip = false; fq = kzalloc_node(sizeof(*fq), flags, node); if (!fq) @@ -479,8 +481,12 @@ struct blk_flush_queue *blk_alloc_flush_queue(int node, int cmd_size, spin_lock_init(&fq->mq_flush_lock); - rq_sz = round_up(rq_sz + cmd_size, cache_line_size()); - fq->flush_rq = kzalloc_node(rq_sz, flags, node); + trace_android_vh_blk_alloc_flush_queue(&skip, cmd_size, flags, node, + fq); + if (!skip) { + rq_sz = round_up(rq_sz + cmd_size, cache_line_size()); + fq->flush_rq = kzalloc_node(rq_sz, flags, node); + } if (!fq->flush_rq) goto fail_rq; diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 343ce4f1774e..6d881eb37081 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -531,6 +531,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_blk_mq_exit_queue); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_blk_mq_alloc_tag_set); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_blk_allocated_queue_init); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_blk_flush_plug_list); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_blk_alloc_flush_queue); /* * For type visibility */ diff --git a/include/trace/hooks/block.h b/include/trace/hooks/block.h index 9d2db2257e16..a58e5de14a70 100644 --- a/include/trace/hooks/block.h +++ b/include/trace/hooks/block.h @@ -27,6 +27,7 @@ struct bio; struct request_queue; struct request; struct blk_plug; +struct blk_flush_queue; DECLARE_HOOK(android_vh_blk_alloc_rqs, TP_PROTO(size_t *rq_size, struct blk_mq_tag_set *set, @@ -107,6 +108,11 @@ DECLARE_RESTRICTED_HOOK(android_rvh_blk_flush_plug_list, TP_PROTO(struct blk_plug *plug, bool from_schedule), TP_ARGS(plug, from_schedule), 1); +DECLARE_HOOK(android_vh_blk_alloc_flush_queue, + TP_PROTO(bool *skip, int cmd_size, int flags, int node, + struct blk_flush_queue *fq), + TP_ARGS(skip, cmd_size, flags, node, fq)); + #endif /* _TRACE_HOOK_BLOCK_H */ /* This part must be outside protection */