block: move elevator.h to block/
authorChristoph Hellwig <hch@lst.de>
Mon, 20 Sep 2021 12:33:23 +0000 (14:33 +0200)
committerJens Axboe <axboe@kernel.dk>
Mon, 18 Oct 2021 12:17:01 +0000 (06:17 -0600)
Except for the features passed to blk_queue_required_elevator_features,
elevator.h is only needed internally to the block layer.  Move the
ELEVATOR_F_* definitions to blkdev.h, and the move elevator.h to
block/, dropping all the spurious includes outside of that.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Link: https://lore.kernel.org/r/20210920123328.1399408-13-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
14 files changed:
block/bfq-cgroup.c
block/bfq-iosched.c
block/blk-mq-sched.h
block/blk-mq-tag.h
block/blk.h
block/elevator.c
block/elevator.h [new file with mode: 0644]
block/kyber-iosched.c
block/mq-deadline.c
drivers/block/amiflop.c
drivers/scsi/lpfc/lpfc.h
include/linux/blkdev.h
include/linux/elevator.h [deleted file]
init/main.c

index 85b8e1c3a762d462936e3db1699d236e75087982..882ec4bc51ad3a0c9504a8725a37203ba1398731 100644 (file)
@@ -6,13 +6,13 @@
 #include <linux/slab.h>
 #include <linux/blkdev.h>
 #include <linux/cgroup.h>
-#include <linux/elevator.h>
 #include <linux/ktime.h>
 #include <linux/rbtree.h>
 #include <linux/ioprio.h>
 #include <linux/sbitmap.h>
 #include <linux/delay.h>
 
+#include "elevator.h"
 #include "bfq-iosched.h"
 
 #ifdef CONFIG_BFQ_CGROUP_DEBUG
index 480e1a13485966104362f265d842887640775781..b5ef23f63d518aed5e7f0b391dbeee4a2ae688e1 100644 (file)
 #include <linux/slab.h>
 #include <linux/blkdev.h>
 #include <linux/cgroup.h>
-#include <linux/elevator.h>
 #include <linux/ktime.h>
 #include <linux/rbtree.h>
 #include <linux/ioprio.h>
 
 #include <trace/events/block.h>
 
+#include "elevator.h"
 #include "blk.h"
 #include "blk-mq.h"
 #include "blk-mq-tag.h"
index 5246ae0407047ebd754a14afdc13a45e5ce11315..5181487db7923214e07955080eb09f8db1aa049b 100644 (file)
@@ -2,6 +2,7 @@
 #ifndef BLK_MQ_SCHED_H
 #define BLK_MQ_SCHED_H
 
+#include "elevator.h"
 #include "blk-mq.h"
 #include "blk-mq-tag.h"
 
index 8ed55af084273ffac2f6012073bbccf3a3e59aac..f0a0ee758a5566584579ce0f26f2cab2bbfe6802 100644 (file)
@@ -2,6 +2,8 @@
 #ifndef INT_BLK_MQ_TAG_H
 #define INT_BLK_MQ_TAG_H
 
+struct blk_mq_alloc_data;
+
 /*
  * Tag address space map.
  */
index 6c3c00a8fe19d3f4f926d3deb9f26d63577c6f3c..f24569980905022cac3cdc99d7c82c41e254bfe5 100644 (file)
@@ -12,6 +12,8 @@
 #include "blk-mq.h"
 #include "blk-mq-sched.h"
 
+struct elevator_type;
+
 /* Max future timer expiry for timeouts */
 #define BLK_MAX_TIMEOUT                (5 * HZ)
 
index ff45d8388f48775910248593e6f114e1376a02e5..57be09cd7f6ddff7ac6f73fbae93785f1f7da252 100644 (file)
@@ -26,7 +26,6 @@
 #include <linux/kernel.h>
 #include <linux/fs.h>
 #include <linux/blkdev.h>
-#include <linux/elevator.h>
 #include <linux/bio.h>
 #include <linux/module.h>
 #include <linux/slab.h>
@@ -40,6 +39,7 @@
 
 #include <trace/events/block.h>
 
+#include "elevator.h"
 #include "blk.h"
 #include "blk-mq-sched.h"
 #include "blk-pm.h"
