Commit cd43e26f071524647e660706b784ebcbefbd2e44
Committed by
Jens Axboe
1 parent
025146e13b
Exists in
master
and in
7 other branches
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>
Showing 2 changed files with 15 additions and 4 deletions Side-by-side Diff
block/blk-sysfs.c
... | ... | @@ -395,15 +395,15 @@ |
395 | 395 | if (WARN_ON(!q)) |
396 | 396 | return -ENXIO; |
397 | 397 | |
398 | - if (!q->request_fn) | |
399 | - return 0; | |
400 | - | |
401 | 398 | ret = kobject_add(&q->kobj, kobject_get(&disk_to_dev(disk)->kobj), |
402 | 399 | "%s", "queue"); |
403 | 400 | if (ret < 0) |
404 | 401 | return ret; |
405 | 402 | |
406 | 403 | kobject_uevent(&q->kobj, KOBJ_ADD); |
404 | + | |
405 | + if (!q->request_fn) | |
406 | + return 0; | |
407 | 407 | |
408 | 408 | ret = elv_register_queue(q); |
409 | 409 | if (ret) { |
block/elevator.c
... | ... | @@ -575,6 +575,9 @@ |
575 | 575 | */ |
576 | 576 | void elv_quiesce_start(struct request_queue *q) |
577 | 577 | { |
578 | + if (!q->elevator) | |
579 | + return; | |
580 | + | |
578 | 581 | queue_flag_set(QUEUE_FLAG_ELVSWITCH, q); |
579 | 582 | |
580 | 583 | /* |
... | ... | @@ -1050,6 +1053,9 @@ |
1050 | 1053 | char elevator_name[ELV_NAME_MAX]; |
1051 | 1054 | struct elevator_type *e; |
1052 | 1055 | |
1056 | + if (!q->elevator) | |
1057 | + return count; | |
1058 | + | |
1053 | 1059 | strlcpy(elevator_name, name, sizeof(elevator_name)); |
1054 | 1060 | strstrip(elevator_name); |
1055 | 1061 | |
1056 | 1062 | |
... | ... | @@ -1073,9 +1079,14 @@ |
1073 | 1079 | ssize_t elv_iosched_show(struct request_queue *q, char *name) |
1074 | 1080 | { |
1075 | 1081 | struct elevator_queue *e = q->elevator; |
1076 | - struct elevator_type *elv = e->elevator_type; | |
1082 | + struct elevator_type *elv; | |
1077 | 1083 | struct elevator_type *__e; |
1078 | 1084 | int len = 0; |
1085 | + | |
1086 | + if (!q->elevator) | |
1087 | + return sprintf(name, "none\n"); | |
1088 | + | |
1089 | + elv = e->elevator_type; | |
1079 | 1090 | |
1080 | 1091 | spin_lock(&elv_list_lock); |
1081 | 1092 | list_for_each_entry(__e, &elv_list, list) { |