diff options
| author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2009-01-07 06:22:39 -0500 |
|---|---|---|
| committer | Jens Axboe <jens.axboe@oracle.com> | 2009-01-30 06:34:37 -0500 |
| commit | 1308835ffffe6d61ad1f48c5c381c9cc47f683ec (patch) | |
| tree | 5430cde36604537fdc3c597f53f65cba990f08fd /block/blk-sysfs.c | |
| parent | 16642eb68216d8e0e136a99e514e9166e7125838 (diff) | |
block: export SSD/non-rotational queue flag through sysfs
For some devices (i.e. CFA ATA) we can't reliably detect whether
the device is of rotational or non-rotational type so we need to
leave the final decision about this setting to the user-space.
As a bonus do a minor CodingStyle fixup in queue_nomerges_store().
Suggested-by: Alan Cox <alan@lxorguk.ukuu.org.uk>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Diffstat (limited to 'block/blk-sysfs.c')
| -rw-r--r-- | block/blk-sysfs.c | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c index a29cb788e408..b538ab8dbbd1 100644 --- a/block/blk-sysfs.c +++ b/block/blk-sysfs.c | |||
| @@ -130,6 +130,27 @@ static ssize_t queue_max_hw_sectors_show(struct request_queue *q, char *page) | |||
| 130 | return queue_var_show(max_hw_sectors_kb, (page)); | 130 | return queue_var_show(max_hw_sectors_kb, (page)); |
| 131 | } | 131 | } |
| 132 | 132 | ||
| 133 | static ssize_t queue_nonrot_show(struct request_queue *q, char *page) | ||
| 134 | { | ||
| 135 | return queue_var_show(!blk_queue_nonrot(q), page); | ||
| 136 | } | ||
| 137 | |||
| 138 | static ssize_t queue_nonrot_store(struct request_queue *q, const char *page, | ||
| 139 | size_t count) | ||
| 140 | { | ||
| 141 | unsigned long nm; | ||
| 142 | ssize_t ret = queue_var_store(&nm, page, count); | ||
| 143 | |||
| 144 | spin_lock_irq(q->queue_lock); | ||
| 145 | if (nm) | ||
| 146 | queue_flag_clear(QUEUE_FLAG_NONROT, q); | ||
| 147 | else | ||
| 148 | queue_flag_set(QUEUE_FLAG_NONROT, q); | ||
| 149 | spin_unlock_irq(q->queue_lock); | ||
| 150 | |||
| 151 | return ret; | ||
| 152 | } | ||
| 153 | |||
| 133 | static ssize_t queue_nomerges_show(struct request_queue *q, char *page) | 154 | static ssize_t queue_nomerges_show(struct request_queue *q, char *page) |
| 134 | { | 155 | { |
| 135 | return queue_var_show(blk_queue_nomerges(q), page); | 156 | return queue_var_show(blk_queue_nomerges(q), page); |
| @@ -146,8 +167,8 @@ static ssize_t queue_nomerges_store(struct request_queue *q, const char *page, | |||
| 146 | queue_flag_set(QUEUE_FLAG_NOMERGES, q); | 167 | queue_flag_set(QUEUE_FLAG_NOMERGES, q); |
| 147 | else | 168 | else |
| 148 | queue_flag_clear(QUEUE_FLAG_NOMERGES, q); | 169 | queue_flag_clear(QUEUE_FLAG_NOMERGES, q); |
| 149 | |||
| 150 | spin_unlock_irq(q->queue_lock); | 170 | spin_unlock_irq(q->queue_lock); |
| 171 | |||
| 151 | return ret; | 172 | return ret; |
| 152 | } | 173 | } |
| 153 | 174 | ||
| @@ -210,6 +231,12 @@ static struct queue_sysfs_entry queue_hw_sector_size_entry = { | |||
| 210 | .show = queue_hw_sector_size_show, | 231 | .show = queue_hw_sector_size_show, |
| 211 | }; | 232 | }; |
| 212 | 233 | ||
| 234 | static struct queue_sysfs_entry queue_nonrot_entry = { | ||
| 235 | .attr = {.name = "rotational", .mode = S_IRUGO | S_IWUSR }, | ||
| 236 | .show = queue_nonrot_show, | ||
| 237 | .store = queue_nonrot_store, | ||
| 238 | }; | ||
| 239 | |||
| 213 | static struct queue_sysfs_entry queue_nomerges_entry = { | 240 | static struct queue_sysfs_entry queue_nomerges_entry = { |
| 214 | .attr = {.name = "nomerges", .mode = S_IRUGO | S_IWUSR }, | 241 | .attr = {.name = "nomerges", .mode = S_IRUGO | S_IWUSR }, |
| 215 | .show = queue_nomerges_show, | 242 | .show = queue_nomerges_show, |
| @@ -229,6 +256,7 @@ static struct attribute *default_attrs[] = { | |||
| 229 | &queue_max_sectors_entry.attr, | 256 | &queue_max_sectors_entry.attr, |
| 230 | &queue_iosched_entry.attr, | 257 | &queue_iosched_entry.attr, |
| 231 | &queue_hw_sector_size_entry.attr, | 258 | &queue_hw_sector_size_entry.attr, |
| 259 | &queue_nonrot_entry.attr, | ||
| 232 | &queue_nomerges_entry.attr, | 260 | &queue_nomerges_entry.attr, |
| 233 | &queue_rq_affinity_entry.attr, | 261 | &queue_rq_affinity_entry.attr, |
| 234 | NULL, | 262 | NULL, |