diff --git a/block/elevator.h b/block/elevator.h
new file mode 100644 (file)
index 0000000..16cd8bd
--- /dev/null
@@ -0,0 +1,166 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _ELEVATOR_H
+#define _ELEVATOR_H
+
+#include <linux/percpu.h>
+#include <linux/hashtable.h>
+
+struct io_cq;
+struct elevator_type;
+struct blk_mq_debugfs_attr;
+
+/*
+ * Return values from elevator merger
+ */
+enum elv_merge {
+       ELEVATOR_NO_MERGE       = 0,
+       ELEVATOR_FRONT_MERGE    = 1,
+       ELEVATOR_BACK_MERGE     = 2,
+       ELEVATOR_DISCARD_MERGE  = 3,
+};
+
+struct blk_mq_alloc_data;
+struct blk_mq_hw_ctx;
+
+struct elevator_mq_ops {
+       int (*init_sched)(struct request_queue *, struct elevator_type *);
+       void (*exit_sched)(struct elevator_queue *);
+       int (*init_hctx)(struct blk_mq_hw_ctx *, unsigned int);
+       void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);
+       void (*depth_updated)(struct blk_mq_hw_ctx *);
+
+       bool (*allow_merge)(struct request_queue *, struct request *, struct bio *);
+       bool (*bio_merge)(struct request_queue *, struct bio *, unsigned int);
+       int (*request_merge)(struct request_queue *q, struct request **, struct bio *);
+       void (*request_merged)(struct request_queue *, struct request *, enum elv_merge);
+       void (*requests_merged)(struct request_queue *, struct request *, struct request *);
+       void (*limit_depth)(unsigned int, struct blk_mq_alloc_data *);
+       void (*prepare_request)(struct request *);
+       void (*finish_request)(struct request *);
+       void (*insert_requests)(struct blk_mq_hw_ctx *, struct list_head *, bool);
+       struct request *(*dispatch_request)(struct blk_mq_hw_ctx *);
+       bool (*has_work)(struct blk_mq_hw_ctx *);
+       void (*completed_request)(struct request *, u64);
+       void (*requeue_request)(struct request *);
+       struct request *(*former_request)(struct request_queue *, struct request *);
+       struct request *(*next_request)(struct request_queue *, struct request *);
+       void (*init_icq)(struct io_cq *);
+       void (*exit_icq)(struct io_cq *);
+};
+
+#define ELV_NAME_MAX   (16)
+
+struct elv_fs_entry {
+       struct attribute attr;
+       ssize_t (*show)(struct elevator_queue *, char *);
+       ssize_t (*store)(struct elevator_queue *, const char *, size_t);
+};
+
+/*
+ * identifies an elevator type, such as AS or deadline
+ */
+struct elevator_type
+{
+       /* managed by elevator core */
+       struct kmem_cache *icq_cache;
+
+       /* fields provided by elevator implementation */
+       struct elevator_mq_ops ops;
+
+       size_t icq_size;        /* see iocontext.h */
+       size_t icq_align;       /* ditto */
+       struct elv_fs_entry *elevator_attrs;
+       const char *elevator_name;
+       const char *elevator_alias;
+       const unsigned int elevator_features;
+       struct module *elevator_owner;
+#ifdef CONFIG_BLK_DEBUG_FS
+       const struct blk_mq_debugfs_attr *queue_debugfs_attrs;
+       const struct blk_mq_debugfs_attr *hctx_debugfs_attrs;
+#endif
+
+       /* managed by elevator core */
+       char icq_cache_name[ELV_NAME_MAX + 6];  /* elvname + "_io_cq" */
+       struct list_head list;
+};
+
+#define ELV_HASH_BITS 6
+
+void elv_rqhash_del(struct request_queue *q, struct request *rq);
+void elv_rqhash_add(struct request_queue *q, struct request *rq);
+void elv_rqhash_reposition(struct request_queue *q, struct request *rq);
+struct request *elv_rqhash_find(struct request_queue *q, sector_t offset);
+
+/*
+ * each queue has an elevator_queue associated with it
+ */
+struct elevator_queue
+{
+       struct elevator_type *type;
+       void *elevator_data;
+       struct kobject kobj;
+       struct mutex sysfs_lock;
+       unsigned int registered:1;
+       DECLARE_HASHTABLE(hash, ELV_HASH_BITS);
+};
+
+/*
+ * block elevator interface
+ */
+extern enum elv_merge elv_merge(struct request_queue *, struct request **,
+               struct bio *);
+extern void elv_merge_requests(struct request_queue *, struct request *,
+                              struct request *);
+extern void elv_merged_request(struct request_queue *, struct request *,
+               enum elv_merge);
+extern bool elv_attempt_insert_merge(struct request_queue *, struct request *,
+                                    struct list_head *);
+extern struct request *elv_former_request(struct request_queue *, struct request *);
+extern struct request *elv_latter_request(struct request_queue *, struct request *);
+void elevator_init_mq(struct request_queue *q);
+
+/*
+ * io scheduler registration
+ */
+extern int elv_register(struct elevator_type *);
+extern void elv_unregister(struct elevator_type *);
+
+/*
+ * io scheduler sysfs switching
+ */
+extern ssize_t elv_iosched_show(struct request_queue *, char *);
+extern ssize_t elv_iosched_store(struct request_queue *, const char *, size_t);
+
+extern bool elv_bio_merge_ok(struct request *, struct bio *);
+extern struct elevator_queue *elevator_alloc(struct request_queue *,
+                                       struct elevator_type *);
+
+/*
+ * Helper functions.
+ */
+extern struct request *elv_rb_former_request(struct request_queue *, struct request *);
+extern struct request *elv_rb_latter_request(struct request_queue *, struct request *);
+
+/*
+ * rb support functions.
+ */
+extern void elv_rb_add(struct rb_root *, struct request *);
+extern void elv_rb_del(struct rb_root *, struct request *);
+extern struct request *elv_rb_find(struct rb_root *, sector_t);
+
+/*
+ * Insertion selection
+ */
+#define ELEVATOR_INSERT_FRONT  1
+#define ELEVATOR_INSERT_BACK   2
+#define ELEVATOR_INSERT_SORT   3
+#define ELEVATOR_INSERT_REQUEUE        4
+#define ELEVATOR_INSERT_FLUSH  5
+#define ELEVATOR_INSERT_SORT_MERGE     6
+
+#define rb_entry_rq(node)      rb_entry((node), struct request, rb_node)
+
+#define rq_entry_fifo(ptr)     list_entry((ptr), struct request, queuelist)
+#define rq_fifo_clear(rq)      list_del_init(&(rq)->queuelist)
+
+#endif /* _ELEVATOR_H */
index a0ffbabfac2c61c12139163b595694bb0d8f6493..53dafc4bcd72fdd92bbbcf07dd6a66a578cba403 100644 (file)
@@ -9,12 +9,12 @@
 #include <linux/kernel.h>
 #include <linux/blkdev.h>
 #include <linux/blk-mq.h>
