Skip to content

Commit 9371603

Browse files
adam900710kdave
authored andcommitted
btrfs-progs: mkfs: skip failed mount check with --force
[BUG] There is a bug report that, with very weird mount status, there can be some mount source which can not be accessed: /path/dev/exports fs 500G 57G 444G 12% /path/dev/exports Strace shows we can not access the above mount source: 131065 stat("/path/dev/exports", 0x7ffed17b8e20) = -1 EACCES (Permission denied) And lead to failed mount check: 131065 write(2, "ERROR: ", 7) = 7 131065 write(2, "cannot check mount status of /de"..., 56) = 56 131065 write(2, "\n", 1) = 1 [CAUSE] The mount check is based on libblkid, which gives the mount source, and for non-btrfs mounts, we call path_is_reg_or_block_device() to check if we even need to continue checking. But in above case, the mount source is another fs, and we can not access the source. So we error out causing the check_mounted() to return error. [FIX] There is never any guarantee we can access the mount source, but on the other hand, I do not want to ignore all access failure for the mount source. Let test_status_for_mkfs() to only skip check_mounted() error if @force_overwrite is true. This would still keep the old strict checks on whether the target is already mounted, but if the end user really knows that certain mount source do not need to be checked, they can always pass "-f" option to skip the false alerts. Link: https://bugzilla.suse.com/show_bug.cgi?id=1223799 Reported-by: Jiri Belka <[email protected]> Signed-off-by: Qu Wenruo <[email protected]> Signed-off-by: David Sterba <[email protected]>
1 parent 14efa3c commit 9371603

File tree

1 file changed

+5
-0
lines changed

1 file changed

+5
-0
lines changed

mkfs/common.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1129,6 +1129,11 @@ bool test_status_for_mkfs(const char *file, bool force_overwrite)
11291129
ret = check_mounted(file);
11301130
if (ret < 0) {
11311131
errno = -ret;
1132+
if (force_overwrite) {
1133+
warning("forced overwrite but cannot check mount status of %s: %m",
1134+
file);
1135+
return false;
1136+
}
11321137
error("cannot check mount status of %s: %m", file);
11331138
return true;
11341139
}

0 commit comments

Comments
 (0)