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 */