Commit 7b193c81 by Christian Brauner

Merge pull request #936 from overlayfs/btrfs_recursive_destroy

fix btrfs_recursive_destroy
parents 89f6299a 58232f8c
...@@ -568,7 +568,7 @@ static int btrfs_recursive_destroy(const char *path) ...@@ -568,7 +568,7 @@ static int btrfs_recursive_destroy(const char *path)
struct btrfs_ioctl_search_header sh; struct btrfs_ioctl_search_header sh;
struct btrfs_root_ref *ref; struct btrfs_root_ref *ref;
struct my_btrfs_tree *tree; struct my_btrfs_tree *tree;
int ret, i; int ret, e, i;
unsigned long off = 0; unsigned long off = 0;
int name_len; int name_len;
char *name; char *name;
...@@ -582,8 +582,9 @@ static int btrfs_recursive_destroy(const char *path) ...@@ -582,8 +582,9 @@ static int btrfs_recursive_destroy(const char *path)
} }
if (btrfs_list_get_path_rootid(fd, &root_id)) { if (btrfs_list_get_path_rootid(fd, &root_id)) {
e = errno;
close(fd); close(fd);
if (errno == EPERM || errno == EACCES) { if (e == EPERM || e == EACCES) {
WARN("Will simply try removing"); WARN("Will simply try removing");
goto ignore_search; goto ignore_search;
} }
...@@ -614,10 +615,16 @@ static int btrfs_recursive_destroy(const char *path) ...@@ -614,10 +615,16 @@ static int btrfs_recursive_destroy(const char *path)
while(1) { while(1) {
ret = ioctl(fd, BTRFS_IOC_TREE_SEARCH, &args); ret = ioctl(fd, BTRFS_IOC_TREE_SEARCH, &args);
e = errno;
if (ret < 0) { if (ret < 0) {
close(fd); close(fd);
ERROR("Error: can't perform the search under %s\n", path);
free_btrfs_tree(tree); free_btrfs_tree(tree);
if (e == EPERM || e == EACCES) {
WARN("Warn: can't perform the search under %s. Will simply try removing", path);
goto ignore_search;
}
ERROR("Error: can't perform the search under %s\n", path);
return -1; return -1;
} }
if (sk->nr_items == 0) if (sk->nr_items == 0)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment