Commit cd43e26f071524647e660706b784ebcbefbd2e44

Authored by Martin K. Petersen
Committed by Jens Axboe
1 parent 025146e13b

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

... ... @@ -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) {
... ... @@ -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) {