pktcdvd: simplify the class_pktcdvd logic
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 31 Mar 2023 16:47:24 +0000 (18:47 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 2 Apr 2023 08:53:58 +0000 (10:53 +0200)
There is no need to dynamically create and destroy the class_pktcdvd
structure, just make it static and remove the memory allocation logic
which simplifies and cleans up the logic a lot.

Cc: linux-block@vger.kernel.org
Cc: Jens Axboe <axboe@kernel.dk>
Link: https://lore.kernel.org/r/20230331164724.319703-1-gregkh@linuxfoundation.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/block/pktcdvd.c

index ba9bbde..79af8a5 100644 (file)
@@ -100,7 +100,8 @@ static struct mutex ctl_mutex;      /* Serialize open/close/setup/teardown */
 static mempool_t psd_pool;
 static struct bio_set pkt_bio_set;
 
-static struct class    *class_pktcdvd = NULL;    /* /sys/class/pktcdvd */
+/* /sys/class/pktcdvd */
+static struct class    class_pktcdvd;
 static struct dentry   *pkt_debugfs_root = NULL; /* /sys/kernel/debug/pktcdvd */
 
 /* forward declaration */
@@ -315,8 +316,8 @@ static const struct attribute_group *pkt_groups[] = {
 
 static void pkt_sysfs_dev_new(struct pktcdvd_device *pd)
 {
-       if (class_pktcdvd) {
-               pd->dev = device_create_with_groups(class_pktcdvd, NULL,
+       if (class_is_registered(&class_pktcdvd)) {
+               pd->dev = device_create_with_groups(&class_pktcdvd, NULL,
                                                    MKDEV(0, 0), pd, pkt_groups,
                                                    "%s", pd->name);
                if (IS_ERR(pd->dev))
@@ -326,7 +327,7 @@ static void pkt_sysfs_dev_new(struct pktcdvd_device *pd)
 
 static void pkt_sysfs_dev_remove(struct pktcdvd_device *pd)
 {
-       if (class_pktcdvd)
+       if (class_is_registered(&class_pktcdvd))
                device_unregister(pd->dev);
 }
 
@@ -338,11 +339,6 @@ static void pkt_sysfs_dev_remove(struct pktcdvd_device *pd)
                      device_map     show mappings
  *******************************************************************/
 
-static void class_pktcdvd_release(struct class *cls)
-{
-       kfree(cls);
-}
-
 static ssize_t device_map_show(const struct class *c, const struct class_attribute *attr,
                               char *data)
 {
@@ -405,35 +401,23 @@ static struct attribute *class_pktcdvd_attrs[] = {
 };
 ATTRIBUTE_GROUPS(class_pktcdvd);
 
+static struct class class_pktcdvd = {
+       .name           = DRIVER_NAME,
+       .class_groups   = class_pktcdvd_groups,
+};
+
 static int pkt_sysfs_init(void)
 {
-       int ret = 0;
-
        /*
         * create control files in sysfs
         * /sys/class/pktcdvd/...
         */
-       class_pktcdvd = kzalloc(sizeof(*class_pktcdvd), GFP_KERNEL);
-       if (!class_pktcdvd)
-               return -ENOMEM;
-       class_pktcdvd->name = DRIVER_NAME;
-       class_pktcdvd->class_release = class_pktcdvd_release;
-       class_pktcdvd->class_groups = class_pktcdvd_groups;
-       ret = class_register(class_pktcdvd);
-       if (ret) {
-               kfree(class_pktcdvd);
-               class_pktcdvd = NULL;
-               pr_err("failed to create class pktcdvd\n");
-               return ret;
-       }
-       return 0;
+       return class_register(&class_pktcdvd);
 }
 
 static void pkt_sysfs_cleanup(void)
 {
-       if (class_pktcdvd)
-               class_destroy(class_pktcdvd);
-       class_pktcdvd = NULL;
+       class_unregister(&class_pktcdvd);
 }
 
 /********************************************************************