elevator: Enable const sysfs attributes
authorThomas Weißschuh <linux@weissschuh.net>
Thu, 2 Jan 2025 12:01:31 +0000 (13:01 +0100)
committerJens Axboe <axboe@kernel.dk>
Thu, 2 Jan 2025 20:20:29 +0000 (13:20 -0700)
The elevator core does not need to modify the sysfs attributes added by
the elevators. Reflect this in the types, so the attributes can be moved
into read-only memory.

Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
Link: https://lore.kernel.org/r/20250102-sysfs-const-attr-elevator-v1-1-9837d2058c60@weissschuh.net
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/elevator.c
block/elevator.h

index a26b966626202b54effdccc3d2c91abe68599ecc..be6e994256ac8a09971e3ebb95153af22adb6650 100644 (file)
@@ -405,12 +405,12 @@ struct request *elv_former_request(struct request_queue *q, struct request *rq)
        return NULL;
 }
 
-#define to_elv(atr) container_of((atr), struct elv_fs_entry, attr)
+#define to_elv(atr) container_of_const((atr), struct elv_fs_entry, attr)
 
 static ssize_t
 elv_attr_show(struct kobject *kobj, struct attribute *attr, char *page)
 {
-       struct elv_fs_entry *entry = to_elv(attr);
+       const struct elv_fs_entry *entry = to_elv(attr);
        struct elevator_queue *e;
        ssize_t error;
 
@@ -428,7 +428,7 @@ static ssize_t
 elv_attr_store(struct kobject *kobj, struct attribute *attr,
               const char *page, size_t length)
 {
-       struct elv_fs_entry *entry = to_elv(attr);
+       const struct elv_fs_entry *entry = to_elv(attr);
        struct elevator_queue *e;
        ssize_t error;
 
@@ -461,7 +461,7 @@ int elv_register_queue(struct request_queue *q, bool uevent)
 
        error = kobject_add(&e->kobj, &q->disk->queue_kobj, "iosched");
        if (!error) {
-               struct elv_fs_entry *attr = e->type->elevator_attrs;
+               const struct elv_fs_entry *attr = e->type->elevator_attrs;
                if (attr) {
                        while (attr->attr.name) {
                                if (sysfs_create_file(&e->kobj, &attr->attr))
index dbf357ef4fab9362b7fb2f53724b6bea2ff057b7..e526662c5dbb1f313cb2346b72f713e1cd58665e 100644 (file)
@@ -71,7 +71,7 @@ struct elevator_type
 
        size_t icq_size;        /* see iocontext.h */
        size_t icq_align;       /* ditto */
-       struct elv_fs_entry *elevator_attrs;
+       const struct elv_fs_entry *elevator_attrs;
        const char *elevator_name;
        const char *elevator_alias;
        struct module *elevator_owner;