diff options
| author | Karel Zak <kzak@redhat.com> | 2025-02-25 11:48:14 +0100 |
|---|---|---|
| committer | Karel Zak <kzak@redhat.com> | 2025-02-25 11:53:45 +0100 |
| commit | 781a960cef0599db0aca074403db87f24394c1af (patch) | |
| tree | 52ee455555a95bf29c264f9fb8b347ae982b1301 /libmount/src | |
| parent | 2263c16364b2248e73b9efd1c33c01bb190ba4a6 (diff) | |
| download | util-linux-781a960cef0599db0aca074403db87f24394c1af.tar.gz | |
libmount: add support for STATMOUNT_SB_SOURCE
* read mount source by statmount() 9requires kernel >=6.14
* add new STATMOUNT_* masks
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'libmount/src')
| -rw-r--r-- | libmount/src/fs.c | 11 | ||||
| -rw-r--r-- | libmount/src/fs_statmount.c | 10 |
2 files changed, 17 insertions, 4 deletions
diff --git a/libmount/src/fs.c b/libmount/src/fs.c index 999fec49b7..c01c313b11 100644 --- a/libmount/src/fs.c +++ b/libmount/src/fs.c @@ -427,7 +427,8 @@ const char *mnt_fs_get_srcpath(struct libmnt_fs *fs) /* fstab-like fs */ if (fs->tagname) return NULL; /* the source contains a "NAME=value" */ - return fs->source; + + return mnt_fs_get_source(fs); } /** @@ -439,7 +440,13 @@ const char *mnt_fs_get_srcpath(struct libmnt_fs *fs) */ const char *mnt_fs_get_source(struct libmnt_fs *fs) { - return fs ? fs->source : NULL; + if (!fs) + return NULL; + +#ifdef HAVE_STATMOUNT_API + mnt_fs_try_statmount(fs, source, STATMOUNT_SB_SOURCE); +#endif + return fs->source; } /* diff --git a/libmount/src/fs_statmount.c b/libmount/src/fs_statmount.c index b7570e0320..a998ee23cf 100644 --- a/libmount/src/fs_statmount.c +++ b/libmount/src/fs_statmount.c @@ -195,6 +195,9 @@ static int apply_statmount(struct libmnt_fs *fs, struct ul_statmount *sm) if (!rc && (sm->mask & STATMOUNT_MNT_ROOT) && !fs->root) rc = mnt_fs_set_root(fs, sm_str(sm, sm->mnt_root)); + if (!rc && (sm->mask & STATMOUNT_SB_SOURCE) && !fs->source) + rc = mnt_fs_set_source(fs, sm_str(sm, sm->sb_source)); + if (!rc && (sm->mask & STATMOUNT_MNT_BASIC)) { if (!fs->propagation) fs->propagation = sm->mnt_propagation; @@ -348,6 +351,8 @@ int mnt_fs_fetch_statmount(struct libmnt_fs *fs, uint64_t mask) mask |= STATMOUNT_MNT_OPTS; if (!fs->ns_id) mask |= STATMOUNT_MNT_NS_ID; + if (!fs->source) + mask |= STATMOUNT_SB_SOURCE; } if (fs->ns_id) @@ -364,14 +369,15 @@ int mnt_fs_fetch_statmount(struct libmnt_fs *fs, uint64_t mask) DBG(FS, ul_debugobj(fs, " use private buffer")); rc = sys_statmount(fs->uniq_id, 0, mask, &buf, &bufsiz, 0); } - DBG(FS, ul_debugobj(fs, " statmount [rc=%d bufsiz=%zu ns=%" PRIu64 " mask: %s%s%s%s%s%s]", + DBG(FS, ul_debugobj(fs, " statmount [rc=%d bufsiz=%zu ns=%" PRIu64 " mask: %s%s%s%s%s%s%s]", rc, bufsiz, ns, mask & STATMOUNT_SB_BASIC ? "sb-basic " : "", mask & STATMOUNT_MNT_BASIC ? "mnt-basic " : "", mask & STATMOUNT_MNT_ROOT ? "mnt-root " : "", mask & STATMOUNT_MNT_POINT ? "mnt-point " : "", mask & STATMOUNT_FS_TYPE ? "fs-type " : "", - mask & STATMOUNT_MNT_OPTS ? "mnt-opts " : "")); + mask & STATMOUNT_MNT_OPTS ? "mnt-opts " : "", + mask & STATMOUNT_SB_SOURCE ? "sb-source " : "")); if (!rc) rc = apply_statmount(fs, buf); |
