linux/block/blk-sysfs.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * Functions related to sysfs handling
   4 */
   5#include <linux/kernel.h>
   6#include <linux/slab.h>
   7#include <linux/module.h>
   8#include <linux/bio.h>
   9#include <linux/blkdev.h>
  10#include <linux/backing-dev.h>
  11#include <linux/blktrace_api.h>
  12#include <linux/blk-mq.h>
  13#include <linux/blk-cgroup.h>
  14#include <linux/debugfs.h>
  15
  16#include "blk.h"
  17#include "blk-mq.h"
  18#include "blk-mq-debugfs.h"
  19#include "blk-wbt.h"
  20
  21struct queue_sysfs_entry {
  22        struct attribute attr;
  23        ssize_t (*show)(struct request_queue *, char *);
  24        ssize_t (*store)(struct request_queue *, const char *, size_t);
  25};
  26
  27static ssize_t
  28queue_var_show(unsigned long var, char *page)
  29{
  30        return sprintf(page, "%lu\n", var);
  31}
  32
  33static ssize_t
  34queue_var_store(unsigned long *var, const char *page, size_t count)
  35{
  36        int err;
  37        unsigned long v;
  38
  39        err = kstrtoul(page, 10, &v);
  40        if (err || v > UINT_MAX)
  41                return -EINVAL;
  42
  43        *var = v;
  44
  45        return count;
  46}
  47
  48static ssize_t queue_var_store64(s64 *var, const char *page)
  49{
  50        int err;
  51        s64 v;
  52
  53        err = kstrtos64(page, 10, &v);
  54        if (err < 0)
  55                return err;
  56
  57        *var = v;
  58        return 0;
  59}
  60
  61static ssize_t queue_requests_show(struct request_queue *q, char *page)
  62{
  63        return queue_var_show(q->nr_requests, page);
  64}
  65
  66static ssize_t
  67queue_requests_store(struct request_queue *q, const char *page, size_t count)
  68{
  69        unsigned long nr;
  70        int ret, err;
  71
  72        if (!queue_is_mq(q))
  73                return -EINVAL;
  74
  75        ret = queue_var_store(&nr, page, count);
  76        if (ret < 0)
  77                return ret;
  78
  79        if (nr < BLKDEV_MIN_RQ)
  80                nr = BLKDEV_MIN_RQ;
  81
  82        err = blk_mq_update_nr_requests(q, nr);
  83        if (err)
  84                return err;
  85
  86        return ret;
  87}
  88
  89static ssize_t queue_ra_show(struct request_queue *q, char *page)
  90{
  91        unsigned long ra_kb = q->backing_dev_info->ra_pages <<
  92                                        (PAGE_SHIFT - 10);
  93
  94        return queue_var_show(ra_kb, page);
  95}
  96
  97static ssize_t
  98queue_ra_store(struct request_queue *q, const char *page, size_t count)
  99{
 100        unsigned long ra_kb;
 101        ssize_t ret = queue_var_store(&ra_kb, page, count);
 102
 103        if (ret < 0)
 104                return ret;
 105
 106        q->backing_dev_info->ra_pages = ra_kb >> (PAGE_SHIFT - 10);
 107
 108        return ret;
 109}
 110
 111static ssize_t queue_max_sectors_show(struct request_queue *q, char *page)
 112{
 113        int max_sectors_kb = queue_max_sectors(q) >> 1;
 114
 115        return queue_var_show(max_sectors_kb, page);
 116}
 117
 118static ssize_t queue_max_segments_show(struct request_queue *q, char *page)
 119{
 120        return queue_var_show(queue_max_segments(q), page);
 121}
 122
 123static ssize_t queue_max_discard_segments_show(struct request_queue *q,
 124                char *page)
 125{
 126        return queue_var_show(queue_max_discard_segments(q), page);
 127}
 128
 129static ssize_t queue_max_integrity_segments_show(struct request_queue *q, char *page)
 130{
 131        return queue_var_show(q->limits.max_integrity_segments, page);
 132}
 133
 134static ssize_t queue_max_segment_size_show(struct request_queue *q, char *page)
 135{
 136        return queue_var_show(queue_max_segment_size(q), page);
 137}
 138
 139static ssize_t queue_logical_block_size_show(struct request_queue *q, char *page)
 140{
 141        return queue_var_show(queue_logical_block_size(q), page);
 142}
 143
 144static ssize_t queue_physical_block_size_show(struct request_queue *q, char *page)
 145{
 146        return queue_var_show(queue_physical_block_size(q), page);
 147}
 148
 149static ssize_t queue_chunk_sectors_show(struct request_queue *q, char *page)
 150{
 151        return queue_var_show(q->limits.chunk_sectors, page);
 152}
 153
 154static ssize_t queue_io_min_show(struct request_queue *q, char *page)
 155{
 156        return queue_var_show(queue_io_min(q), page);
 157}
 158
 159static ssize_t queue_io_opt_show(struct request_queue *q, char *page)
 160{
 161        return queue_var_show(queue_io_opt(q), page);
 162}
 163
 164static ssize_t queue_discard_granularity_show(struct request_queue *q, char *page)
 165{
 166        return queue_var_show(q->limits.discard_granularity, page);
 167}
 168
 169static ssize_t queue_discard_max_hw_show(struct request_queue *q, char *page)
 170{
 171
 172        return sprintf(page, "%llu\n",
 173                (unsigned long long)q->limits.max_hw_discard_sectors << 9);
 174}
 175
 176static ssize_t queue_discard_max_show(struct request_queue *q, char *page)
 177{
 178        return sprintf(page, "%llu\n",
 179                       (unsigned long long)q->limits.max_discard_sectors << 9);
 180}
 181
 182static ssize_t queue_discard_max_store(struct request_queue *q,
 183                                       const char *page, size_t count)
 184{
 185        unsigned long max_discard;
 186        ssize_t ret = queue_var_store(&max_discard, page, count);
 187
 188        if (ret < 0)
 189                return ret;
 190
 191        if (max_discard & (q->limits.discard_granularity - 1))
 192                return -EINVAL;
 193
 194        max_discard >>= 9;
 195        if (max_discard > UINT_MAX)
 196                return -EINVAL;
 197
 198        if (max_discard > q->limits.max_hw_discard_sectors)
 199                max_discard = q->limits.max_hw_discard_sectors;
 200
 201        q->limits.max_discard_sectors = max_discard;
 202        return ret;
 203}
 204
 205static ssize_t queue_discard_zeroes_data_show(struct request_queue *q, char *page)
 206{
 207        return queue_var_show(0, page);
 208}
 209
 210static ssize_t queue_write_same_max_show(struct request_queue *q, char *page)
 211{
 212        return sprintf(page, "%llu\n",
 213                (unsigned long long)q->limits.max_write_same_sectors << 9);
 214}
 215
 216static ssize_t queue_write_zeroes_max_show(struct request_queue *q, char *page)
 217{
 218        return sprintf(page, "%llu\n",
 219                (unsigned long long)q->limits.max_write_zeroes_sectors << 9);
 220}
 221
 222static ssize_t queue_zone_write_granularity_show(struct request_queue *q,
 223                                                 char *page)
 224{
 225        return queue_var_show(queue_zone_write_granularity(q), page);
 226}
 227
 228static ssize_t queue_zone_append_max_show(struct request_queue *q, char *page)
 229{
 230        unsigned long long max_sectors = q->limits.max_zone_append_sectors;
 231
 232        return sprintf(page, "%llu\n", max_sectors << SECTOR_SHIFT);
 233}
 234
 235static ssize_t
 236queue_max_sectors_store(struct request_queue *q, const char *page, size_t count)
 237{
 238        unsigned long max_sectors_kb,
 239                max_hw_sectors_kb = queue_max_hw_sectors(q) >> 1,
 240                        page_kb = 1 << (PAGE_SHIFT - 10);
 241        ssize_t ret = queue_var_store(&max_sectors_kb, page, count);
 242
 243        if (ret < 0)
 244                return ret;
 245
 246        max_hw_sectors_kb = min_not_zero(max_hw_sectors_kb, (unsigned long)
 247                                         q->limits.max_dev_sectors >> 1);
 248
 249        if (max_sectors_kb > max_hw_sectors_kb || max_sectors_kb < page_kb)
 250                return -EINVAL;
 251
 252        spin_lock_irq(&q->queue_lock);
 253        q->limits.max_sectors = max_sectors_kb << 1;
 254        q->backing_dev_info->io_pages = max_sectors_kb >> (PAGE_SHIFT - 10);
 255        spin_unlock_irq(&q->queue_lock);
 256
 257        return ret;
 258}
 259
 260static ssize_t queue_max_hw_sectors_show(struct request_queue *q, char *page)
 261{
 262        int max_hw_sectors_kb = queue_max_hw_sectors(q) >> 1;
 263
 264        return queue_var_show(max_hw_sectors_kb, page);
 265}
 266
 267static ssize_t queue_virt_boundary_mask_show(struct request_queue *q, char *page)
 268{
 269        return queue_var_show(q->limits.virt_boundary_mask, page);
 270}
 271
 272#define QUEUE_SYSFS_BIT_FNS(name, flag, neg)                            \
 273static ssize_t                                                          \
 274queue_##name##_show(struct request_queue *q, char *page)                \
 275{                                                                       \
 276        int bit;                                                        \
 277        bit = test_bit(QUEUE_FLAG_##flag, &q->queue_flags);             \
 278        return queue_var_show(neg ? !bit : bit, page);                  \
 279}                                                                       \
 280static ssize_t                                                          \
 281queue_##name##_store(struct request_queue *q, const char *page, size_t count) \
 282{                                                                       \
 283        unsigned long val;                                              \
 284        ssize_t ret;                                                    \
 285        ret = queue_var_store(&val, page, count);                       \
 286        if (ret < 0)                                                    \
 287                 return ret;                                            \
 288        if (neg)                                                        \
 289                val = !val;                                             \
 290                                                                        \
 291        if (val)                                                        \
 292                blk_queue_flag_set(QUEUE_FLAG_##flag, q);               \
 293        else                                                            \
 294                blk_queue_flag_clear(QUEUE_FLAG_##flag, q);             \
 295        return ret;                                                     \
 296}
 297
 298QUEUE_SYSFS_BIT_FNS(nonrot, NONROT, 1);
 299QUEUE_SYSFS_BIT_FNS(random, ADD_RANDOM, 0);
 300QUEUE_SYSFS_BIT_FNS(iostats, IO_STAT, 0);
 301QUEUE_SYSFS_BIT_FNS(stable_writes, STABLE_WRITES, 0);
 302#undef QUEUE_SYSFS_BIT_FNS
 303
 304static ssize_t queue_zoned_show(struct request_queue *q, char *page)
 305{
 306        switch (blk_queue_zoned_model(q)) {
 307        case BLK_ZONED_HA:
 308                return sprintf(page, "host-aware\n");
 309        case BLK_ZONED_HM:
 310                return sprintf(page, "host-managed\n");
 311        default:
 312                return sprintf(page, "none\n");
 313        }
 314}
 315
 316static ssize_t queue_nr_zones_show(struct request_queue *q, char *page)
 317{
 318        return queue_var_show(blk_queue_nr_zones(q), page);
 319}
 320
 321static ssize_t queue_max_open_zones_show(struct request_queue *q, char *page)
 322{
 323        return queue_var_show(queue_max_open_zones(q), page);
 324}
 325
 326static ssize_t queue_max_active_zones_show(struct request_queue *q, char *page)
 327{
 328        return queue_var_show(queue_max_active_zones(q), page);
 329}
 330
 331static ssize_t queue_nomerges_show(struct request_queue *q, char *page)
 332{
 333        return queue_var_show((blk_queue_nomerges(q) << 1) |
 334                               blk_queue_noxmerges(q), page);
 335}
 336
 337static ssize_t queue_nomerges_store(struct request_queue *q, const char *page,
 338                                    size_t count)
 339{
 340        unsigned long nm;
 341        ssize_t ret = queue_var_store(&nm, page, count);
 342
 343        if (ret < 0)
 344                return ret;
 345
 346        blk_queue_flag_clear(QUEUE_FLAG_NOMERGES, q);
 347        blk_queue_flag_clear(QUEUE_FLAG_NOXMERGES, q);
 348        if (nm == 2)
 349                blk_queue_flag_set(QUEUE_FLAG_NOMERGES, q);
 350        else if (nm)
 351                blk_queue_flag_set(QUEUE_FLAG_NOXMERGES, q);
 352
 353        return ret;
 354}
 355
 356static ssize_t queue_rq_affinity_show(struct request_queue *q, char *page)
 357{
 358        bool set = test_bit(QUEUE_FLAG_SAME_COMP, &q->queue_flags);
 359        bool force = test_bit(QUEUE_FLAG_SAME_FORCE, &q->queue_flags);
 360
 361        return queue_var_show(set << force, page);
 362}
 363
 364static ssize_t
 365queue_rq_affinity_store(struct request_queue *q, const char *page, size_t count)
 366{
 367        ssize_t ret = -EINVAL;
 368#ifdef CONFIG_SMP
 369        unsigned long val;
 370
 371        ret = queue_var_store(&val, page, count);
 372        if (ret < 0)
 373                return ret;
 374
 375        if (val == 2) {
 376                blk_queue_flag_set(QUEUE_FLAG_SAME_COMP, q);
 377                blk_queue_flag_set(QUEUE_FLAG_SAME_FORCE, q);
 378        } else if (val == 1) {
 379                blk_queue_flag_set(QUEUE_FLAG_SAME_COMP, q);
 380                blk_queue_flag_clear(QUEUE_FLAG_SAME_FORCE, q);
 381        } else if (val == 0) {
 382                blk_queue_flag_clear(QUEUE_FLAG_SAME_COMP, q);
 383                blk_queue_flag_clear(QUEUE_FLAG_SAME_FORCE, q);
 384        }
 385#endif
 386        return ret;
 387}
 388
 389static ssize_t queue_poll_delay_show(struct request_queue *q, char *page)
 390{
 391        int val;
 392
 393        if (q->poll_nsec == BLK_MQ_POLL_CLASSIC)
 394                val = BLK_MQ_POLL_CLASSIC;
 395        else
 396                val = q->poll_nsec / 1000;
 397
 398        return sprintf(page, "%d\n", val);
 399}
 400
 401static ssize_t queue_poll_delay_store(struct request_queue *q, const char *page,
 402                                size_t count)
 403{
 404        int err, val;
 405
 406        if (!q->mq_ops || !q->mq_ops->poll)
 407                return -EINVAL;
 408
 409        err = kstrtoint(page, 10, &val);
 410        if (err < 0)
 411                return err;
 412
 413        if (val == BLK_MQ_POLL_CLASSIC)
 414                q->poll_nsec = BLK_MQ_POLL_CLASSIC;
 415        else if (val >= 0)
 416                q->poll_nsec = val * 1000;
 417        else
 418                return -EINVAL;
 419
 420        return count;
 421}
 422
 423static ssize_t queue_poll_show(struct request_queue *q, char *page)
 424{
 425        return queue_var_show(test_bit(QUEUE_FLAG_POLL, &q->queue_flags), page);
 426}
 427
 428static ssize_t queue_poll_store(struct request_queue *q, const char *page,
 429                                size_t count)
 430{
 431        unsigned long poll_on;
 432        ssize_t ret;
 433
 434        if (!q->tag_set || q->tag_set->nr_maps <= HCTX_TYPE_POLL ||
 435            !q->tag_set->map[HCTX_TYPE_POLL].nr_queues)
 436                return -EINVAL;
 437
 438        ret = queue_var_store(&poll_on, page, count);
 439        if (ret < 0)
 440                return ret;
 441
 442        if (poll_on) {
 443                blk_queue_flag_set(QUEUE_FLAG_POLL, q);
 444        } else {
 445                blk_mq_freeze_queue(q);
 446                blk_queue_flag_clear(QUEUE_FLAG_POLL, q);
 447                blk_mq_unfreeze_queue(q);
 448        }
 449
 450        return ret;
 451}
 452
 453static ssize_t queue_io_timeout_show(struct request_queue *q, char *page)
 454{
 455        return sprintf(page, "%u\n", jiffies_to_msecs(q->rq_timeout));
 456}
 457
 458static ssize_t queue_io_timeout_store(struct request_queue *q, const char *page,
 459                                  size_t count)
 460{
 461        unsigned int val;
 462        int err;
 463
 464        err = kstrtou32(page, 10, &val);
 465        if (err || val == 0)
 466                return -EINVAL;
 467
 468        blk_queue_rq_timeout(q, msecs_to_jiffies(val));
 469
 470        return count;
 471}
 472
 473static ssize_t queue_wb_lat_show(struct request_queue *q, char *page)
 474{
 475        if (!wbt_rq_qos(q))
 476                return -EINVAL;
 477
 478        return sprintf(page, "%llu\n", div_u64(wbt_get_min_lat(q), 1000));
 479}
 480
 481static ssize_t queue_wb_lat_store(struct request_queue *q, const char *page,
 482                                  size_t count)
 483{
 484        struct rq_qos *rqos;
 485        ssize_t ret;
 486        s64 val;
 487
 488        ret = queue_var_store64(&val, page);
 489        if (ret < 0)
 490                return ret;
 491        if (val < -1)
 492                return -EINVAL;
 493
 494        rqos = wbt_rq_qos(q);
 495        if (!rqos) {
 496                ret = wbt_init(q);
 497                if (ret)
 498                        return ret;
 499        }
 500
 501        if (val == -1)
 502                val = wbt_default_latency_nsec(q);
 503        else if (val >= 0)
 504                val *= 1000ULL;
 505
 506        if (wbt_get_min_lat(q) == val)
 507                return count;
 508
 509        /*
 510         * Ensure that the queue is idled, in case the latency update
 511         * ends up either enabling or disabling wbt completely. We can't
 512         * have IO inflight if that happens.
 513         */
 514        blk_mq_freeze_queue(q);
 515        blk_mq_quiesce_queue(q);
 516
 517        wbt_set_min_lat(q, val);
 518
 519        blk_mq_unquiesce_queue(q);
 520        blk_mq_unfreeze_queue(q);
 521
 522        return count;
 523}
 524
 525static ssize_t queue_wc_show(struct request_queue *q, char *page)
 526{
 527        if (test_bit(QUEUE_FLAG_WC, &q->queue_flags))
 528                return sprintf(page, "write back\n");
 529
 530        return sprintf(page, "write through\n");
 531}
 532
 533static ssize_t queue_wc_store(struct request_queue *q, const char *page,
 534                              size_t count)
 535{
 536        int set = -1;
 537
 538        if (!strncmp(page, "write back", 10))
 539                set = 1;
 540        else if (!strncmp(page, "write through", 13) ||
 541                 !strncmp(page, "none", 4))
 542                set = 0;
 543
 544        if (set == -1)
 545                return -EINVAL;
 546
 547        if (set)
 548                blk_queue_flag_set(QUEUE_FLAG_WC, q);
 549        else
 550                blk_queue_flag_clear(QUEUE_FLAG_WC, q);
 551
 552        return count;
 553}
 554
 555static ssize_t queue_fua_show(struct request_queue *q, char *page)
 556{
 557        return sprintf(page, "%u\n", test_bit(QUEUE_FLAG_FUA, &q->queue_flags));
 558}
 559
 560static ssize_t queue_dax_show(struct request_queue *q, char *page)
 561{
 562        return queue_var_show(blk_queue_dax(q), page);
 563}
 564
 565#define QUEUE_RO_ENTRY(_prefix, _name)                  \
 566static struct queue_sysfs_entry _prefix##_entry = {     \
 567        .attr   = { .name = _name, .mode = 0444 },      \
 568        .show   = _prefix##_show,                       \
 569};
 570
 571#define QUEUE_RW_ENTRY(_prefix, _name)                  \
 572static struct queue_sysfs_entry _prefix##_entry = {     \
 573        .attr   = { .name = _name, .mode = 0644 },      \
 574        .show   = _prefix##_show,                       \
 575        .store  = _prefix##_store,                      \
 576};
 577
 578QUEUE_RW_ENTRY(queue_requests, "nr_requests");
 579QUEUE_RW_ENTRY(queue_ra, "read_ahead_kb");
 580QUEUE_RW_ENTRY(queue_max_sectors, "max_sectors_kb");
 581QUEUE_RO_ENTRY(queue_max_hw_sectors, "max_hw_sectors_kb");
 582QUEUE_RO_ENTRY(queue_max_segments, "max_segments");
 583QUEUE_RO_ENTRY(queue_max_integrity_segments, "max_integrity_segments");
 584QUEUE_RO_ENTRY(queue_max_segment_size, "max_segment_size");
 585QUEUE_RW_ENTRY(elv_iosched, "scheduler");
 586
 587QUEUE_RO_ENTRY(queue_logical_block_size, "logical_block_size");
 588QUEUE_RO_ENTRY(queue_physical_block_size, "physical_block_size");
 589QUEUE_RO_ENTRY(queue_chunk_sectors, "chunk_sectors");
 590QUEUE_RO_ENTRY(queue_io_min, "minimum_io_size");
 591QUEUE_RO_ENTRY(queue_io_opt, "optimal_io_size");
 592
 593QUEUE_RO_ENTRY(queue_max_discard_segments, "max_discard_segments");
 594QUEUE_RO_ENTRY(queue_discard_granularity, "discard_granularity");
 595QUEUE_RO_ENTRY(queue_discard_max_hw, "discard_max_hw_bytes");
 596QUEUE_RW_ENTRY(queue_discard_max, "discard_max_bytes");
 597QUEUE_RO_ENTRY(queue_discard_zeroes_data, "discard_zeroes_data");
 598
 599QUEUE_RO_ENTRY(queue_write_same_max, "write_same_max_bytes");
 600QUEUE_RO_ENTRY(queue_write_zeroes_max, "write_zeroes_max_bytes");
 601QUEUE_RO_ENTRY(queue_zone_append_max, "zone_append_max_bytes");
 602QUEUE_RO_ENTRY(queue_zone_write_granularity, "zone_write_granularity");
 603
 604QUEUE_RO_ENTRY(queue_zoned, "zoned");
 605QUEUE_RO_ENTRY(queue_nr_zones, "nr_zones");
 606QUEUE_RO_ENTRY(queue_max_open_zones, "max_open_zones");
 607QUEUE_RO_ENTRY(queue_max_active_zones, "max_active_zones");
 608
 609QUEUE_RW_ENTRY(queue_nomerges, "nomerges");
 610QUEUE_RW_ENTRY(queue_rq_affinity, "rq_affinity");
 611QUEUE_RW_ENTRY(queue_poll, "io_poll");
 612QUEUE_RW_ENTRY(queue_poll_delay, "io_poll_delay");
 613QUEUE_RW_ENTRY(queue_wc, "write_cache");
 614QUEUE_RO_ENTRY(queue_fua, "fua");
 615QUEUE_RO_ENTRY(queue_dax, "dax");
 616QUEUE_RW_ENTRY(queue_io_timeout, "io_timeout");
 617QUEUE_RW_ENTRY(queue_wb_lat, "wbt_lat_usec");
 618QUEUE_RO_ENTRY(queue_virt_boundary_mask, "virt_boundary_mask");
 619
 620#ifdef CONFIG_BLK_DEV_THROTTLING_LOW
 621QUEUE_RW_ENTRY(blk_throtl_sample_time, "throttle_sample_time");
 622#endif
 623
 624/* legacy alias for logical_block_size: */
 625static struct queue_sysfs_entry queue_hw_sector_size_entry = {
 626        .attr = {.name = "hw_sector_size", .mode = 0444 },
 627        .show = queue_logical_block_size_show,
 628};
 629
 630QUEUE_RW_ENTRY(queue_nonrot, "rotational");
 631QUEUE_RW_ENTRY(queue_iostats, "iostats");
 632QUEUE_RW_ENTRY(queue_random, "add_random");
 633QUEUE_RW_ENTRY(queue_stable_writes, "stable_writes");
 634
 635static struct attribute *queue_attrs[] = {
 636        &queue_requests_entry.attr,
 637        &queue_ra_entry.attr,
 638        &queue_max_hw_sectors_entry.attr,
 639        &queue_max_sectors_entry.attr,
 640        &queue_max_segments_entry.attr,
 641        &queue_max_discard_segments_entry.attr,
 642        &queue_max_integrity_segments_entry.attr,
 643        &queue_max_segment_size_entry.attr,
 644        &elv_iosched_entry.attr,
 645        &queue_hw_sector_size_entry.attr,
 646        &queue_logical_block_size_entry.attr,
 647        &queue_physical_block_size_entry.attr,
 648        &queue_chunk_sectors_entry.attr,
 649        &queue_io_min_entry.attr,
 650        &queue_io_opt_entry.attr,
 651        &queue_discard_granularity_entry.attr,
 652        &queue_discard_max_entry.attr,
 653        &queue_discard_max_hw_entry.attr,
 654        &queue_discard_zeroes_data_entry.attr,
 655        &queue_write_same_max_entry.attr,
 656        &queue_write_zeroes_max_entry.attr,
 657        &queue_zone_append_max_entry.attr,
 658        &queue_zone_write_granularity_entry.attr,
 659        &queue_nonrot_entry.attr,
 660        &queue_zoned_entry.attr,
 661        &queue_nr_zones_entry.attr,
 662        &queue_max_open_zones_entry.attr,
 663        &queue_max_active_zones_entry.attr,
 664        &queue_nomerges_entry.attr,
 665        &queue_rq_affinity_entry.attr,
 666        &queue_iostats_entry.attr,
 667        &queue_stable_writes_entry.attr,
 668        &queue_random_entry.attr,
 669        &queue_poll_entry.attr,
 670        &queue_wc_entry.attr,
 671        &queue_fua_entry.attr,
 672        &queue_dax_entry.attr,
 673        &queue_wb_lat_entry.attr,
 674        &queue_poll_delay_entry.attr,
 675        &queue_io_timeout_entry.attr,
 676#ifdef CONFIG_BLK_DEV_THROTTLING_LOW
 677        &blk_throtl_sample_time_entry.attr,
 678#endif
 679        &queue_virt_boundary_mask_entry.attr,
 680        NULL,
 681};
 682
 683static umode_t queue_attr_visible(struct kobject *kobj, struct attribute *attr,
 684                                int n)
 685{
 686        struct request_queue *q =
 687                container_of(kobj, struct request_queue, kobj);
 688
 689        if (attr == &queue_io_timeout_entry.attr &&
 690                (!q->mq_ops || !q->mq_ops->timeout))
 691                        return 0;
 692
 693        if ((attr == &queue_max_open_zones_entry.attr ||
 694             attr == &queue_max_active_zones_entry.attr) &&
 695            !blk_queue_is_zoned(q))
 696                return 0;
 697
 698        return attr->mode;
 699}
 700
 701static struct attribute_group queue_attr_group = {
 702        .attrs = queue_attrs,
 703        .is_visible = queue_attr_visible,
 704};
 705
 706
 707#define to_queue(atr) container_of((atr), struct queue_sysfs_entry, attr)
 708
 709static ssize_t
 710queue_attr_show(struct kobject *kobj, struct attribute *attr, char *page)
 711{
 712        struct queue_sysfs_entry *entry = to_queue(attr);
 713        struct request_queue *q =
 714                container_of(kobj, struct request_queue, kobj);
 715        ssize_t res;
 716
 717        if (!entry->show)
 718                return -EIO;
 719        mutex_lock(&q->sysfs_lock);
 720        res = entry->show(q, page);
 721        mutex_unlock(&q->sysfs_lock);
 722        return res;
 723}
 724
 725static ssize_t
 726queue_attr_store(struct kobject *kobj, struct attribute *attr,
 727                    const char *page, size_t length)
 728{
 729        struct queue_sysfs_entry *entry = to_queue(attr);
 730        struct request_queue *q;
 731        ssize_t res;
 732
 733        if (!entry->store)
 734                return -EIO;
 735
 736        q = container_of(kobj, struct request_queue, kobj);
 737        mutex_lock(&q->sysfs_lock);
 738        res = entry->store(q, page, length);
 739        mutex_unlock(&q->sysfs_lock);
 740        return res;
 741}
 742
 743static void blk_free_queue_rcu(struct rcu_head *rcu_head)
 744{
 745        struct request_queue *q = container_of(rcu_head, struct request_queue,
 746                                               rcu_head);
 747        kmem_cache_free(blk_requestq_cachep, q);
 748}
 749
 750/* Unconfigure the I/O scheduler and dissociate from the cgroup controller. */
 751static void blk_exit_queue(struct request_queue *q)
 752{
 753        /*
 754         * Since the I/O scheduler exit code may access cgroup information,
 755         * perform I/O scheduler exit before disassociating from the block
 756         * cgroup controller.
 757         */
 758        if (q->elevator) {
 759                ioc_clear_queue(q);
 760                __elevator_exit(q, q->elevator);
 761        }
 762
 763        /*
 764         * Remove all references to @q from the block cgroup controller before
 765         * restoring @q->queue_lock to avoid that restoring this pointer causes
 766         * e.g. blkcg_print_blkgs() to crash.
 767         */
 768        blkcg_exit_queue(q);
 769
 770        /*
 771         * Since the cgroup code may dereference the @q->backing_dev_info
 772         * pointer, only decrease its reference count after having removed the
 773         * association with the block cgroup controller.
 774         */
 775        bdi_put(q->backing_dev_info);
 776}
 777
 778/**
 779 * blk_release_queue - releases all allocated resources of the request_queue
 780 * @kobj: pointer to a kobject, whose container is a request_queue
 781 *
 782 * This function releases all allocated resources of the request queue.
 783 *
 784 * The struct request_queue refcount is incremented with blk_get_queue() and
 785 * decremented with blk_put_queue(). Once the refcount reaches 0 this function
 786 * is called.
 787 *
 788 * For drivers that have a request_queue on a gendisk and added with
 789 * __device_add_disk() the refcount to request_queue will reach 0 with
 790 * the last put_disk() called by the driver. For drivers which don't use
 791 * __device_add_disk() this happens with blk_cleanup_queue().
 792 *
 793 * Drivers exist which depend on the release of the request_queue to be
 794 * synchronous, it should not be deferred.
 795 *
 796 * Context: can sleep
 797 */
 798static void blk_release_queue(struct kobject *kobj)
 799{
 800        struct request_queue *q =
 801                container_of(kobj, struct request_queue, kobj);
 802
 803        might_sleep();
 804
 805        if (test_bit(QUEUE_FLAG_POLL_STATS, &q->queue_flags))
 806                blk_stat_remove_callback(q, q->poll_cb);
 807        blk_stat_free_callback(q->poll_cb);
 808
 809        blk_free_queue_stats(q->stats);
 810
 811        if (queue_is_mq(q)) {
 812                struct blk_mq_hw_ctx *hctx;
 813                int i;
 814
 815                cancel_delayed_work_sync(&q->requeue_work);
 816
 817                queue_for_each_hw_ctx(q, hctx, i)
 818                        cancel_delayed_work_sync(&hctx->run_work);
 819        }
 820
 821        blk_exit_queue(q);
 822
 823        blk_queue_free_zone_bitmaps(q);
 824
 825        if (queue_is_mq(q))
 826                blk_mq_release(q);
 827
 828        blk_trace_shutdown(q);
 829        mutex_lock(&q->debugfs_mutex);
 830        debugfs_remove_recursive(q->debugfs_dir);
 831        mutex_unlock(&q->debugfs_mutex);
 832
 833        if (queue_is_mq(q))
 834                blk_mq_debugfs_unregister(q);
 835
 836        bioset_exit(&q->bio_split);
 837
 838        ida_simple_remove(&blk_queue_ida, q->id);
 839        call_rcu(&q->rcu_head, blk_free_queue_rcu);
 840}
 841
 842static const struct sysfs_ops queue_sysfs_ops = {
 843        .show   = queue_attr_show,
 844        .store  = queue_attr_store,
 845};
 846
 847struct kobj_type blk_queue_ktype = {
 848        .sysfs_ops      = &queue_sysfs_ops,
 849        .release        = blk_release_queue,
 850};
 851
 852/**
 853 * blk_register_queue - register a block layer queue with sysfs
 854 * @disk: Disk of which the request queue should be registered with sysfs.
 855 */
 856int blk_register_queue(struct gendisk *disk)
 857{
 858        int ret;
 859        struct device *dev = disk_to_dev(disk);
 860        struct request_queue *q = disk->queue;
 861
 862        if (WARN_ON(!q))
 863                return -ENXIO;
 864
 865        WARN_ONCE(blk_queue_registered(q),
 866                  "%s is registering an already registered queue\n",
 867                  kobject_name(&dev->kobj));
 868
 869        blk_queue_update_readahead(q);
 870
 871        ret = blk_trace_init_sysfs(dev);
 872        if (ret)
 873                return ret;
 874
 875        mutex_lock(&q->sysfs_dir_lock);
 876
 877        ret = kobject_add(&q->kobj, kobject_get(&dev->kobj), "%s", "queue");
 878        if (ret < 0) {
 879                blk_trace_remove_sysfs(dev);
 880                goto unlock;
 881        }
 882
 883        ret = sysfs_create_group(&q->kobj, &queue_attr_group);
 884        if (ret) {
 885                blk_trace_remove_sysfs(dev);
 886                kobject_del(&q->kobj);
 887                kobject_put(&dev->kobj);
 888                goto unlock;
 889        }
 890
 891        mutex_lock(&q->debugfs_mutex);
 892        q->debugfs_dir = debugfs_create_dir(kobject_name(q->kobj.parent),
 893                                            blk_debugfs_root);
 894        mutex_unlock(&q->debugfs_mutex);
 895
 896        if (queue_is_mq(q)) {
 897                __blk_mq_register_dev(dev, q);
 898                blk_mq_debugfs_register(q);
 899        }
 900
 901        mutex_lock(&q->sysfs_lock);
 902        if (q->elevator) {
 903                ret = elv_register_queue(q, false);
 904                if (ret) {
 905                        mutex_unlock(&q->sysfs_lock);
 906                        mutex_unlock(&q->sysfs_dir_lock);
 907                        kobject_del(&q->kobj);
 908                        blk_trace_remove_sysfs(dev);
 909                        kobject_put(&dev->kobj);
 910                        return ret;
 911                }
 912        }
 913
 914        blk_queue_flag_set(QUEUE_FLAG_REGISTERED, q);
 915        wbt_enable_default(q);
 916        blk_throtl_register_queue(q);
 917
 918        /* Now everything is ready and send out KOBJ_ADD uevent */
 919        kobject_uevent(&q->kobj, KOBJ_ADD);
 920        if (q->elevator)
 921                kobject_uevent(&q->elevator->kobj, KOBJ_ADD);
 922        mutex_unlock(&q->sysfs_lock);
 923
 924        ret = 0;
 925unlock:
 926        mutex_unlock(&q->sysfs_dir_lock);
 927
 928        /*
 929         * SCSI probing may synchronously create and destroy a lot of
 930         * request_queues for non-existent devices.  Shutting down a fully
 931         * functional queue takes measureable wallclock time as RCU grace
 932         * periods are involved.  To avoid excessive latency in these
 933         * cases, a request_queue starts out in a degraded mode which is
 934         * faster to shut down and is made fully functional here as
 935         * request_queues for non-existent devices never get registered.
 936         */
 937        if (!blk_queue_init_done(q)) {
 938                blk_queue_flag_set(QUEUE_FLAG_INIT_DONE, q);
 939                percpu_ref_switch_to_percpu(&q->q_usage_counter);
 940        }
 941
 942        return ret;
 943}
 944EXPORT_SYMBOL_GPL(blk_register_queue);
 945
 946/**
 947 * blk_unregister_queue - counterpart of blk_register_queue()
 948 * @disk: Disk of which the request queue should be unregistered from sysfs.
 949 *
 950 * Note: the caller is responsible for guaranteeing that this function is called
 951 * after blk_register_queue() has finished.
 952 */
 953void blk_unregister_queue(struct gendisk *disk)
 954{
 955        struct request_queue *q = disk->queue;
 956
 957        if (WARN_ON(!q))
 958                return;
 959
 960        /* Return early if disk->queue was never registered. */
 961        if (!blk_queue_registered(q))
 962                return;
 963
 964        /*
 965         * Since sysfs_remove_dir() prevents adding new directory entries
 966         * before removal of existing entries starts, protect against
 967         * concurrent elv_iosched_store() calls.
 968         */
 969        mutex_lock(&q->sysfs_lock);
 970        blk_queue_flag_clear(QUEUE_FLAG_REGISTERED, q);
 971        mutex_unlock(&q->sysfs_lock);
 972
 973        mutex_lock(&q->sysfs_dir_lock);
 974        /*
 975         * Remove the sysfs attributes before unregistering the queue data
 976         * structures that can be modified through sysfs.
 977         */
 978        if (queue_is_mq(q))
 979                blk_mq_unregister_dev(disk_to_dev(disk), q);
 980
 981        kobject_uevent(&q->kobj, KOBJ_REMOVE);
 982        kobject_del(&q->kobj);
 983        blk_trace_remove_sysfs(disk_to_dev(disk));
 984
 985        mutex_lock(&q->sysfs_lock);
 986        if (q->elevator)
 987                elv_unregister_queue(q);
 988        mutex_unlock(&q->sysfs_lock);
 989        mutex_unlock(&q->sysfs_dir_lock);
 990
 991        kobject_put(&disk_to_dev(disk)->kobj);
 992}
 993