summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhao lv <hao.lv5@transsion.com>2024-01-10 20:18:19 +0800
committerhao lv <hao.lv5@transsion.com>2024-02-29 08:42:57 +0800
commitf76294a6557b6c99c9ca58d89232171cf693eac2 (patch)
tree32a6ff7759a0d5cfa559ab5211a75de0e4a3a907
parentd26999236603f8ec32f2ba54ab5cbce4717ed7c2 (diff)
downloadcommon-f76294a6557b6c99c9ca58d89232171cf693eac2.tar.gz
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 <hao.lv5@transsion.com>
-rw-r--r--block/blk-flush.c10
-rw-r--r--drivers/android/vendor_hooks.c1
-rw-r--r--include/trace/hooks/block.h6
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 <trace/hooks/block.h>
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 */