-#include <linux/elevator.h>
 #include <linux/module.h>
 #include <linux/sbitmap.h>
 
 #include <trace/events/block.h>
 
+#include "elevator.h"
 #include "blk.h"
 #include "blk-mq.h"
 #include "blk-mq-debugfs.h"
index 7f3c3932b723e5c360ad87e583b937c13c008766..47f042fa6a68884366cc9a2ca3c493161ac4f31c 100644 (file)
@@ -9,7 +9,6 @@
 #include <linux/fs.h>
 #include <linux/blkdev.h>
 #include <linux/blk-mq.h>
-#include <linux/elevator.h>
 #include <linux/bio.h>
 #include <linux/module.h>
 #include <linux/slab.h>
@@ -20,6 +19,7 @@
 
 #include <trace/events/block.h>
 
+#include "elevator.h"
 #include "blk.h"
 #include "blk-mq.h"
 #include "blk-mq-debugfs.h"
index 8b1714021498c39f9d34d0fba4c139955cc001ad..b892e5185d6fa51d0990a70fd71adf833045d8ce 100644 (file)
@@ -64,7 +64,6 @@
 #include <linux/mutex.h>
 #include <linux/fs.h>
 #include <linux/blk-mq.h>
-#include <linux/elevator.h>
 #include <linux/interrupt.h>
 #include <linux/platform_device.h>
 
index befeb7c34290378820647d5012e70c663fc74347..337e6ed2482181773b4ff3a8486d0006d3887c9b 100644 (file)
@@ -22,6 +22,7 @@
  *******************************************************************/
 
 #include <scsi/scsi_host.h>
+#include <linux/hashtable.h>
 #include <linux/ktime.h>
 #include <linux/workqueue.h>
 
index 4bcbb1ae2d66a7d3bb3b0ebc052ff52d781682cc..d815238f61ed97b6b1a6ca4ff6138d740036b33f 100644 (file)
@@ -251,8 +251,6 @@ static inline unsigned short req_get_ioprio(struct request *req)
        return req->ioprio;
 }
 
