#include "rnbd-clt.h"
 
 static struct device *rnbd_dev;
-static struct class *rnbd_dev_class;
+static const struct class rnbd_dev_class = {
+       .name = "rnbd_client",
+};
 static struct kobject *rnbd_devs_kobj;
 
 enum {
 {
        int err;
 
-       rnbd_dev_class = class_create("rnbd-client");
-       if (IS_ERR(rnbd_dev_class))
-               return PTR_ERR(rnbd_dev_class);
+       err = class_register(&rnbd_dev_class);
+       if (err)
+               return err;
 
-       rnbd_dev = device_create_with_groups(rnbd_dev_class, NULL,
+       rnbd_dev = device_create_with_groups(&rnbd_dev_class, NULL,
                                              MKDEV(0, 0), NULL,
                                              default_attr_groups, "ctl");
        if (IS_ERR(rnbd_dev)) {
        return 0;
 
 dev_destroy:
-       device_destroy(rnbd_dev_class, MKDEV(0, 0));
+       device_destroy(&rnbd_dev_class, MKDEV(0, 0));
 cls_destroy:
-       class_destroy(rnbd_dev_class);
+       class_unregister(&rnbd_dev_class);
 
        return err;
 }
        sysfs_remove_group(&rnbd_dev->kobj, &default_attr_group);
        kobject_del(rnbd_devs_kobj);
        kobject_put(rnbd_devs_kobj);
-       device_destroy(rnbd_dev_class, MKDEV(0, 0));
-       class_destroy(rnbd_dev_class);
+       device_destroy(&rnbd_dev_class, MKDEV(0, 0));
+       class_unregister(&rnbd_dev_class);
 }
 
 #include "rnbd-srv.h"
 
 static struct device *rnbd_dev;
-static struct class *rnbd_dev_class;
+static const struct class rnbd_dev_class = {
+       .name = "rnbd-server",
+};
 static struct kobject *rnbd_devs_kobj;
 
 static void rnbd_srv_dev_release(struct kobject *kobj)
 {
        int err;
 
-       rnbd_dev_class = class_create("rnbd-server");
-       if (IS_ERR(rnbd_dev_class))
-               return PTR_ERR(rnbd_dev_class);
+       err = class_register(&rnbd_dev_class);
+       if (err)
+               return err;
 
-       rnbd_dev = device_create(rnbd_dev_class, NULL,
-                                 MKDEV(0, 0), NULL, "ctl");
+       rnbd_dev = device_create(&rnbd_dev_class, NULL,
+                                MKDEV(0, 0), NULL, "ctl");
        if (IS_ERR(rnbd_dev)) {
                err = PTR_ERR(rnbd_dev);
                goto cls_destroy;
        return 0;
 
 dev_destroy:
-       device_destroy(rnbd_dev_class, MKDEV(0, 0));
+       device_destroy(&rnbd_dev_class, MKDEV(0, 0));
 cls_destroy:
-       class_destroy(rnbd_dev_class);
+       class_unregister(&rnbd_dev_class);
 
        return err;
 }
 {
        kobject_del(rnbd_devs_kobj);
        kobject_put(rnbd_devs_kobj);
-       device_destroy(rnbd_dev_class, MKDEV(0, 0));
-       class_destroy(rnbd_dev_class);
+       device_destroy(&rnbd_dev_class, MKDEV(0, 0));
+       class_unregister(&rnbd_dev_class);
 }