From eb39e765f1c7f001f8b55c443a9878b2bc9ff6f7 Mon Sep 17 00:00:00 2001 From: Gui Hecheng Date: Thu, 31 Jul 2014 11:23:44 +0800 Subject: btrfs-progs: fix improper return value check for is_existing_blk_or_reg_file The function @is_existing_blk_or_reg_file has a return value of -errno, which indicate the @stat call fails with non-ENOENT errors. In this condition, we should not continue the following work. But -errno evaluates to true and will let the following work go. So we should judge more accurately whether the return value of @is_existing_blk_or_reg_file is > 0 or not to decide our behavior. Signed-off-by: Gui Hecheng Signed-off-by: David Sterba --- utils.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'utils.c') diff --git a/utils.c b/utils.c index 481e0619..4f17583b 100644 --- a/utils.c +++ b/utils.c @@ -1563,22 +1563,29 @@ int get_label(const char *btrfs_dev, char *label) { int ret; - if (is_existing_blk_or_reg_file(btrfs_dev)) - ret = get_label_unmounted(btrfs_dev, label); - else + ret = is_existing_blk_or_reg_file(btrfs_dev); + if (!ret) ret = get_label_mounted(btrfs_dev, label); + else if (ret > 0) + ret = get_label_unmounted(btrfs_dev, label); return ret; } int set_label(const char *btrfs_dev, const char *label) { + int ret; + if (check_label(label)) return -1; - return is_existing_blk_or_reg_file(btrfs_dev) ? - set_label_unmounted(btrfs_dev, label) : - set_label_mounted(btrfs_dev, label); + ret = is_existing_blk_or_reg_file(btrfs_dev); + if (!ret) + ret = set_label_mounted(btrfs_dev, label); + else if (ret > 0) + ret = set_label_unmounted(btrfs_dev, label); + + return ret; } int btrfs_scan_block_devices(int run_ioctl) -- cgit v1.2.3