From: Nikolay Borisov <nborisov@suse.com>
To: linux-btrfs@vger.kernel.org
Cc: Nikolay Borisov <nborisov@suse.com>
Subject: [PATCH 2/2] btrfs-progs: Remove duplicate checks from cmd_filesystem_resize
Date: Mon, 25 Jan 2021 12:43:58 +0200 [thread overview]
Message-ID: <20210125104358.817072-2-nborisov@suse.com> (raw)
In-Reply-To: <20210125104358.817072-1-nborisov@suse.com>
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>
---
cmds/filesystem.c | 21 +++++++--------------
common/utils.c | 16 ++++++++--------
2 files changed, 15 insertions(+), 22 deletions(-)
diff --git a/cmds/filesystem.c b/cmds/filesystem.c
index ba2e5928cc02..8379fd7a8151 100644
--- a/cmds/filesystem.c
+++ b/cmds/filesystem.c
@@ -1082,7 +1082,6 @@ static int cmd_filesystem_resize(const struct cmd_struct *cmd,
char *amount, *path;
DIR *dirstream = NULL;
int ret;
- struct stat st;
bool enqueue = false;
/*
@@ -1115,21 +1114,15 @@ static int cmd_filesystem_resize(const struct cmd_struct *cmd,
return 1;
}
- res = stat(path, &st);
- if (res < 0) {
- error("resize: cannot stat %s: %m", path);
- return 1;
- }
- if (!S_ISDIR(st.st_mode)) {
- error("resize works on mounted filesystems and accepts only\n"
- "directories as argument. Passing file containing a btrfs image\n"
- "would resize the underlying filesystem instead of the image.\n");
- return 1;
- }
-
fd = btrfs_open_dir(path, &dirstream, 1);
- if (fd < 0)
+ if (fd < 0) {
+ if (fd == -3) {
+ error("resize works on mounted filesystems and accepts only\n"
+ "directories as argument. Passing file containing a btrfs image\n"
+ "would resize the underlying filesystem instead of the image.\n");
+ }
return 1;
+ }
ret = check_running_fs_exclop(fd, BTRFS_EXCLOP_RESIZE, enqueue);
if (ret != 0) {
diff --git a/common/utils.c b/common/utils.c
index f7dc320c8915..15fda84ed291 100644
--- a/common/utils.c
+++ b/common/utils.c
@@ -185,24 +185,24 @@ int btrfs_open(const char *path, DIR **dirstream, int verbose, int dir_only)
struct stat st;
int ret;
- if (statfs(path, &stfs) != 0) {
+ if (stat(path, &st) != 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 (dir_only && !S_ISDIR(st.st_mode)) {
+ error_on(verbose, "not a directory: %s", path);
+ return -3;
}
- if (stat(path, &st) != 0) {
+ if (statfs(path, &stfs) != 0) {
error_on(verbose, "cannot access '%s': %m", path);
return -1;
}
- if (dir_only && !S_ISDIR(st.st_mode)) {
- error_on(verbose, "not a directory: %s", path);
- return -3;
+ 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);
--
2.25.1
next prev parent reply other threads:[~2021-01-26 5:43 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-25 10:43 [PATCH 1/2] btrfs-progs: tests: Extend cli/003 Nikolay Borisov
2021-01-25 10:43 ` Nikolay Borisov [this message]
2021-02-19 12:06 ` David Sterba
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210125104358.817072-2-nborisov@suse.com \
--to=nborisov@suse.com \
--cc=linux-btrfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox