fd-util: do not call statx() twice when it does not provide mount ID

Previously, in path_is_root_at(), if statx() does not provide mount ID,
path_get_mnt_id_at() was called, but it also calls statx(). Let's avoid
the second trial.
This commit is contained in:
Yu Watanabe
2023-07-22 02:22:06 +09:00
parent bd96111d5f
commit 68a4fc8b53
3 changed files with 17 additions and 8 deletions
+14 -6
View File
@@ -359,9 +359,21 @@ int path_is_mount_point(const char *t, const char *root, int flags) {
return fd_is_mount_point(fd, last_path_component(t), flags);
}
int path_get_mnt_id_at_fallback(int dir_fd, const char *path, int *ret) {
int r;
assert(dir_fd >= 0 || dir_fd == AT_FDCWD);
assert(ret);
r = name_to_handle_at_loop(dir_fd, path, NULL, ret, isempty(path) ? AT_EMPTY_PATH : 0);
if (r == 0 || is_name_to_handle_at_fatal_error(r))
return r;
return fd_fdinfo_mnt_id(dir_fd, path, isempty(path) ? AT_EMPTY_PATH : 0, ret);
}
int path_get_mnt_id_at(int dir_fd, const char *path, int *ret) {
STRUCT_NEW_STATX_DEFINE(buf);
int r;
assert(dir_fd >= 0 || dir_fd == AT_FDCWD);
assert(ret);
@@ -386,11 +398,7 @@ int path_get_mnt_id_at(int dir_fd, const char *path, int *ret) {
return 0;
}
r = name_to_handle_at_loop(dir_fd, path, NULL, ret, isempty(path) ? AT_EMPTY_PATH : 0);
if (r == 0 || is_name_to_handle_at_fatal_error(r))
return r;
return fd_fdinfo_mnt_id(dir_fd, path, isempty(path) ? AT_EMPTY_PATH : 0, ret);
return path_get_mnt_id_at_fallback(dir_fd, path, ret);
}
bool fstype_is_network(const char *fstype) {