-#include <linux/elevator.h>
-
 struct bio_vec;
 
 enum blk_eh_timer_return {
@@ -1124,6 +1122,15 @@ extern void blk_queue_dma_alignment(struct request_queue *, int);
 extern void blk_queue_update_dma_alignment(struct request_queue *, int);
 extern void blk_queue_rq_timeout(struct request_queue *, unsigned int);
 extern void blk_queue_write_cache(struct request_queue *q, bool enabled, bool fua);
+
+/*
+ * Elevator features for blk_queue_required_elevator_features:
+ */
+/* Supports zoned block devices sequential write constraint */
+#define ELEVATOR_F_ZBD_SEQ_WRITE       (1U << 0)
+/* Supports scheduling on multiple hardware queues */
+#define ELEVATOR_F_MQ_AWARE            (1U << 1)
+
 extern void blk_queue_required_elevator_features(struct request_queue *q,
                                                 unsigned int features);
 extern bool blk_queue_can_use_dma_map_merging(struct request_queue *q,
diff --git a/include/linux/elevator.h b/include/linux/elevator.h
deleted file mode 100644 (file)
index 80633f3..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-#ifndef _LINUX_ELEVATOR_H
-#define _LINUX_ELEVATOR_H
-
-#include <linux/percpu.h>
-#include <linux/hashtable.h>
-
-#ifdef CONFIG_BLOCK
-
-struct io_cq;
-struct elevator_type;
-#ifdef CONFIG_BLK_DEBUG_FS
-struct blk_mq_debugfs_attr;
-#endif
-
-/*
- * Return values from elevator merger
- */
-enum elv_merge {
-       ELEVATOR_NO_MERGE       = 0,
-       ELEVATOR_FRONT_MERGE    = 1,
-       ELEVATOR_BACK_MERGE     = 2,
-       ELEVATOR_DISCARD_MERGE  = 3,
-};
-
-struct blk_mq_alloc_data;
-struct blk_mq_hw_ctx;
-
-struct elevator_mq_ops {
-       int (*init_sched)(struct request_queue *, struct elevator_type *);
-       void (*exit_sched)(struct elevator_queue *);
-       int (*init_hctx)(struct blk_mq_hw_ctx *, unsigned int);
-       void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);
-       void (*depth_updated)(struct blk_mq_hw_ctx *);
-
-       bool (*allow_merge)(struct request_queue *, struct request *, struct bio *);
-       bool (*bio_merge)(struct request_queue *, struct bio *, unsigned int);
-       int (*request_merge)(struct request_queue *q, struct request **, struct bio *);
-       void (*request_merged)(struct request_queue *, struct request *, enum elv_merge);
-       void (*requests_merged)(struct request_queue *, struct request *, struct request *);
-       void (*limit_depth)(unsigned int, struct blk_mq_alloc_data *);
-       void (*prepare_request)(struct request *);
-       void (*finish_request)(struct request *);
-       void (*insert_requests)(struct blk_mq_hw_ctx *, struct list_head *, bool);
-       struct request *(*dispatch_request)(struct blk_mq_hw_ctx *);
-       bool (*has_work)(struct blk_mq_hw_ctx *);
-       void (*completed_request)(struct request *, u64);
-       void (*requeue_request)(struct request *);
-       struct request *(*former_request)(struct request_queue *, struct request *);
-       struct request *(*next_request)(struct request_queue *, struct request *);
-       void (*init_icq)(struct io_cq *);
-       void (*exit_icq)(struct io_cq *);
-};
-
-#define ELV_NAME_MAX   (16)
-
-struct elv_fs_entry {
-       struct attribute attr;
-       ssize_t (*show)(struct elevator_queue *, char *);
-       ssize_t (*store)(struct elevator_queue *, const char *, size_t);
-};
-
-/*
- * identifies an elevator type, such as AS or deadline
- */
-struct elevator_type
-{
-       /* managed by elevator core */
-       struct kmem_cache *icq_cache;
-
-       /* fields provided by elevator implementation */
-       struct elevator_mq_ops ops;
-
-       size_t icq_size;        /* see iocontext.h */
-       size_t icq_align;       /* ditto */
-       struct elv_fs_entry *elevator_attrs;
-       const char *elevator_name;
-       const char *elevator_alias;
-       const unsigned int elevator_features;
-       struct module *elevator_owner;
-#ifdef CONFIG_BLK_DEBUG_FS
-       const struct blk_mq_debugfs_attr *queue_debugfs_attrs;
-       const struct blk_mq_debugfs_attr *hctx_debugfs_attrs;
-#endif
-
-       /* managed by elevator core */
-       char icq_cache_name[ELV_NAME_MAX + 6];  /* elvname + "_io_cq" */
-       struct list_head list;
-};
-
-#define ELV_HASH_BITS 6
-
-void elv_rqhash_del(struct request_queue *q, struct request *rq);
-void elv_rqhash_add(struct request_queue *q, struct request *rq);
-void elv_rqhash_reposition(struct request_queue *q, struct request *rq);
-struct request *elv_rqhash_find(struct request_queue *q, sector_t offset);
-
-/*
- * each queue has an elevator_queue associated with it
- */
-struct elevator_queue
-{
-       struct elevator_type *type;
-       void *elevator_data;
-       struct kobject kobj;
-       struct mutex sysfs_lock;
-       unsigned int registered:1;
-       DECLARE_HASHTABLE(hash, ELV_HASH_BITS);
-};
-
-/*
- * block elevator interface
- */
-extern enum elv_merge elv_merge(struct request_queue *, struct request **,
-               struct bio *);
-extern void elv_merge_requests(struct request_queue *, struct request *,
-                              struct request *);
-extern void elv_merged_request(struct request_queue *, struct request *,
-               enum elv_merge);
-extern bool elv_attempt_insert_merge(struct request_queue *, struct request *,
-                                    struct list_head *);
-extern struct request *elv_former_request(struct request_queue *, struct request *);
-extern struct request *elv_latter_request(struct request_queue *, struct request *);
-void elevator_init_mq(struct request_queue *q);
-
-/*
- * io scheduler registration
- */
-extern int elv_register(struct elevator_type *);
-extern void elv_unregister(struct elevator_type *);
-
-/*
- * io scheduler sysfs switching
- */
-extern ssize_t elv_iosched_show(struct request_queue *, char *);
-extern ssize_t elv_iosched_store(struct request_queue *, const char *, size_t);
-
-extern bool elv_bio_merge_ok(struct request *, struct bio *);
-extern struct elevator_queue *elevator_alloc(struct request_queue *,
-                                       struct elevator_type *);
-
-/*
- * Helper functions.
- */
-extern struct request *elv_rb_former_request(struct request_queue *, struct request *);
-extern struct request *elv_rb_latter_request(struct request_queue *, struct request *);
-
-/*
- * rb support functions.
- */
-extern void elv_rb_add(struct rb_root *, struct request *);
-extern void elv_rb_del(struct rb_root *, struct request *);
-extern struct request *elv_rb_find(struct rb_root *, sector_t);
-
-/*
- * Insertion selection
- */
-#define ELEVATOR_INSERT_FRONT  1
-#define ELEVATOR_INSERT_BACK   2
-#define ELEVATOR_INSERT_SORT   3
-#define ELEVATOR_INSERT_REQUEUE        4
-#define ELEVATOR_INSERT_FLUSH  5
-#define ELEVATOR_INSERT_SORT_MERGE     6
-
-#define rb_entry_rq(node)      rb_entry((node), struct request, rb_node)
-
-#define rq_entry_fifo(ptr)     list_entry((ptr), struct request, queuelist)
-#define rq_fifo_clear(rq)      list_del_init(&(rq)->queuelist)
-
-/*
- * Elevator features.
- */
-
-/* Supports zoned block devices sequential write constraint */
-#define ELEVATOR_F_ZBD_SEQ_WRITE       (1U << 0)
-/* Supports scheduling on multiple hardware queues */
-#define ELEVATOR_F_MQ_AWARE            (1U << 1)
-
-#endif /* CONFIG_BLOCK */
-#endif
index 3c4054a9554580a8b65ea5caa33493d1ee825748..4162d7f3179fb69a91dae373001fb0046284ea73 100644 (file)
@@ -83,7 +83,6 @@
 #include <linux/ptrace.h>
 #include <linux/pti.h>
 #include <linux/blkdev.h>
-#include <linux/elevator.h>
 #include <linux/sched/clock.h>
 #include <linux/sched/task.h>
 #include <linux/sched/task_stack.h>