diff options
| author | Jens Axboe <jaxboe@fusionio.com> | 2010-08-07 12:13:50 -0400 |
|---|---|---|
| committer | Jens Axboe <jaxboe@fusionio.com> | 2010-08-07 12:13:50 -0400 |
| commit | 956bcb7c1a9a73c6d5db66e83f32c785d06dc8fc (patch) | |
| tree | dca3c08c3bff512c9d47a78c6762b006e165cc5d /block | |
| parent | e2e1a148bc45855816ae6b4692ce29d0020fa22e (diff) | |
block: add helpers for the trivial queue flag sysfs show/store entries
The code for nonrot, random, and io stats are completely identical.
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
Diffstat (limited to 'block')
| -rw-r--r-- | block/blk-sysfs.c | 104 |
1 files changed, 36 insertions, 68 deletions
diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c index 58b53c354c2c..001ab18078f5 100644 --- a/block/blk-sysfs.c +++ b/block/blk-sysfs.c | |||
| @@ -180,26 +180,36 @@ static ssize_t queue_max_hw_sectors_show(struct request_queue *q, char *page) | |||
| 180 | return queue_var_show(max_hw_sectors_kb, (page)); | 180 | return queue_var_show(max_hw_sectors_kb, (page)); |
| 181 | } | 181 | } |
| 182 | 182 | ||
| 183 | static ssize_t queue_nonrot_show(struct request_queue *q, char *page) | 183 | #define QUEUE_SYSFS_BIT_FNS(name, flag, neg) \ |
| 184 | { | 184 | static ssize_t \ |
| 185 | return queue_var_show(!blk_queue_nonrot(q), page); | 185 | queue_show_##name(struct request_queue *q, char *page) \ |
| 186 | } | 186 | { \ |
| 187 | 187 | int bit; \ | |
| 188 | static ssize_t queue_nonrot_store(struct request_queue *q, const char *page, | 188 | bit = test_bit(QUEUE_FLAG_##flag, &q->queue_flags); \ |
| 189 | size_t count) | 189 | return queue_var_show(neg ? !bit : bit, page); \ |
| 190 | { | 190 | } \ |
| 191 | unsigned long nm; | 191 | static ssize_t \ |
| 192 | ssize_t ret = queue_var_store(&nm, page, count); | 192 | queue_store_##name(struct request_queue *q, const char *page, size_t count) \ |
| 193 | 193 | { \ | |
| 194 | spin_lock_irq(q->queue_lock); | 194 | unsigned long val; \ |
| 195 | if (nm) | 195 | ssize_t ret; \ |
| 196 | queue_flag_clear(QUEUE_FLAG_NONROT, q); | 196 | ret = queue_var_store(&val, page, count); \ |
| 197 | else | 197 | if (neg) \ |
| 198 | queue_flag_set(QUEUE_FLAG_NONROT, q); | 198 | val = !val; \ |
| 199 | spin_unlock_irq(q->queue_lock); | 199 | \ |
| 200 | 200 | spin_lock_irq(q->queue_lock); \ | |
| 201 | return ret; | 201 | if (val) \ |
| 202 | } | 202 | queue_flag_set(QUEUE_FLAG_##flag, q); \ |
| 203 | else \ | ||
| 204 | queue_flag_clear(QUEUE_FLAG_##flag, q); \ | ||
| 205 | spin_unlock_irq(q->queue_lock); \ | ||
| 206 | return ret; \ | ||
| 207 | } | ||
| 208 | |||
| 209 | QUEUE_SYSFS_BIT_FNS(nonrot, NONROT, 1); | ||
| 210 | QUEUE_SYSFS_BIT_FNS(random, ADD_RANDOM, 0); | ||
| 211 | QUEUE_SYSFS_BIT_FNS(iostats, IO_STAT, 0); | ||
| 212 | #undef QUEUE_SYSFS_BIT_FNS | ||
| 203 | 213 | ||
| 204 | static ssize_t queue_nomerges_show(struct request_queue *q, char *page) | 214 | static ssize_t queue_nomerges_show(struct request_queue *q, char *page) |
| 205 | { | 215 | { |
| @@ -250,48 +260,6 @@ queue_rq_affinity_store(struct request_queue *q, const char *page, size_t count) | |||
| 250 | return ret; | 260 | return ret; |
| 251 | } | 261 | } |
| 252 | 262 | ||
| 253 | static ssize_t queue_random_show(struct request_queue *q, char *page) | ||
| 254 | { | ||
| 255 | return queue_var_show(blk_queue_add_random(q), page); | ||
| 256 | } | ||
| 257 | |||
| 258 | static ssize_t queue_random_store(struct request_queue *q, const char *page, | ||
| 259 | size_t count) | ||
| 260 | { | ||
| 261 | unsigned long val; | ||
| 262 | ssize_t ret = queue_var_store(&val, page, count); | ||
| 263 | |||
| 264 | spin_lock_irq(q->queue_lock); | ||
| 265 | if (val) | ||
| 266 | queue_flag_set(QUEUE_FLAG_ADD_RANDOM, q); | ||
| 267 | else | ||
| 268 | queue_flag_clear(QUEUE_FLAG_ADD_RANDOM, q); | ||
| 269 | spin_unlock_irq(q->queue_lock); | ||
| 270 | |||
| 271 | return ret; | ||
| 272 | } | ||
| 273 | |||
| 274 | static ssize_t queue_iostats_show(struct request_queue *q, char *page) | ||
| 275 | { | ||
| 276 | return queue_var_show(blk_queue_io_stat(q), page); | ||
| 277 | } | ||
| 278 | |||
| 279 | static ssize_t queue_iostats_store(struct request_queue *q, const char *page, | ||
| 280 | size_t count) | ||
| 281 | { | ||
| 282 | unsigned long stats; | ||
| 283 | ssize_t ret = queue_var_store(&stats, page, count); | ||
| 284 | |||
| 285 | spin_lock_irq(q->queue_lock); | ||
| 286 | if (stats) | ||
| 287 | queue_flag_set(QUEUE_FLAG_IO_STAT, q); | ||
| 288 | else | ||
| 289 | queue_flag_clear(QUEUE_FLAG_IO_STAT, q); | ||
| 290 | spin_unlock_irq(q->queue_lock); | ||
| 291 | |||
| 292 | return ret; | ||
| 293 | } | ||
| 294 | |||
| 295 | static struct queue_sysfs_entry queue_requests_entry = { | 263 | static struct queue_sysfs_entry queue_requests_entry = { |
| 296 | .attr = {.name = "nr_requests", .mode = S_IRUGO | S_IWUSR }, | 264 | .attr = {.name = "nr_requests", .mode = S_IRUGO | S_IWUSR }, |
| 297 | .show = queue_requests_show, | 265 | .show = queue_requests_show, |
| @@ -373,8 +341,8 @@ static struct queue_sysfs_entry queue_discard_zeroes_data_entry = { | |||
| 373 | 341 | ||
| 374 | static struct queue_sysfs_entry queue_nonrot_entry = { | 342 | static struct queue_sysfs_entry queue_nonrot_entry = { |
| 375 | .attr = {.name = "rotational", .mode = S_IRUGO | S_IWUSR }, | 343 | .attr = {.name = "rotational", .mode = S_IRUGO | S_IWUSR }, |
| 376 | .show = queue_nonrot_show, | 344 | .show = queue_show_nonrot, |
| 377 | .store = queue_nonrot_store, | 345 | .store = queue_store_nonrot, |
| 378 | }; | 346 | }; |
| 379 | 347 | ||
| 380 | static struct queue_sysfs_entry queue_nomerges_entry = { | 348 | static struct queue_sysfs_entry queue_nomerges_entry = { |
| @@ -391,14 +359,14 @@ static struct queue_sysfs_entry queue_rq_affinity_entry = { | |||
| 391 | 359 | ||
| 392 | static struct queue_sysfs_entry queue_iostats_entry = { | 360 | static struct queue_sysfs_entry queue_iostats_entry = { |
| 393 | .attr = {.name = "iostats", .mode = S_IRUGO | S_IWUSR }, | 361 | .attr = {.name = "iostats", .mode = S_IRUGO | S_IWUSR }, |
| 394 | .show = queue_iostats_show, | 362 | .show = queue_show_iostats, |
| 395 | .store = queue_iostats_store, | 363 | .store = queue_store_iostats, |
| 396 | }; | 364 | }; |
| 397 | 365 | ||
| 398 | static struct queue_sysfs_entry queue_random_entry = { | 366 | static struct queue_sysfs_entry queue_random_entry = { |
| 399 | .attr = {.name = "add_random", .mode = S_IRUGO | S_IWUSR }, | 367 | .attr = {.name = "add_random", .mode = S_IRUGO | S_IWUSR }, |
| 400 | .show = queue_random_show, | 368 | .show = queue_show_random, |
| 401 | .store = queue_random_store, | 369 | .store = queue_store_random, |
| 402 | }; | 370 | }; |
| 403 | 371 | ||
| 404 | static struct attribute *default_attrs[] = { | 372 | static struct attribute *default_attrs[] = { |
