static void ublk_complete_rq(struct kref *ref);
 
 static dev_t ublk_chr_devt;
-static struct class *ublk_chr_class;
+static const struct class ublk_chr_class = {
+       .name = "ublk-char",
+};
 
 static DEFINE_IDR(ublk_index_idr);
 static DEFINE_SPINLOCK(ublk_idr_lock);
 
        dev->parent = ublk_misc.this_device;
        dev->devt = MKDEV(MAJOR(ublk_chr_devt), minor);
-       dev->class = ublk_chr_class;
+       dev->class = &ublk_chr_class;
        dev->release = ublk_cdev_rel;
        device_initialize(dev);
 
        if (ret)
                goto unregister_mis;
 
-       ublk_chr_class = class_create("ublk-char");
-       if (IS_ERR(ublk_chr_class)) {
-               ret = PTR_ERR(ublk_chr_class);
+       ret = class_register(&ublk_chr_class);
+       if (ret)
                goto free_chrdev_region;
-       }
+
        return 0;
 
 free_chrdev_region:
        idr_for_each_entry(&ublk_index_idr, ub, id)
                ublk_remove(ub);
 
-       class_destroy(ublk_chr_class);
+       class_unregister(&ublk_chr_class);
        misc_deregister(&ublk_misc);
 
        idr_destroy(&ublk_index_idr);