Message ID | 1D08B61A9CF0974AA09887BE32D889DA12B851@ULS-OP-MBXIP03.sdcorp.global.sandisk.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 03/29/2017 02:20 PM, Bart Van Assche wrote: > Make it possible to check whether or not a block layer queue has > been stopped. Make it possible to run a blk-mq queue from user > space. I like this, I've had run-this-queue wired up as well from sysfs in the past. Maybe we should push it one further, and also allow things like running a stopped queue? Would probably be nicer if the file accepted input like "run" (which would be your current run-this-queue) and "start" (start stopped queues). Then we could also EINVAL writes that we don't grok, instead of just blindly always running the queue.
On 03/29/2017 10:20 PM, Bart Van Assche wrote: > Make it possible to check whether or not a block layer queue has > been stopped. Make it possible to run a blk-mq queue from user > space. > > Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> > Cc: Omar Sandoval <osandov@fb.com> > Cc: Hannes Reinecke <hare@suse.com> > --- > block/blk-mq-debugfs.c | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 84 insertions(+) > About bloody time :-) Reviewed-by: Hannes Reinecke <hare@suse.com> Cheers, Hannes
On Thu, 2017-03-30 at 07:50 +0200, Hannes Reinecke wrote: > On 03/29/2017 10:20 PM, Bart Van Assche wrote: > > Make it possible to check whether or not a block layer queue has > > been stopped. Make it possible to run a blk-mq queue from user > > space. > > > > Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> > > Cc: Omar Sandoval <osandov@fb.com> > > Cc: Hannes Reinecke <hare@suse.com> > > --- > > block/blk-mq-debugfs.c | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++ > > 1 file changed, 84 insertions(+) > > > > About bloody time :-) > > Reviewed-by: Hannes Reinecke <hare@suse.com> Hello Hannes, Thanks for the review :-) However, had you noticed that I had already posted a v2 of this patch? Anyway, since I have improved v2 further after I had posted it, I will post a v3 today. Bart.
On 03/30/2017 09:16 AM, Bart Van Assche wrote: > On Thu, 2017-03-30 at 07:50 +0200, Hannes Reinecke wrote: >> On 03/29/2017 10:20 PM, Bart Van Assche wrote: >>> Make it possible to check whether or not a block layer queue has >>> been stopped. Make it possible to run a blk-mq queue from user >>> space. >>> >>> Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> >>> Cc: Omar Sandoval <osandov@fb.com> >>> Cc: Hannes Reinecke <hare@suse.com> >>> --- >>> block/blk-mq-debugfs.c | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++ >>> 1 file changed, 84 insertions(+) >>> >> >> About bloody time :-) >> >> Reviewed-by: Hannes Reinecke <hare@suse.com> > > Hello Hannes, > > Thanks for the review :-) However, had you noticed that I had already > posted a v2 of this patch? Anyway, since I have improved v2 further > after I had posted it, I will post a v3 today. I didn't see a v2 posting?
On Thu, 2017-03-30 at 09:19 -0600, Jens Axboe wrote: > On 03/30/2017 09:16 AM, Bart Van Assche wrote: > > On Thu, 2017-03-30 at 07:50 +0200, Hannes Reinecke wrote: > > > On 03/29/2017 10:20 PM, Bart Van Assche wrote: > > > > Make it possible to check whether or not a block layer queue has > > > > been stopped. Make it possible to run a blk-mq queue from user > > > > space. > > > > > > > > Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> > > > > Cc: Omar Sandoval <osandov@fb.com> > > > > Cc: Hannes Reinecke <hare@suse.com> > > > > --- > > > > block/blk-mq-debugfs.c | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++ > > > > 1 file changed, 84 insertions(+) > > > > > > > > > > About bloody time :-) > > > > > > Reviewed-by: Hannes Reinecke <hare@suse.com> > > > > Hello Hannes, > > > > Thanks for the review :-) However, had you noticed that I had already > > posted a v2 of this patch? Anyway, since I have improved v2 further > > after I had posted it, I will post a v3 today. > > I didn't see a v2 posting? Hello Jens, The label "v2" was missing from the subject, maybe that's why it didn't get noticed. Anyway, v2 is available e.g. at URL http://marc.info/?l=linux-block&m=149082319230648. Bart.
diff --git a/block/blk-mq-debugfs.c b/block/blk-mq-debugfs.c index 4b3f962a9c7a..cff780c47d88 100644 --- a/block/blk-mq-debugfs.c +++ b/block/blk-mq-debugfs.c @@ -43,6 +43,87 @@ static int blk_mq_debugfs_seq_open(struct inode *inode, struct file *file, return ret; } +static const char *const blk_queue_flag_name[] = { + [QUEUE_FLAG_QUEUED] = "QUEUED", + [QUEUE_FLAG_STOPPED] = "STOPPED", + [QUEUE_FLAG_SYNCFULL] = "SYNCFULL", + [QUEUE_FLAG_ASYNCFULL] = "ASYNCFULL", + [QUEUE_FLAG_DYING] = "DYING", + [QUEUE_FLAG_BYPASS] = "BYPASS", + [QUEUE_FLAG_BIDI] = "BIDI", + [QUEUE_FLAG_NOMERGES] = "NOMERGES", + [QUEUE_FLAG_SAME_COMP] = "SAME_COMP", + [QUEUE_FLAG_FAIL_IO] = "FAIL_IO", + [QUEUE_FLAG_STACKABLE] = "STACKABLE", + [QUEUE_FLAG_NONROT] = "NONROT", + [QUEUE_FLAG_VIRT] = "VIRT", + [QUEUE_FLAG_IO_STAT] = "IO_STAT", + [QUEUE_FLAG_DISCARD] = "DISCARD", + [QUEUE_FLAG_NOXMERGES] = "NOXMERGES", + [QUEUE_FLAG_ADD_RANDOM] = "ADD_RANDOM", + [QUEUE_FLAG_SECERASE] = "SECERASE", + [QUEUE_FLAG_SAME_FORCE] = "SAME_FORCE", + [QUEUE_FLAG_DEAD] = "DEAD", + [QUEUE_FLAG_INIT_DONE] = "INIT_DONE", + [QUEUE_FLAG_NO_SG_MERGE] = "NO_SG_MERGE", + [QUEUE_FLAG_POLL] = "POLL", + [QUEUE_FLAG_WC] = "WC", + [QUEUE_FLAG_FUA] = "FUA", + [QUEUE_FLAG_FLUSH_NQ] = "FLUSH_NQ", + [QUEUE_FLAG_DAX] = "DAX", + [QUEUE_FLAG_STATS] = "STATS", + [QUEUE_FLAG_RESTART] = "RESTART", + [QUEUE_FLAG_POLL_STATS] = "POLL_STATS", +}; + +static int blk_queue_flags_show(struct seq_file *m, void *v) +{ + struct request_queue *q = m->private; + bool sep = false; + int i; + + for (i = 0; i < sizeof(q->queue_flags) * BITS_PER_BYTE; i++) { + if (!(q->queue_flags & BIT(i))) + continue; + if (sep) + seq_puts(m, " "); + sep = true; + if (blk_queue_flag_name[i]) + seq_puts(m, blk_queue_flag_name[i]); + else + seq_printf(m, "%d", i); + } + seq_puts(m, "\n"); + return 0; +} + +static ssize_t blk_queue_flags_store(struct file *file, const char __user *ubuf, + size_t len, loff_t *offp) +{ + struct request_queue *q = file_inode(file)->i_private; + + blk_mq_run_hw_queues(q, true); + return len; +} + +static int blk_queue_flags_open(struct inode *inode, struct file *file) +{ + return single_open(file, blk_queue_flags_show, inode->i_private); +} + +static const struct file_operations blk_queue_flags_fops = { + .open = blk_queue_flags_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release, + .write = blk_queue_flags_store, +}; + +static const struct blk_mq_debugfs_attr blk_queue_attrs[] = { + {"state", 0600, &blk_queue_flags_fops}, + {}, +}; + static void print_stat(struct seq_file *m, struct blk_rq_stat *stat) { if (stat->nr_samples) { @@ -735,6 +816,9 @@ int blk_mq_debugfs_register_hctxs(struct request_queue *q) if (!q->debugfs_dir) return -ENOENT; + if (!debugfs_create_files(q->debugfs_dir, q, blk_queue_attrs)) + goto err; + q->mq_debugfs_dir = debugfs_create_dir("mq", q->debugfs_dir); if (!q->mq_debugfs_dir) goto err;
Make it possible to check whether or not a block layer queue has been stopped. Make it possible to run a blk-mq queue from user space. Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> Cc: Omar Sandoval <osandov@fb.com> Cc: Hannes Reinecke <hare@suse.com> --- block/blk-mq-debugfs.c | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+)