|
@@ -193,6 +193,12 @@ dcssblk_segment_warn(int rc, char* seg_name)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+static void dcssblk_unregister_callback(struct device *dev)
|
|
|
+{
|
|
|
+ device_unregister(dev);
|
|
|
+ put_device(dev);
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* device attribute for switching shared/nonshared (exclusive)
|
|
|
* operation (show + store)
|
|
@@ -276,8 +282,7 @@ removeseg:
|
|
|
blk_cleanup_queue(dev_info->dcssblk_queue);
|
|
|
dev_info->gd->queue = NULL;
|
|
|
put_disk(dev_info->gd);
|
|
|
- device_unregister(dev);
|
|
|
- put_device(dev);
|
|
|
+ rc = device_schedule_callback(dev, dcssblk_unregister_callback);
|
|
|
out:
|
|
|
up_write(&dcssblk_devices_sem);
|
|
|
return rc;
|