]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
fsck: use libmount fs reference counter
authorKarel Zak <kzak@redhat.com>
Wed, 21 Aug 2013 10:53:15 +0000 (12:53 +0200)
committerKarel Zak <kzak@redhat.com>
Wed, 21 Aug 2013 10:53:15 +0000 (12:53 +0200)
Signed-off-by: Karel Zak <kzak@redhat.com>
disk-utils/fsck.c

index 09c58084f5448b7aa340320509ac048bed944a00..e479d58844be891e3c1764fc0e0aef705db82fe9 100644 (file)
@@ -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)