mountpoint-util: move 'norecovery' detection into its own helper call

And let's also ask the kernel explicitly for support.
This commit is contained in:
Lennart Poettering
2023-03-09 21:56:42 +01:00
parent 4e6d305ae2
commit 034ebc47a2
4 changed files with 25 additions and 1 deletions
+17
View File
@@ -478,6 +478,23 @@ bool fstype_can_discard(const char *fstype) {
"xfs");
}
bool fstype_can_norecovery(const char *fstype) {
int r;
assert(fstype);
/* On new kernels we can just ask the kernel */
r = mount_option_supported(fstype, "norecovery", NULL);
if (r >= 0)
return r;
return STR_IN_SET(fstype,
"ext3",
"ext4",
"xfs",
"btrfs");
}
bool fstype_can_uid_gid(const char *fstype) {
/* All file systems that have a uid=/gid= mount option that fixates the owners of all files and directories,
+1
View File
@@ -49,6 +49,7 @@ bool fstype_is_blockdev_backed(const char *fstype);
bool fstype_is_ro(const char *fsype);
bool fstype_can_discard(const char *fstype);
bool fstype_can_uid_gid(const char *fstype);
bool fstype_can_norecovery(const char *fstype);
int dev_is_devtmpfs(void);
+1 -1
View File
@@ -1567,7 +1567,7 @@ int partition_pick_mount_options(
* access that actually modifies stuff work on such image files. Or to say this differently: if
* people want their file systems to be fixed up they should just open them in writable mode, where
* all these problems don't exist. */
if (!rw && STRPTR_IN_SET(fstype, "ext3", "ext4", "xfs", "btrfs"))
if (!rw && fstype && fstype_can_norecovery(fstype))
if (!strextend_with_separator(&options, ",", "norecovery"))
return -ENOMEM;
+6
View File
@@ -355,6 +355,12 @@ TEST(fstype_can_discard) {
assert_se(!fstype_can_discard("iso9660"));
}
TEST(fstype_can_norecovery) {
assert_se(fstype_can_norecovery("ext4"));
assert_se(!fstype_can_norecovery("vfat"));
assert_se(!fstype_can_norecovery("tmpfs"));
}
static int intro(void) {
/* let's move into our own mount namespace with all propagation from the host turned off, so
* that /proc/self/mountinfo is static and constant for the whole time our test runs. */