Commit 4d25339e authored by Weiping Zhang's avatar Weiping Zhang Committed by Jens Axboe

block: don't show io_timeout if driver has no timeout handler

If the low level driver has no timeout handler, the
/sys/block/<disk>/queue/io_timeout will not be displayed.
Reviewed-by: default avatarBart Van Assche <bvanassche@acm.org>
Signed-off-by: default avatarWeiping Zhang <zhangweiping@didiglobal.com>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent f9f76879
...@@ -728,7 +728,7 @@ static struct queue_sysfs_entry throtl_sample_time_entry = { ...@@ -728,7 +728,7 @@ static struct queue_sysfs_entry throtl_sample_time_entry = {
}; };
#endif #endif
static struct attribute *default_attrs[] = { static struct attribute *queue_attrs[] = {
&queue_requests_entry.attr, &queue_requests_entry.attr,
&queue_ra_entry.attr, &queue_ra_entry.attr,
&queue_max_hw_sectors_entry.attr, &queue_max_hw_sectors_entry.attr,
...@@ -770,6 +770,25 @@ static struct attribute *default_attrs[] = { ...@@ -770,6 +770,25 @@ static struct attribute *default_attrs[] = {
NULL, NULL,
}; };
static umode_t queue_attr_visible(struct kobject *kobj, struct attribute *attr,
int n)
{
struct request_queue *q =
container_of(kobj, struct request_queue, kobj);
if (attr == &queue_io_timeout_entry.attr &&
(!q->mq_ops || !q->mq_ops->timeout))
return 0;
return attr->mode;
}
static struct attribute_group queue_attr_group = {
.attrs = queue_attrs,
.is_visible = queue_attr_visible,
};
#define to_queue(atr) container_of((atr), struct queue_sysfs_entry, attr) #define to_queue(atr) container_of((atr), struct queue_sysfs_entry, attr)
static ssize_t static ssize_t
...@@ -890,7 +909,6 @@ static const struct sysfs_ops queue_sysfs_ops = { ...@@ -890,7 +909,6 @@ static const struct sysfs_ops queue_sysfs_ops = {
struct kobj_type blk_queue_ktype = { struct kobj_type blk_queue_ktype = {
.sysfs_ops = &queue_sysfs_ops, .sysfs_ops = &queue_sysfs_ops,
.default_attrs = default_attrs,
.release = blk_release_queue, .release = blk_release_queue,
}; };
...@@ -939,6 +957,14 @@ int blk_register_queue(struct gendisk *disk) ...@@ -939,6 +957,14 @@ int blk_register_queue(struct gendisk *disk)
goto unlock; goto unlock;
} }
ret = sysfs_create_group(&q->kobj, &queue_attr_group);
if (ret) {
blk_trace_remove_sysfs(dev);
kobject_del(&q->kobj);
kobject_put(&dev->kobj);
goto unlock;
}
if (queue_is_mq(q)) { if (queue_is_mq(q)) {
__blk_mq_register_dev(dev, q); __blk_mq_register_dev(dev, q);
blk_mq_debugfs_register(q); blk_mq_debugfs_register(q);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment