diff options
author | Anand Jain <anand.jain@oracle.com> | 2015-09-15 16:46:22 +0800 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2015-10-02 17:52:10 +0200 |
commit | 94789777b9e8f350ba815b07baa5383e99cd1944 (patch) | |
tree | c7874b6f83c52ecbac8dd8f9747004963004ae20 /cmds-filesystem.c | |
parent | 3276a9f519155486383e20958e0c5eb55d4c0b4f (diff) | |
download | btrfs-progs-94789777b9e8f350ba815b07baa5383e99cd1944.tar.gz |
btrfs-progs: provide fail safe for BTRFS_IOC_GET_FSLABEL ioctl
Old kernels before 3.9 do not provide ioctl BTRFS_IOC_GET_FSLABEL.
So we need to provide a fail safe logic for btrfs-progs running
on those kernel.
In this patch when get_label_mounted() fails on the old kernel
it will fail back to the old method and uses get_label_unmounted(),
where it will read from the disk directly.
Signed-off-by: Anand Jain <anand.jain@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'cmds-filesystem.c')
-rw-r--r-- | cmds-filesystem.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/cmds-filesystem.c b/cmds-filesystem.c index 8822695..09cb37d 100644 --- a/cmds-filesystem.c +++ b/cmds-filesystem.c @@ -468,7 +468,13 @@ static int btrfs_scan_kernel(void *search, unsigned unit_mode) goto out; } - if (get_label_mounted(mnt->mnt_dir, label)) { + ret = get_label_mounted(mnt->mnt_dir, label); + /* provide backward kernel compatibility */ + if (ret == -ENOTTY) + ret = get_label_unmounted( + (const char *)dev_info_arg->path, label); + + if (ret) { kfree(dev_info_arg); goto out; } |