btrfs-progs: remove duplicate checks from cmd_filesystem_resize
btrfs_open_dir already has a check whether the passed path is a directory and if so it returns a specific error code (-3) when such an error occurs. Use this instead of open-coding the directory check. To avoid regression in cli/003 test also move directory checks before fs type in btrfs_open. Output before this check: ERROR: resize works on mounted filesystems and accepts only directories as argument. Passing file containing a btrfs image would resize the underlying filesystem instead of the image. After: ERROR: not a directory: /root/btrfs-progs/tests/test.img ERROR: resize works on mounted filesystems and accepts only directories as argument. Passing file containing a btrfs image would resize the underlying filesystem instead of the image. Signed-off-by: Nikolay Borisov <nborisov@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
b39d02a0c0
commit
3e653e801c
|
@ -1082,7 +1082,6 @@ static int cmd_filesystem_resize(const struct cmd_struct *cmd,
|
||||||
char *amount, *path;
|
char *amount, *path;
|
||||||
DIR *dirstream = NULL;
|
DIR *dirstream = NULL;
|
||||||
int ret;
|
int ret;
|
||||||
struct stat st;
|
|
||||||
bool enqueue = false;
|
bool enqueue = false;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1115,22 +1114,18 @@ static int cmd_filesystem_resize(const struct cmd_struct *cmd,
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
res = stat(path, &st);
|
fd = btrfs_open_dir(path, &dirstream, 1);
|
||||||
if (res < 0) {
|
if (fd < 0) {
|
||||||
error("resize: cannot stat %s: %m", path);
|
/* The path is a directory */
|
||||||
return 1;
|
if (fd == -3) {
|
||||||
}
|
error(
|
||||||
if (!S_ISDIR(st.st_mode)) {
|
"resize works on mounted filesystems and accepts only\n"
|
||||||
error("resize works on mounted filesystems and accepts only\n"
|
|
||||||
"directories as argument. Passing file containing a btrfs image\n"
|
"directories as argument. Passing file containing a btrfs image\n"
|
||||||
"would resize the underlying filesystem instead of the image.\n");
|
"would resize the underlying filesystem instead of the image.\n");
|
||||||
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
fd = btrfs_open_dir(path, &dirstream, 1);
|
|
||||||
if (fd < 0)
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
ret = check_running_fs_exclop(fd, BTRFS_EXCLOP_RESIZE, enqueue);
|
ret = check_running_fs_exclop(fd, BTRFS_EXCLOP_RESIZE, enqueue);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
|
|
@ -184,16 +184,6 @@ int btrfs_open(const char *path, DIR **dirstream, int verbose, int dir_only)
|
||||||
struct stat st;
|
struct stat st;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (statfs(path, &stfs) != 0) {
|
|
||||||
error_on(verbose, "cannot access '%s': %m", path);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (stfs.f_type != BTRFS_SUPER_MAGIC) {
|
|
||||||
error_on(verbose, "not a btrfs filesystem: %s", path);
|
|
||||||
return -2;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (stat(path, &st) != 0) {
|
if (stat(path, &st) != 0) {
|
||||||
error_on(verbose, "cannot access '%s': %m", path);
|
error_on(verbose, "cannot access '%s': %m", path);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -204,6 +194,16 @@ int btrfs_open(const char *path, DIR **dirstream, int verbose, int dir_only)
|
||||||
return -3;
|
return -3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (statfs(path, &stfs) != 0) {
|
||||||
|
error_on(verbose, "cannot access '%s': %m", path);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stfs.f_type != BTRFS_SUPER_MAGIC) {
|
||||||
|
error_on(verbose, "not a btrfs filesystem: %s", path);
|
||||||
|
return -2;
|
||||||
|
}
|
||||||
|
|
||||||
ret = open_file_or_dir(path, dirstream);
|
ret = open_file_or_dir(path, dirstream);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
error_on(verbose, "cannot access '%s': %m", path);
|
error_on(verbose, "cannot access '%s': %m", path);
|
||||||
|
|
Loading…
Reference in New Issue