summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Sterba <dsterba@suse.com>2016-11-07 13:02:00 +0100
committerDavid Sterba <dsterba@suse.com>2016-11-09 13:47:35 +0100
commit3934ba255d520daab8217d5e7419a8193c680a68 (patch)
tree2df8c7d12ffd4bac0793bd8c6e607ce89dd29bcf
parent92576929fbbeb3c41abba9a4a217a6c69d546c7e (diff)
btrfs-progs: fix search tree v2 ioctl detection
The result of the test applies per-filesystem, so we can't simply cache it. The function hasn't been used yet. Signed-off-by: David Sterba <dsterba@suse.com>
-rw-r--r--utils.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/utils.c b/utils.c
index 01d95868..6ddfbf9c 100644
--- a/utils.c
+++ b/utils.c
@@ -3825,6 +3825,10 @@ u64 get_partition_size(const char *dev)
return result;
}
+/*
+ * Check if the BTRFS_IOC_TREE_SEARCH_V2 ioctl is supported on a given
+ * filesystem, opened at fd
+ */
int btrfs_tree_search2_ioctl_supported(int fd)
{
struct btrfs_ioctl_search_args_v2 *args2;
@@ -3832,10 +3836,6 @@ int btrfs_tree_search2_ioctl_supported(int fd)
int args2_size = 1024;
char args2_buf[args2_size];
int ret;
- static int v2_supported = -1;
-
- if (v2_supported != -1)
- return v2_supported;
args2 = (struct btrfs_ioctl_search_args_v2 *)args2_buf;
sk = &(args2->key);
@@ -3856,13 +3856,10 @@ int btrfs_tree_search2_ioctl_supported(int fd)
args2->buf_size = args2_size - sizeof(struct btrfs_ioctl_search_args_v2);
ret = ioctl(fd, BTRFS_IOC_TREE_SEARCH_V2, args2);
if (ret == -EOPNOTSUPP)
- v2_supported = 0;
+ return 0;
else if (ret == 0)
- v2_supported = 1;
- else
- return ret;
-
- return v2_supported;
+ return 1;
+ return ret;
}
int btrfs_check_nodesize(u32 nodesize, u32 sectorsize, u64 features)