diff options
| author | Karel Zak <kzak@redhat.com> | 2023-05-23 12:06:36 +0200 |
|---|---|---|
| committer | Karel Zak <kzak@redhat.com> | 2023-05-23 12:06:36 +0200 |
| commit | 99550bf5aa6d8d0193c2e253e5fb182f048d0c95 (patch) | |
| tree | 0be8e44494a465e1b23efbd16d4af434d0d9cfee /libmount/src | |
| parent | 9105d3cdd819a499f5029d1009952acf6f51b7d9 (diff) | |
| parent | 1bd85b64632280d6bf0e86b4ff29da8b19321c5f (diff) | |
| download | util-linux-99550bf5aa6d8d0193c2e253e5fb182f048d0c95.tar.gz | |
Merge branch 'libmount/mount_setattr' of https://github.com/t-8ch/util-linux
* 'libmount/mount_setattr' of https://github.com/t-8ch/util-linux:
libmount: check for availability of mount_setattr
Diffstat (limited to 'libmount/src')
| -rw-r--r-- | libmount/src/hook_mount.c | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/libmount/src/hook_mount.c b/libmount/src/hook_mount.c index a324637cb7..01de9e1c57 100644 --- a/libmount/src/hook_mount.c +++ b/libmount/src/hook_mount.c @@ -510,6 +510,15 @@ static inline int fsopen_is_supported(void) return rc; } +static inline int mount_setattr_is_supported(void) +{ + int rc; + + errno = 0; + rc = mount_setattr(-1, NULL, 0, NULL, 0); + return !(rc == -1 && errno == ENOSYS); +} + /* * open_tree() and fsopen() */ @@ -675,9 +684,14 @@ static int hook_prepare(struct libmnt_context *cxt, /* call mount_setattr() */ if (!rc && cxt->helper == NULL - && (set != 0 || clr != 0 || (flags & MS_REMOUNT))) + && (set != 0 || clr != 0 || (flags & MS_REMOUNT))) { + if (!mount_setattr_is_supported()) { + hookset_deinit(cxt, hs); + return 1; + } rc = mnt_context_append_hook(cxt, hs, MNT_STAGE_MOUNT, NULL, hook_set_vfsflags); + } /* call move_mount() to attach target */ if (!rc @@ -688,9 +702,14 @@ static int hook_prepare(struct libmnt_context *cxt, hook_attach_target); /* set propagation (has to be attached to VFS) */ - if (!rc && mnt_optlist_get_propagation(ol)) + if (!rc && mnt_optlist_get_propagation(ol)) { + if (!mount_setattr_is_supported()) { + hookset_deinit(cxt, hs); + return 1; + } rc = mnt_context_append_hook(cxt, hs, MNT_STAGE_MOUNT_POST, NULL, hook_set_propagation); + } DBG(HOOK, ul_debugobj(hs, "prepare mount done [rc=%d]", rc)); return rc; |
