|
@@ -180,6 +180,13 @@ static struct btrfs_fs_devices *alloc_fs_devices(const u8 *fsid)
|
|
return fs_devs;
|
|
return fs_devs;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static void free_device(struct btrfs_device *device)
|
|
|
|
+{
|
|
|
|
+ rcu_string_free(device->name);
|
|
|
|
+ bio_put(device->flush_bio);
|
|
|
|
+ kfree(device);
|
|
|
|
+}
|
|
|
|
+
|
|
static void free_fs_devices(struct btrfs_fs_devices *fs_devices)
|
|
static void free_fs_devices(struct btrfs_fs_devices *fs_devices)
|
|
{
|
|
{
|
|
struct btrfs_device *device;
|
|
struct btrfs_device *device;
|
|
@@ -220,6 +227,11 @@ void btrfs_cleanup_fs_uuids(void)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/*
|
|
|
|
+ * Returns a pointer to a new btrfs_device on success; ERR_PTR() on error.
|
|
|
|
+ * Returned struct is not linked onto any lists and must be destroyed using
|
|
|
|
+ * free_device.
|
|
|
|
+ */
|
|
static struct btrfs_device *__alloc_device(void)
|
|
static struct btrfs_device *__alloc_device(void)
|
|
{
|
|
{
|
|
struct btrfs_device *dev;
|
|
struct btrfs_device *dev;
|
|
@@ -6257,8 +6269,8 @@ static struct btrfs_device *add_missing_dev(struct btrfs_fs_devices *fs_devices,
|
|
* is generated.
|
|
* is generated.
|
|
*
|
|
*
|
|
* Return: a pointer to a new &struct btrfs_device on success; ERR_PTR()
|
|
* Return: a pointer to a new &struct btrfs_device on success; ERR_PTR()
|
|
- * on error. Returned struct is not linked onto any lists and can be
|
|
|
|
- * destroyed with kfree() right away.
|
|
|
|
|
|
+ * on error. Returned struct is not linked onto any lists and must be
|
|
|
|
+ * destroyed with free_device.
|
|
*/
|
|
*/
|
|
struct btrfs_device *btrfs_alloc_device(struct btrfs_fs_info *fs_info,
|
|
struct btrfs_device *btrfs_alloc_device(struct btrfs_fs_info *fs_info,
|
|
const u64 *devid,
|
|
const u64 *devid,
|