list_for_each_entry_safe_reverse(oreq, n, &(ireq)->obj_requests, links)
 
 struct rbd_snap {
-       struct  device          dev;
        const char              *name;
        u64                     size;
        struct list_head        node;
 static int rbd_img_request_submit(struct rbd_img_request *img_request);
 
 static int rbd_dev_snaps_update(struct rbd_device *rbd_dev);
-static int rbd_dev_snaps_register(struct rbd_device *rbd_dev);
 
 static void rbd_dev_release(struct device *dev);
 static void rbd_remove_snap_dev(struct rbd_snap *snap);
        kfree(h.object_prefix);
 
        ret = rbd_dev_snaps_update(rbd_dev);
-       if (!ret)
-               ret = rbd_dev_snaps_register(rbd_dev);
 
        up_write(&rbd_dev->header_rwsem);
 
        .release        = rbd_sysfs_dev_release,
 };
 
-
-/*
-  sysfs - snapshots
-*/
-
-static ssize_t rbd_snap_size_show(struct device *dev,
-                                 struct device_attribute *attr,
-                                 char *buf)
-{
-       struct rbd_snap *snap = container_of(dev, struct rbd_snap, dev);
-
-       return sprintf(buf, "%llu\n", (unsigned long long)snap->size);
-}
-
-static ssize_t rbd_snap_id_show(struct device *dev,
-                               struct device_attribute *attr,
-                               char *buf)
-{
-       struct rbd_snap *snap = container_of(dev, struct rbd_snap, dev);
-
-       return sprintf(buf, "%llu\n", (unsigned long long)snap->id);
-}
-
-static ssize_t rbd_snap_features_show(struct device *dev,
-                               struct device_attribute *attr,
-                               char *buf)
-{
-       struct rbd_snap *snap = container_of(dev, struct rbd_snap, dev);
-
-       return sprintf(buf, "0x%016llx\n",
-                       (unsigned long long) snap->features);
-}
-
-static DEVICE_ATTR(snap_size, S_IRUGO, rbd_snap_size_show, NULL);
-static DEVICE_ATTR(snap_id, S_IRUGO, rbd_snap_id_show, NULL);
-static DEVICE_ATTR(snap_features, S_IRUGO, rbd_snap_features_show, NULL);
-
-static struct attribute *rbd_snap_attrs[] = {
-       &dev_attr_snap_size.attr,
-       &dev_attr_snap_id.attr,
-       &dev_attr_snap_features.attr,
-       NULL,
-};
-
-static struct attribute_group rbd_snap_attr_group = {
-       .attrs = rbd_snap_attrs,
-};
-
-static void rbd_snap_dev_release(struct device *dev)
-{
-       struct rbd_snap *snap = container_of(dev, struct rbd_snap, dev);
-       kfree(snap->name);
-       kfree(snap);
-}
-
-static const struct attribute_group *rbd_snap_attr_groups[] = {
-       &rbd_snap_attr_group,
-       NULL
-};
-
-static struct device_type rbd_snap_device_type = {
-       .groups         = rbd_snap_attr_groups,
-       .release        = rbd_snap_dev_release,
-};
-
 static struct rbd_spec *rbd_spec_get(struct rbd_spec *spec)
 {
        kref_get(&spec->kref);
        kfree(rbd_dev);
 }
 
-static bool rbd_snap_registered(struct rbd_snap *snap)
-{
-       bool ret = snap->dev.type == &rbd_snap_device_type;
-       bool reg = device_is_registered(&snap->dev);
-
-       rbd_assert(!ret ^ reg);
-
-       return ret;
-}
-
 static void rbd_remove_snap_dev(struct rbd_snap *snap)
 {
        list_del(&snap->node);
-       if (device_is_registered(&snap->dev))
-               device_unregister(&snap->dev);
-}
-
-static int rbd_register_snap_dev(struct rbd_snap *snap,
-                                 struct device *parent)
-{
-       struct device *dev = &snap->dev;
-       int ret;
-
-       dev->type = &rbd_snap_device_type;
-       dev->parent = parent;
-       dev->release = rbd_snap_dev_release;
-       dev_set_name(dev, "%s%s", RBD_SNAP_DEV_NAME_PREFIX, snap->name);
-       dout("%s: registering device for snapshot %s\n", __func__, snap->name);
-
-       ret = device_register(dev);
-
-       return ret;
+       kfree(snap->name);
+       kfree(snap);
 }
 
 static struct rbd_snap *__rbd_add_snap_dev(struct rbd_device *rbd_dev,
        dout("rbd_dev_snaps_update returned %d\n", ret);
        if (ret)
                goto out;
-       ret = rbd_dev_snaps_register(rbd_dev);
-       dout("rbd_dev_snaps_register returned %d\n", ret);
 out:
        up_write(&rbd_dev->header_rwsem);
 
                         */
                        if (rbd_dev->spec->snap_id == snap->id)
                                clear_bit(RBD_DEV_FLAG_EXISTS, &rbd_dev->flags);
-                       rbd_remove_snap_dev(snap);
-                       dout("%ssnap id %llu has been removed\n",
+                       dout("removing %ssnap id %llu\n",
                                rbd_dev->spec->snap_id == snap->id ?
                                                        "mapped " : "",
                                (unsigned long long) snap->id);
+                       rbd_remove_snap_dev(snap);
 
                        /* Done with this list entry; advance */
 
        return 0;
 }
 
-/*
- * Scan the list of snapshots and register the devices for any that
- * have not already been registered.
- */
-static int rbd_dev_snaps_register(struct rbd_device *rbd_dev)
-{
-       struct rbd_snap *snap;
-       int ret = 0;
-
-       dout("%s:\n", __func__);
-       if (WARN_ON(!device_is_registered(&rbd_dev->dev)))
-               return -EIO;
-
-       list_for_each_entry(snap, &rbd_dev->snaps, node) {
-               if (!rbd_snap_registered(snap)) {
-                       ret = rbd_register_snap_dev(snap, &rbd_dev->dev);
-                       if (ret < 0)
-                               break;
-               }
-       }
-       dout("%s: returning %d\n", __func__, ret);
-
-       return ret;
-}
-
 static int rbd_bus_add_dev(struct rbd_device *rbd_dev)
 {
        struct device *dev;
                rbd_dev->parent = parent;
        }
 
-       down_write(&rbd_dev->header_rwsem);
-       ret = rbd_dev_snaps_register(rbd_dev);
-       up_write(&rbd_dev->header_rwsem);
-       if (ret)
-               goto err_out_bus;
-
        ret = rbd_dev_header_watch_sync(rbd_dev, 1);
        if (ret)
                goto err_out_bus;