Wang Sheng-Hui
2013-Jun-25 13:05 UTC
[RESEND] [PATCH] btrfs-progs: avoid memory leak in btrfs_close_devices
Three kind of structures need to be freed on close:
* All struct btrfs_device managed by fs_devices
* The name field for each struct btrfs_device
* fs_devices structure itself
The same ones for seed_devices.
Signed-off-by: Wang Sheng-Hui <shhuiw@gmail.com>
---
volumes.c | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/volumes.c b/volumes.c
index d6f81f8..257b740 100644
--- a/volumes.c
+++ b/volumes.c
@@ -153,6 +153,16 @@ static int device_list_add(const char *path,
return 0;
}
+static void btrfs_close_device(struct btrfs_device *device)
+{
+ close(device->fd);
+ device->fd = -1;
+ device->writeable = 0;
+ if (device->name)
+ kfree(device->name);
+ kfree(device);
+}
+
int btrfs_close_devices(struct btrfs_fs_devices *fs_devices)
{
struct btrfs_fs_devices *seed_devices;
@@ -161,17 +171,17 @@ int btrfs_close_devices(struct btrfs_fs_devices
*fs_devices)
again:
list_for_each(cur, &fs_devices->devices) {
device = list_entry(cur, struct btrfs_device, dev_list);
- close(device->fd);
- device->fd = -1;
- device->writeable = 0;
+ btrfs_close_device(device);
}
seed_devices = fs_devices->seed;
fs_devices->seed = NULL;
if (seed_devices) {
+ kfree(fs_devices);
fs_devices = seed_devices;
goto again;
}
+ kfree(fs_devices);
return 0;
}
--
1.7.10.4
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs"
in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html