btrfs-progs: don't leak fds in logical resolve
authorZach Brown <zab@redhat.com>
Thu, 24 Jan 2013 18:53:49 +0000 (10:53 -0800)
committerZach Brown <zab@redhat.com>
Wed, 6 Feb 2013 00:09:41 +0000 (16:09 -0800)
Signed-off-by: Zach Brown <zab@redhat.com>
cmds-inspect.c

index 4347c1a..e02b53a 100644 (file)
@@ -212,8 +212,10 @@ static int cmd_logical_resolve(int argc, char **argv)
 
                if (getpath) {
                        name = btrfs_list_path_for_root(fd, root);
-                       if (IS_ERR(name))
-                               return PTR_ERR(name);
+                       if (IS_ERR(name)) {
+                               ret = PTR_ERR(name);
+                               goto out;
+                       }
                        if (!name) {
                                path_ptr[-1] = '\0';
                                path_fd = fd;
@@ -231,6 +233,8 @@ static int cmd_logical_resolve(int argc, char **argv)
                                }
                        }
                        __ino_to_path_fd(inum, path_fd, verbose, full_path);
+                       if (path_fd != fd)
+                               close(path_fd);
                } else {
                        printf("inode %llu offset %llu root %llu\n", inum,
                                offset, root);
@@ -238,6 +242,8 @@ static int cmd_logical_resolve(int argc, char **argv)
        }
 
 out:
+       if (fd >= 0)
+               close(fd);
        free(inodes);
        return ret;
 }