diff options
Diffstat (limited to 'block/blk-sysfs.c')
| -rw-r--r-- | block/blk-sysfs.c | 58 |
1 files changed, 57 insertions, 1 deletions
diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c index a29cb788e408..e29ddfc73cf4 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 | ||
| @@ -176,6 +197,27 @@ queue_rq_affinity_store(struct request_queue *q, const char *page, size_t count) | |||
| 176 | return ret; | 197 | return ret; |
| 177 | } | 198 | } |
| 178 | 199 | ||
| 200 | static ssize_t queue_iostats_show(struct request_queue *q, char *page) | ||
| 201 | { | ||
| 202 | return queue_var_show(blk_queue_io_stat(q), page); | ||
| 203 | } | ||
| 204 | |||
| 205 | static ssize_t queue_iostats_store(struct request_queue *q, const char *page, | ||
| 206 | size_t count) | ||
| 207 | { | ||
| 208 | unsigned long stats; | ||
| 209 | ssize_t ret = queue_var_store(&stats, page, count); | ||
| 210 | |||
| 211 | spin_lock_irq(q->queue_lock); | ||
| 212 | if (stats) | ||
| 213 | queue_flag_set(QUEUE_FLAG_IO_STAT, q); | ||
| 214 | else | ||
| 215 | queue_flag_clear(QUEUE_FLAG_IO_STAT, q); | ||
| 216 | spin_unlock_irq(q->queue_lock); | ||
| 217 | |||
| 218 | return ret; | ||
| 219 | } | ||
| 220 | |||
| 179 | static struct queue_sysfs_entry queue_requests_entry = { | 221 | static struct queue_sysfs_entry queue_requests_entry = { |
| 180 | .attr = {.name = "nr_requests", .mode = S_IRUGO | S_IWUSR }, | 222 | .attr = {.name = "nr_requests", .mode = S_IRUGO | S_IWUSR }, |
| 181 | .show = queue_requests_show, | 223 | .show = queue_requests_show, |
| @@ -210,6 +252,12 @@ static struct queue_sysfs_entry queue_hw_sector_size_entry = { | |||
| 210 | .show = queue_hw_sector_size_show, | 252 | .show = queue_hw_sector_size_show, |
| 211 | }; | 253 | }; |
| 212 | 254 | ||
| 255 | static struct queue_sysfs_entry queue_nonrot_entry = { | ||
| 256 | .attr = {.name = "rotational", .mode = S_IRUGO | S_IWUSR }, | ||
| 257 | .show = queue_nonrot_show, | ||
| 258 | .store = queue_nonrot_store, | ||
| 259 | }; | ||
| 260 | |||
| 213 | static struct queue_sysfs_entry queue_nomerges_entry = { | 261 | static struct queue_sysfs_entry queue_nomerges_entry = { |
| 214 | .attr = {.name = "nomerges", .mode = S_IRUGO | S_IWUSR }, | 262 | .attr = {.name = "nomerges", .mode = S_IRUGO | S_IWUSR }, |
| 215 | .show = queue_nomerges_show, | 263 | .show = queue_nomerges_show, |
| @@ -222,6 +270,12 @@ static struct queue_sysfs_entry queue_rq_affinity_entry = { | |||
| 222 | .store = queue_rq_affinity_store, | 270 | .store = queue_rq_affinity_store, |
| 223 | }; | 271 | }; |
| 224 | 272 | ||
| 273 | static struct queue_sysfs_entry queue_iostats_entry = { | ||
| 274 | .attr = {.name = "iostats", .mode = S_IRUGO | S_IWUSR }, | ||
| 275 | .show = queue_iostats_show, | ||
| 276 | .store = queue_iostats_store, | ||
| 277 | }; | ||
| 278 | |||
| 225 | static struct attribute *default_attrs[] = { | 279 | static struct attribute *default_attrs[] = { |
| 226 | &queue_requests_entry.attr, | 280 | &queue_requests_entry.attr, |
| 227 | &queue_ra_entry.attr, | 281 | &queue_ra_entry.attr, |
| @@ -229,8 +283,10 @@ static struct attribute *default_attrs[] = { | |||
| 229 | &queue_max_sectors_entry.attr, | 283 | &queue_max_sectors_entry.attr, |
| 230 | &queue_iosched_entry.attr, | 284 | &queue_iosched_entry.attr, |
| 231 | &queue_hw_sector_size_entry.attr, | 285 | &queue_hw_sector_size_entry.attr, |
| 286 | &queue_nonrot_entry.attr, | ||
| 232 | &queue_nomerges_entry.attr, | 287 | &queue_nomerges_entry.attr, |
| 233 | &queue_rq_affinity_entry.attr, | 288 | &queue_rq_affinity_entry.attr, |
| 289 | &queue_iostats_entry.attr, | ||
| 234 | NULL, | 290 | NULL, |
| 235 | }; | 291 | }; |
| 236 | 292 | ||
