blk-sysfs.c (754451342fc5954061ede74b0a8485ec4a4c6eaa) blk-sysfs.c (5657a819a8d94426c76be04dcedfad0f64cfff00)
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>

--- 477 unchanged lines hidden (view full) ---

486 if (set)
487 blk_queue_flag_set(QUEUE_FLAG_WC, q);
488 else
489 blk_queue_flag_clear(QUEUE_FLAG_WC, q);
490
491 return count;
492}
493
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>

--- 477 unchanged lines hidden (view full) ---

486 if (set)
487 blk_queue_flag_set(QUEUE_FLAG_WC, q);
488 else
489 blk_queue_flag_clear(QUEUE_FLAG_WC, q);
490
491 return count;
492}
493
494static ssize_t queue_fua_show(struct request_queue *q, char *page)
495{
496 return sprintf(page, "%u\n", test_bit(QUEUE_FLAG_FUA, &q->queue_flags));
497}
498
494static ssize_t queue_dax_show(struct request_queue *q, char *page)
495{
496 return queue_var_show(blk_queue_dax(q), page);
497}
498
499static struct queue_sysfs_entry queue_requests_entry = {
499static ssize_t queue_dax_show(struct request_queue *q, char *page)
500{
501 return queue_var_show(blk_queue_dax(q), page);
502}
503
504static struct queue_sysfs_entry queue_requests_entry = {
500 .attr = {.name = "nr_requests", .mode = S_IRUGO | S_IWUSR },
505 .attr = {.name = "nr_requests", .mode = 0644 },
501 .show = queue_requests_show,
502 .store = queue_requests_store,
503};
504
505static struct queue_sysfs_entry queue_ra_entry = {
506 .show = queue_requests_show,
507 .store = queue_requests_store,
508};
509
510static struct queue_sysfs_entry queue_ra_entry = {
506 .attr = {.name = "read_ahead_kb", .mode = S_IRUGO | S_IWUSR },
511 .attr = {.name = "read_ahead_kb", .mode = 0644 },
507 .show = queue_ra_show,
508 .store = queue_ra_store,
509};
510
511static struct queue_sysfs_entry queue_max_sectors_entry = {
512 .show = queue_ra_show,
513 .store = queue_ra_store,
514};
515
516static struct queue_sysfs_entry queue_max_sectors_entry = {
512 .attr = {.name = "max_sectors_kb", .mode = S_IRUGO | S_IWUSR },
517 .attr = {.name = "max_sectors_kb", .mode = 0644 },
513 .show = queue_max_sectors_show,
514 .store = queue_max_sectors_store,
515};
516
517static struct queue_sysfs_entry queue_max_hw_sectors_entry = {
518 .show = queue_max_sectors_show,
519 .store = queue_max_sectors_store,
520};
521
522static struct queue_sysfs_entry queue_max_hw_sectors_entry = {
518 .attr = {.name = "max_hw_sectors_kb", .mode = S_IRUGO },
523 .attr = {.name = "max_hw_sectors_kb", .mode = 0444 },
519 .show = queue_max_hw_sectors_show,
520};
521
522static struct queue_sysfs_entry queue_max_segments_entry = {
524 .show = queue_max_hw_sectors_show,
525};
526
527static struct queue_sysfs_entry queue_max_segments_entry = {
523 .attr = {.name = "max_segments", .mode = S_IRUGO },
528 .attr = {.name = "max_segments", .mode = 0444 },
524 .show = queue_max_segments_show,
525};
526
527static struct queue_sysfs_entry queue_max_discard_segments_entry = {
529 .show = queue_max_segments_show,
530};
531
532static struct queue_sysfs_entry queue_max_discard_segments_entry = {
528 .attr = {.name = "max_discard_segments", .mode = S_IRUGO },
533 .attr = {.name = "max_discard_segments", .mode = 0444 },
529 .show = queue_max_discard_segments_show,
530};
531
532static struct queue_sysfs_entry queue_max_integrity_segments_entry = {
534 .show = queue_max_discard_segments_show,
535};
536
537static struct queue_sysfs_entry queue_max_integrity_segments_entry = {
533 .attr = {.name = "max_integrity_segments", .mode = S_IRUGO },
538 .attr = {.name = "max_integrity_segments", .mode = 0444 },
534 .show = queue_max_integrity_segments_show,
535};
536
537static struct queue_sysfs_entry queue_max_segment_size_entry = {
539 .show = queue_max_integrity_segments_show,
540};
541
542static struct queue_sysfs_entry queue_max_segment_size_entry = {
538 .attr = {.name = "max_segment_size", .mode = S_IRUGO },
543 .attr = {.name = "max_segment_size", .mode = 0444 },
539 .show = queue_max_segment_size_show,
540};
541
542static struct queue_sysfs_entry queue_iosched_entry = {
544 .show = queue_max_segment_size_show,
545};
546
547static struct queue_sysfs_entry queue_iosched_entry = {
543 .attr = {.name = "scheduler", .mode = S_IRUGO | S_IWUSR },
548 .attr = {.name = "scheduler", .mode = 0644 },
544 .show = elv_iosched_show,
545 .store = elv_iosched_store,
546};
547
548static struct queue_sysfs_entry queue_hw_sector_size_entry = {
549 .show = elv_iosched_show,
550 .store = elv_iosched_store,
551};
552
553static struct queue_sysfs_entry queue_hw_sector_size_entry = {
549 .attr = {.name = "hw_sector_size", .mode = S_IRUGO },
554 .attr = {.name = "hw_sector_size", .mode = 0444 },
550 .show = queue_logical_block_size_show,
551};
552
553static struct queue_sysfs_entry queue_logical_block_size_entry = {
555 .show = queue_logical_block_size_show,
556};
557
558static struct queue_sysfs_entry queue_logical_block_size_entry = {
554 .attr = {.name = "logical_block_size", .mode = S_IRUGO },
559 .attr = {.name = "logical_block_size", .mode = 0444 },
555 .show = queue_logical_block_size_show,
556};
557
558static struct queue_sysfs_entry queue_physical_block_size_entry = {
560 .show = queue_logical_block_size_show,
561};
562
563static struct queue_sysfs_entry queue_physical_block_size_entry = {
559 .attr = {.name = "physical_block_size", .mode = S_IRUGO },
564 .attr = {.name = "physical_block_size", .mode = 0444 },
560 .show = queue_physical_block_size_show,
561};
562
563static struct queue_sysfs_entry queue_chunk_sectors_entry = {
565 .show = queue_physical_block_size_show,
566};
567
568static struct queue_sysfs_entry queue_chunk_sectors_entry = {
564 .attr = {.name = "chunk_sectors", .mode = S_IRUGO },
569 .attr = {.name = "chunk_sectors", .mode = 0444 },
565 .show = queue_chunk_sectors_show,
566};
567
568static struct queue_sysfs_entry queue_io_min_entry = {
570 .show = queue_chunk_sectors_show,
571};
572
573static struct queue_sysfs_entry queue_io_min_entry = {
569 .attr = {.name = "minimum_io_size", .mode = S_IRUGO },
574 .attr = {.name = "minimum_io_size", .mode = 0444 },
570 .show = queue_io_min_show,
571};
572
573static struct queue_sysfs_entry queue_io_opt_entry = {
575 .show = queue_io_min_show,
576};
577
578static struct queue_sysfs_entry queue_io_opt_entry = {
574 .attr = {.name = "optimal_io_size", .mode = S_IRUGO },
579 .attr = {.name = "optimal_io_size", .mode = 0444 },
575 .show = queue_io_opt_show,
576};
577
578static struct queue_sysfs_entry queue_discard_granularity_entry = {
580 .show = queue_io_opt_show,
581};
582
583static struct queue_sysfs_entry queue_discard_granularity_entry = {
579 .attr = {.name = "discard_granularity", .mode = S_IRUGO },
584 .attr = {.name = "discard_granularity", .mode = 0444 },
580 .show = queue_discard_granularity_show,
581};
582
583static struct queue_sysfs_entry queue_discard_max_hw_entry = {
585 .show = queue_discard_granularity_show,
586};
587
588static struct queue_sysfs_entry queue_discard_max_hw_entry = {
584 .attr = {.name = "discard_max_hw_bytes", .mode = S_IRUGO },
589 .attr = {.name = "discard_max_hw_bytes", .mode = 0444 },
585 .show = queue_discard_max_hw_show,
586};
587
588static struct queue_sysfs_entry queue_discard_max_entry = {
590 .show = queue_discard_max_hw_show,
591};
592
593static struct queue_sysfs_entry queue_discard_max_entry = {
589 .attr = {.name = "discard_max_bytes", .mode = S_IRUGO | S_IWUSR },
594 .attr = {.name = "discard_max_bytes", .mode = 0644 },
590 .show = queue_discard_max_show,
591 .store = queue_discard_max_store,
592};
593
594static struct queue_sysfs_entry queue_discard_zeroes_data_entry = {
595 .show = queue_discard_max_show,
596 .store = queue_discard_max_store,
597};
598
599static struct queue_sysfs_entry queue_discard_zeroes_data_entry = {
595 .attr = {.name = "discard_zeroes_data", .mode = S_IRUGO },
600 .attr = {.name = "discard_zeroes_data", .mode = 0444 },
596 .show = queue_discard_zeroes_data_show,
597};
598
599static struct queue_sysfs_entry queue_write_same_max_entry = {
601 .show = queue_discard_zeroes_data_show,
602};
603
604static struct queue_sysfs_entry queue_write_same_max_entry = {
600 .attr = {.name = "write_same_max_bytes", .mode = S_IRUGO },
605 .attr = {.name = "write_same_max_bytes", .mode = 0444 },
601 .show = queue_write_same_max_show,
602};
603
604static struct queue_sysfs_entry queue_write_zeroes_max_entry = {
606 .show = queue_write_same_max_show,
607};
608
609static struct queue_sysfs_entry queue_write_zeroes_max_entry = {
605 .attr = {.name = "write_zeroes_max_bytes", .mode = S_IRUGO },
610 .attr = {.name = "write_zeroes_max_bytes", .mode = 0444 },
606 .show = queue_write_zeroes_max_show,
607};
608
609static struct queue_sysfs_entry queue_nonrot_entry = {
611 .show = queue_write_zeroes_max_show,
612};
613
614static struct queue_sysfs_entry queue_nonrot_entry = {
610 .attr = {.name = "rotational", .mode = S_IRUGO | S_IWUSR },
615 .attr = {.name = "rotational", .mode = 0644 },
611 .show = queue_show_nonrot,
612 .store = queue_store_nonrot,
613};
614
615static struct queue_sysfs_entry queue_zoned_entry = {
616 .show = queue_show_nonrot,
617 .store = queue_store_nonrot,
618};
619
620static struct queue_sysfs_entry queue_zoned_entry = {
616 .attr = {.name = "zoned", .mode = S_IRUGO },
621 .attr = {.name = "zoned", .mode = 0444 },
617 .show = queue_zoned_show,
618};
619
620static struct queue_sysfs_entry queue_nomerges_entry = {
622 .show = queue_zoned_show,
623};
624
625static struct queue_sysfs_entry queue_nomerges_entry = {
621 .attr = {.name = "nomerges", .mode = S_IRUGO | S_IWUSR },
626 .attr = {.name = "nomerges", .mode = 0644 },
622 .show = queue_nomerges_show,
623 .store = queue_nomerges_store,
624};
625
626static struct queue_sysfs_entry queue_rq_affinity_entry = {
627 .show = queue_nomerges_show,
628 .store = queue_nomerges_store,
629};
630
631static struct queue_sysfs_entry queue_rq_affinity_entry = {
627 .attr = {.name = "rq_affinity", .mode = S_IRUGO | S_IWUSR },
632 .attr = {.name = "rq_affinity", .mode = 0644 },
628 .show = queue_rq_affinity_show,
629 .store = queue_rq_affinity_store,
630};
631
632static struct queue_sysfs_entry queue_iostats_entry = {
633 .show = queue_rq_affinity_show,
634 .store = queue_rq_affinity_store,
635};
636
637static struct queue_sysfs_entry queue_iostats_entry = {
633 .attr = {.name = "iostats", .mode = S_IRUGO | S_IWUSR },
638 .attr = {.name = "iostats", .mode = 0644 },
634 .show = queue_show_iostats,
635 .store = queue_store_iostats,
636};
637
638static struct queue_sysfs_entry queue_random_entry = {
639 .show = queue_show_iostats,
640 .store = queue_store_iostats,
641};
642
643static struct queue_sysfs_entry queue_random_entry = {
639 .attr = {.name = "add_random", .mode = S_IRUGO | S_IWUSR },
644 .attr = {.name = "add_random", .mode = 0644 },
640 .show = queue_show_random,
641 .store = queue_store_random,
642};
643
644static struct queue_sysfs_entry queue_poll_entry = {
645 .show = queue_show_random,
646 .store = queue_store_random,
647};
648
649static struct queue_sysfs_entry queue_poll_entry = {
645 .attr = {.name = "io_poll", .mode = S_IRUGO | S_IWUSR },
650 .attr = {.name = "io_poll", .mode = 0644 },
646 .show = queue_poll_show,
647 .store = queue_poll_store,
648};
649
650static struct queue_sysfs_entry queue_poll_delay_entry = {
651 .show = queue_poll_show,
652 .store = queue_poll_store,
653};
654
655static struct queue_sysfs_entry queue_poll_delay_entry = {
651 .attr = {.name = "io_poll_delay", .mode = S_IRUGO | S_IWUSR },
656 .attr = {.name = "io_poll_delay", .mode = 0644 },
652 .show = queue_poll_delay_show,
653 .store = queue_poll_delay_store,
654};
655
656static struct queue_sysfs_entry queue_wc_entry = {
657 .show = queue_poll_delay_show,
658 .store = queue_poll_delay_store,
659};
660
661static struct queue_sysfs_entry queue_wc_entry = {
657 .attr = {.name = "write_cache", .mode = S_IRUGO | S_IWUSR },
662 .attr = {.name = "write_cache", .mode = 0644 },
658 .show = queue_wc_show,
659 .store = queue_wc_store,
660};
661
663 .show = queue_wc_show,
664 .store = queue_wc_store,
665};
666
667static struct queue_sysfs_entry queue_fua_entry = {
668 .attr = {.name = "fua", .mode = 0444 },
669 .show = queue_fua_show,
670};
671
662static struct queue_sysfs_entry queue_dax_entry = {
672static struct queue_sysfs_entry queue_dax_entry = {
663 .attr = {.name = "dax", .mode = S_IRUGO },
673 .attr = {.name = "dax", .mode = 0444 },
664 .show = queue_dax_show,
665};
666
667static struct queue_sysfs_entry queue_wb_lat_entry = {
674 .show = queue_dax_show,
675};
676
677static struct queue_sysfs_entry queue_wb_lat_entry = {
668 .attr = {.name = "wbt_lat_usec", .mode = S_IRUGO | S_IWUSR },
678 .attr = {.name = "wbt_lat_usec", .mode = 0644 },
669 .show = queue_wb_lat_show,
670 .store = queue_wb_lat_store,
671};
672
673#ifdef CONFIG_BLK_DEV_THROTTLING_LOW
674static struct queue_sysfs_entry throtl_sample_time_entry = {
679 .show = queue_wb_lat_show,
680 .store = queue_wb_lat_store,
681};
682
683#ifdef CONFIG_BLK_DEV_THROTTLING_LOW
684static struct queue_sysfs_entry throtl_sample_time_entry = {
675 .attr = {.name = "throttle_sample_time", .mode = S_IRUGO | S_IWUSR },
685 .attr = {.name = "throttle_sample_time", .mode = 0644 },
676 .show = blk_throtl_sample_time_show,
677 .store = blk_throtl_sample_time_store,
678};
679#endif
680
681static struct attribute *default_attrs[] = {
682 &queue_requests_entry.attr,
683 &queue_ra_entry.attr,

--- 19 unchanged lines hidden (view full) ---

703 &queue_nonrot_entry.attr,
704 &queue_zoned_entry.attr,
705 &queue_nomerges_entry.attr,
706 &queue_rq_affinity_entry.attr,
707 &queue_iostats_entry.attr,
708 &queue_random_entry.attr,
709 &queue_poll_entry.attr,
710 &queue_wc_entry.attr,
686 .show = blk_throtl_sample_time_show,
687 .store = blk_throtl_sample_time_store,
688};
689#endif
690
691static struct attribute *default_attrs[] = {
692 &queue_requests_entry.attr,
693 &queue_ra_entry.attr,

--- 19 unchanged lines hidden (view full) ---

713 &queue_nonrot_entry.attr,
714 &queue_zoned_entry.attr,
715 &queue_nomerges_entry.attr,
716 &queue_rq_affinity_entry.attr,
717 &queue_iostats_entry.attr,
718 &queue_random_entry.attr,
719 &queue_poll_entry.attr,
720 &queue_wc_entry.attr,
721 &queue_fua_entry.attr,
711 &queue_dax_entry.attr,
712 &queue_wb_lat_entry.attr,
713 &queue_poll_delay_entry.attr,
714#ifdef CONFIG_BLK_DEV_THROTTLING_LOW
715 &throtl_sample_time_entry.attr,
716#endif
717 NULL,
718};

--- 247 unchanged lines hidden ---
722 &queue_dax_entry.attr,
723 &queue_wb_lat_entry.attr,
724 &queue_poll_delay_entry.attr,
725#ifdef CONFIG_BLK_DEV_THROTTLING_LOW
726 &throtl_sample_time_entry.attr,
727#endif
728 NULL,
729};

--- 247 unchanged lines hidden ---