From 72c08aa910bcebf44e7f8e89ccac8f087870f8d6 Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Wed, 21 Aug 2013 12:53:15 +0200 Subject: fsck: use libmount fs reference counter Signed-off-by: Karel Zak --- disk-utils/fsck.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'disk-utils/fsck.c') diff --git a/disk-utils/fsck.c b/disk-utils/fsck.c index 09c58084f..e479d5884 100644 --- a/disk-utils/fsck.c +++ b/disk-utils/fsck.c @@ -370,6 +370,7 @@ static void free_instance(struct fsck_instance *i) if (lockdisk) unlock_disk(i); free(i->prog); + mnt_unref_fs(i->fs); free(i); return; } @@ -379,10 +380,12 @@ static struct libmnt_fs *add_dummy_fs(const char *device) struct libmnt_fs *fs = mnt_new_fs(); if (fs && mnt_fs_set_source(fs, device) == 0 && - mnt_table_add_fs(fstab, fs) == 0) + mnt_table_add_fs(fstab, fs) == 0) { + mnt_unref_fs(fs); return fs; + } - mnt_free_fs(fs); + mnt_unref_fs(fs); err(FSCK_EX_ERROR, _("failed to setup description for %s"), device); } @@ -582,7 +585,7 @@ static int execute(const char *type, struct libmnt_fs *fs, int interactive) s = find_fsck(prog); if (s == NULL) { warnx(_("%s: not found"), prog); - free(inst); + free_instance(inst); return ENOENT; } @@ -597,6 +600,7 @@ static int execute(const char *type, struct libmnt_fs *fs, int interactive) printf("\n"); } + mnt_ref_fs(fs); inst->fs = fs; inst->lock = -1; @@ -608,7 +612,7 @@ static int execute(const char *type, struct libmnt_fs *fs, int interactive) pid = -1; else if ((pid = fork()) < 0) { warn(_("fork failed")); - free(inst); + free_instance(inst); return errno; } else if (pid == 0) { if (!interactive) -- cgit v1.2.3-55-g7522