static ssize_t register_bcache(struct kobject *k, struct kobj_attribute *attr,
                               const char *buffer, size_t size);
+static ssize_t bch_pending_bdevs_cleanup(struct kobject *k,
+                                        struct kobj_attribute *attr,
+                                        const char *buffer, size_t size);
 
 kobj_attribute_write(register,         register_bcache);
 kobj_attribute_write(register_quiet,   register_bcache);
+kobj_attribute_write(pendings_cleanup, bch_pending_bdevs_cleanup);
 
 static bool bch_is_open_backing(struct block_device *bdev)
 {
        goto out;
 }
 
+
+struct pdev {
+       struct list_head list;
+       struct cached_dev *dc;
+};
+
+static ssize_t bch_pending_bdevs_cleanup(struct kobject *k,
+                                        struct kobj_attribute *attr,
+                                        const char *buffer,
+                                        size_t size)
+{
+       LIST_HEAD(pending_devs);
+       ssize_t ret = size;
+       struct cached_dev *dc, *tdc;
+       struct pdev *pdev, *tpdev;
+       struct cache_set *c, *tc;
+
+       mutex_lock(&bch_register_lock);
+       list_for_each_entry_safe(dc, tdc, &uncached_devices, list) {
+               pdev = kmalloc(sizeof(struct pdev), GFP_KERNEL);
+               if (!pdev)
+                       break;
+               pdev->dc = dc;
+               list_add(&pdev->list, &pending_devs);
+       }
+
+       list_for_each_entry_safe(pdev, tpdev, &pending_devs, list) {
+               list_for_each_entry_safe(c, tc, &bch_cache_sets, list) {
+                       char *pdev_set_uuid = pdev->dc->sb.set_uuid;
+                       char *set_uuid = c->sb.uuid;
+
+                       if (!memcmp(pdev_set_uuid, set_uuid, 16)) {
+                               list_del(&pdev->list);
+                               kfree(pdev);
+                               break;
+                       }
+               }
+       }
+       mutex_unlock(&bch_register_lock);
+
+       list_for_each_entry_safe(pdev, tpdev, &pending_devs, list) {
+               pr_info("delete pdev %p", pdev);
+               list_del(&pdev->list);
+               bcache_device_stop(&pdev->dc->disk);
+               kfree(pdev);
+       }
+
+       return ret;
+}
+
 static int bcache_reboot(struct notifier_block *n, unsigned long code, void *x)
 {
        if (code == SYS_DOWN ||
        static const struct attribute *files[] = {
                &ksysfs_register.attr,
                &ksysfs_register_quiet.attr,
+               &ksysfs_pendings_cleanup.attr,
                NULL
        };