ANDROID: block: Make sub_page_limit_queues available in debugfs

This new debugfs attribute makes it easier to verify the code that tracks
how many queues require limits below the page size.

Reviewed-by: Luis Chamberlain <mcgrof@kernel.org>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Ming Lei <ming.lei@redhat.com>
Cc: Keith Busch <kbusch@kernel.org>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: Sandeep Dhavale <dhavale@google.com>
Bug: 346870006
Link: https://lore.kernel.org/all/20230612203314.17820-5-bvanassche@acm.org/

[dhavale: this patch is from the series is rejected upstream
but we would like this to be in android kernel in order to support 16KB
page size on storage devices with max segment size 4KB]

Change-Id: Ifae8e08cff597c42f5a5630fac160982af5dc699
This commit is contained in:
Sandeep Dhavale
2025-01-22 12:18:28 -08:00
parent 6e8ff6954a
commit d1e8cd1f03
5 changed files with 24 additions and 1 deletions
+2
View File
@@ -45,6 +45,7 @@
#include <trace/events/block.h>
#include "blk.h"
#include "blk-mq-debugfs.h"
#include "blk-mq-sched.h"
#include "blk-pm.h"
#include "blk-cgroup.h"
@@ -1279,6 +1280,7 @@ int __init blk_dev_init(void)
blk_requestq_cachep = KMEM_CACHE(request_queue, SLAB_PANIC);
blk_debugfs_root = debugfs_create_dir("block", NULL);
blk_mq_debugfs_init();
return 0;
}
+8
View File
@@ -829,3 +829,11 @@ void blk_mq_debugfs_unregister_sched_hctx(struct blk_mq_hw_ctx *hctx)
debugfs_remove_recursive(hctx->sched_debugfs_dir);
hctx->sched_debugfs_dir = NULL;
}
DEFINE_DEBUGFS_ATTRIBUTE(blk_sub_page_limit_queues_fops,
blk_sub_page_limit_queues_get, NULL, "%llu\n");
void blk_mq_debugfs_init(void)
{
debugfs_create_file("sub_page_limit_queues", 0400, blk_debugfs_root,
NULL, &blk_sub_page_limit_queues_fops);
}
+5
View File
@@ -17,6 +17,7 @@ struct blk_mq_debugfs_attr {
const struct seq_operations *seq_ops;
};
void blk_mq_debugfs_init(void);
int __blk_mq_debugfs_rq_show(struct seq_file *m, struct request *rq);
int blk_mq_debugfs_rq_show(struct seq_file *m, void *v);
@@ -36,6 +37,10 @@ void blk_mq_debugfs_unregister_sched_hctx(struct blk_mq_hw_ctx *hctx);
void blk_mq_debugfs_register_rqos(struct rq_qos *rqos);
void blk_mq_debugfs_unregister_rqos(struct rq_qos *rqos);
#else
static inline void blk_mq_debugfs_init(void)
{
}
static inline void blk_mq_debugfs_register(struct request_queue *q)
{
}
+8
View File
@@ -225,6 +225,14 @@ unsupported:
lim->atomic_write_unit_max = 0;
}
/* For debugfs. */
int blk_sub_page_limit_queues_get(void *data, u64 *val)
{
*val = READ_ONCE(blk_nr_sub_page_limit_queues);
return 0;
}
/**
* blk_enable_sub_page_limits - enable support for limits below the page size
* @lim: request queue limits for which to enable support of these features.
+1 -1
View File
@@ -44,12 +44,12 @@ bool __blk_freeze_queue_start(struct request_queue *q,
int __bio_queue_enter(struct request_queue *q, struct bio *bio);
void submit_bio_noacct_nocheck(struct bio *bio);
void bio_await_chain(struct bio *bio);
static inline bool blk_queue_sub_page_limits(const struct queue_limits *lim)
{
return static_branch_unlikely(&blk_sub_page_limits) &&
lim->sub_page_limits;
}
int blk_sub_page_limit_queues_get(void *data, u64 *val);
void blk_disable_sub_page_limits(struct queue_limits *q);
static inline bool blk_try_enter_queue(struct request_queue *q, bool pm)
{