Skip to content

Commit

Permalink
blk-mq-debug: Make show() operations interruptible
Browse files Browse the repository at this point in the history
Allow users to interrupt show operations instead of making a user
space process unkillable if ownership of q->sysfs_lock cannot be
obtained.

Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com>
Reviewed-by: Omar Sandoval <osandov@fb.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
  • Loading branch information
Bart Van Assche authored and Jens Axboe committed Feb 1, 2017
1 parent a1ae0f7 commit 8c0f14e
Showing 1 changed file with 26 additions and 8 deletions.
34 changes: 26 additions & 8 deletions block/blk-mq-debugfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -178,13 +178,17 @@ static int hctx_tags_show(struct seq_file *m, void *v)
{
struct blk_mq_hw_ctx *hctx = m->private;
struct request_queue *q = hctx->queue;
int res;

mutex_lock(&q->sysfs_lock);
res = mutex_lock_interruptible(&q->sysfs_lock);
if (res)
goto out;
if (hctx->tags)
blk_mq_debugfs_tags_show(m, hctx->tags);
mutex_unlock(&q->sysfs_lock);

return 0;
out:
return res;
}

static int hctx_tags_open(struct inode *inode, struct file *file)
Expand All @@ -203,12 +207,17 @@ static int hctx_tags_bitmap_show(struct seq_file *m, void *v)
{
struct blk_mq_hw_ctx *hctx = m->private;
struct request_queue *q = hctx->queue;
int res;

mutex_lock(&q->sysfs_lock);
res = mutex_lock_interruptible(&q->sysfs_lock);
if (res)
goto out;
if (hctx->tags)
sbitmap_bitmap_show(&hctx->tags->bitmap_tags.sb, m);
mutex_unlock(&q->sysfs_lock);
return 0;

out:
return res;
}

static int hctx_tags_bitmap_open(struct inode *inode, struct file *file)
Expand All @@ -227,13 +236,17 @@ static int hctx_sched_tags_show(struct seq_file *m, void *v)
{
struct blk_mq_hw_ctx *hctx = m->private;
struct request_queue *q = hctx->queue;
int res;

mutex_lock(&q->sysfs_lock);
res = mutex_lock_interruptible(&q->sysfs_lock);
if (res)
goto out;
if (hctx->sched_tags)
blk_mq_debugfs_tags_show(m, hctx->sched_tags);
mutex_unlock(&q->sysfs_lock);

return 0;
out:
return res;
}

static int hctx_sched_tags_open(struct inode *inode, struct file *file)
Expand All @@ -252,12 +265,17 @@ static int hctx_sched_tags_bitmap_show(struct seq_file *m, void *v)
{
struct blk_mq_hw_ctx *hctx = m->private;
struct request_queue *q = hctx->queue;
int res;

mutex_lock(&q->sysfs_lock);
res = mutex_lock_interruptible(&q->sysfs_lock);
if (res)
goto out;
if (hctx->sched_tags)
sbitmap_bitmap_show(&hctx->sched_tags->bitmap_tags.sb, m);
mutex_unlock(&q->sysfs_lock);
return 0;

out:
return res;
}

static int hctx_sched_tags_bitmap_open(struct inode *inode, struct file *file)
Expand Down

0 comments on commit 8c0f14e

Please sign in to comment.