/* SPDX-License-Identifier: GPL-2.0 */#ifndef _LINUX_BLKDEV_H#define _LINUX_BLKDEV_H#include<linux/sched.h>#include<linux/genhd.h>#include<linux/list.h>#include<linux/llist.h>#include<linux/minmax.h>#include<linux/timer.h>#include<linux/workqueue.h>#include<linux/wait.h>#include<linux/bio.h>#include<linux/gfp.h>#include<linux/rcupdate.h>#include<linux/percpu-refcount.h>#include<linux/blkzoned.h>#include<linux/sbitmap.h>structmodule;structrequest_queue;structelevator_queue;structblk_trace;structrequest;structsg_io_hdr;structblkcg_gq;structblk_flush_queue;structkiocb;structpr_ops;structrq_qos;structblk_queue_stats;structblk_stat_callback;structblk_crypto_profile;/* Must be consistent with blk_mq_poll_stats_bkt() */#define BLK_MQ_POLL_STATS_BKTS 16/* Doing classic polling */#define BLK_MQ_POLL_CLASSIC -1/* * Maximum number of blkcg policies allowed to be registered concurrently. * Defined here to simplify include dependency. */#define BLKCG_MAX_POLS 6staticinlineintblk_validate_block_size(unsignedintbsize){if(bsize<512||bsize>PAGE_SIZE||!is_power_of_2(bsize))return-EINVAL;return0;}staticinlineboolblk_op_is_passthrough(unsignedintop){op&=REQ_OP_MASK;returnop==REQ_OP_DRV_IN||op==REQ_OP_DRV_OUT;}/* * Zoned block device models (zoned limit). * * Note: This needs to be ordered from the least to the most severe * restrictions for the inheritance in blk_stack_limits() to work. */enumblk_zoned_model{BLK_ZONED_NONE=0,/* Regular block device */BLK_ZONED_HA,/* Host-aware zoned block device */BLK_ZONED_HM,/* Host-managed zoned block device */};/* * BLK_BOUNCE_NONE: never bounce (default) * BLK_BOUNCE_HIGH: bounce all highmem pages */enumblk_bounce{BLK_BOUNCE_NONE,BLK_BOUNCE_HIGH,};structqueue_limits{enumblk_bouncebounce;unsignedlongseg_boundary_mask;unsignedlongvirt_boundary_mask;unsignedintmax_hw_sectors;unsignedintmax_dev_sectors;unsignedintchunk_sectors;unsignedintmax_sectors;unsignedintmax_segment_size;unsignedintphysical_block_size;unsignedintlogical_block_size;unsignedintalignment_offset;unsignedintio_min;unsignedintio_opt;unsignedintmax_discard_sectors;unsignedintmax_hw_discard_sectors;unsignedintmax_write_same_sectors;unsignedintmax_write_zeroes_sectors;unsignedint