Skip to content

Commit cd43e26

Browse files
martinkpetersenJens Axboe
authored andcommitted
block: Expose stacked device queues in sysfs
Currently stacking devices do not have a queue directory in sysfs. However, many of the I/O characteristics like sector size, maximum request size, etc. are queue properties. This patch enables the queue directory for MD/DM devices. The elevator code has been modified to deal with queues that do not have an I/O scheduler. Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
1 parent 025146e commit cd43e26

File tree

2 files changed

+15
-4
lines changed

2 files changed

+15
-4
lines changed

block/blk-sysfs.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -395,16 +395,16 @@ int blk_register_queue(struct gendisk *disk)
395395
if (WARN_ON(!q))
396396
return -ENXIO;
397397

398-
if (!q->request_fn)
399-
return 0;
400-
401398
ret = kobject_add(&q->kobj, kobject_get(&disk_to_dev(disk)->kobj),
402399
"%s", "queue");
403400
if (ret < 0)
404401
return ret;
405402

406403
kobject_uevent(&q->kobj, KOBJ_ADD);
407404

405+
if (!q->request_fn)
406+
return 0;
407+
408408
ret = elv_register_queue(q);
409409
if (ret) {
410410
kobject_uevent(&q->kobj, KOBJ_REMOVE);

block/elevator.c

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -575,6 +575,9 @@ void elv_drain_elevator(struct request_queue *q)
575575
*/
576576
void elv_quiesce_start(struct request_queue *q)
577577
{
578+
if (!q->elevator)
579+
return;
580+
578581
queue_flag_set(QUEUE_FLAG_ELVSWITCH, q);
579582

580583
/*
@@ -1050,6 +1053,9 @@ ssize_t elv_iosched_store(struct request_queue *q, const char *name,
10501053
char elevator_name[ELV_NAME_MAX];
10511054
struct elevator_type *e;
10521055

1056+
if (!q->elevator)
1057+
return count;
1058+
10531059
strlcpy(elevator_name, name, sizeof(elevator_name));
10541060
strstrip(elevator_name);
10551061

@@ -1073,10 +1079,15 @@ ssize_t elv_iosched_store(struct request_queue *q, const char *name,
10731079
ssize_t elv_iosched_show(struct request_queue *q, char *name)
10741080
{
10751081
struct elevator_queue *e = q->elevator;
1076-
struct elevator_type *elv = e->elevator_type;
1082+
struct elevator_type *elv;
10771083
struct elevator_type *__e;
10781084
int len = 0;
10791085

1086+
if (!q->elevator)
1087+
return sprintf(name, "none\n");
1088+
1089+
elv = e->elevator_type;
1090+
10801091
spin_lock(&elv_list_lock);
10811092
list_for_each_entry(__e, &elv_list, list) {
10821093
if (!strcmp(elv->elevator_name, __e->elevator_name))

0 commit comments

Comments
 (0)