|
@@ -825,6 +825,20 @@ int bdi_register_dev(struct backing_dev_info *bdi, dev_t dev)
|
|
}
|
|
}
|
|
EXPORT_SYMBOL(bdi_register_dev);
|
|
EXPORT_SYMBOL(bdi_register_dev);
|
|
|
|
|
|
|
|
+int bdi_register_owner(struct backing_dev_info *bdi, struct device *owner)
|
|
|
|
+{
|
|
|
|
+ int rc;
|
|
|
|
+
|
|
|
|
+ rc = bdi_register(bdi, NULL, "%u:%u", MAJOR(owner->devt),
|
|
|
|
+ MINOR(owner->devt));
|
|
|
|
+ if (rc)
|
|
|
|
+ return rc;
|
|
|
|
+ bdi->owner = owner;
|
|
|
|
+ get_device(owner);
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+EXPORT_SYMBOL(bdi_register_owner);
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Remove bdi from bdi_list, and ensure that it is no longer visible
|
|
* Remove bdi from bdi_list, and ensure that it is no longer visible
|
|
*/
|
|
*/
|
|
@@ -849,6 +863,11 @@ void bdi_unregister(struct backing_dev_info *bdi)
|
|
device_unregister(bdi->dev);
|
|
device_unregister(bdi->dev);
|
|
bdi->dev = NULL;
|
|
bdi->dev = NULL;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ if (bdi->owner) {
|
|
|
|
+ put_device(bdi->owner);
|
|
|
|
+ bdi->owner = NULL;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
void bdi_exit(struct backing_dev_info *bdi)
|
|
void bdi_exit(struct backing_dev_info *bdi)
|