Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP4:Update
python-libmount
util-linux-libmount-use-mount-table-filter-on-n...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File util-linux-libmount-use-mount-table-filter-on-no-canonicalize.patch of Package python-libmount
From f8416301c195d50a21cb54d9ea9abeccc40f9ee7 Mon Sep 17 00:00:00 2001 From: Karel Zak <kzak@redhat.com> Date: Wed, 7 Jun 2017 11:35:26 +0200 Subject: [PATCH] libmount: use mount table filter on --no-canonicalize The umount command option --no-canonicalize means that the path is already canonical. So, we can use mount table filter in this case too. Signed-off-by: Karel Zak <kzak@redhat.com> --- libmount/src/context.c | 13 +++++++------ libmount/src/context_umount.c | 20 ++++++++++++-------- 2 files changed, 19 insertions(+), 14 deletions(-) --- a/libmount/src/context.c +++ b/libmount/src/context.c @@ -1074,7 +1074,10 @@ int mnt_context_get_mtab_for_target(stru char *cn_tgt = NULL; int rc; - if (mnt_stat_mountpoint(tgt, &st) == 0 && S_ISDIR(st.st_mode)) { + if (mnt_context_is_nocanonicalize(cxt)) + mnt_context_set_tabfilter(cxt, mtab_filter, (void *) tgt); + + else if (mnt_stat_mountpoint(tgt, &st) == 0 && S_ISDIR(st.st_mode)) { cache = mnt_context_get_cache(cxt); cn_tgt = mnt_resolve_path(tgt, cache); if (cn_tgt) @@ -1082,12 +1085,10 @@ int mnt_context_get_mtab_for_target(stru } rc = mnt_context_get_mtab(cxt, mtab); + mnt_context_set_tabfilter(cxt, NULL, NULL); - if (cn_tgt) { - mnt_context_set_tabfilter(cxt, NULL, NULL); - if (!cache) - free(cn_tgt); - } + if (cn_tgt && !cache) + free(cn_tgt); return rc; } --- a/libmount/src/context_umount.c +++ b/libmount/src/context_umount.c @@ -67,17 +67,21 @@ int mnt_context_find_umount_fs(struct li return 1; /* empty string is not an error */ /* - * The mount table may be huge, and on systems with utab we have to merge - * userspace mount options into /proc/self/mountinfo. This all is - * expensive. The tab filter allows to filter out entries, then - * a mount table and utab are very tiny files. + * The mount table may be huge, and on systems with utab we have to + * merge userspace mount options into /proc/self/mountinfo. This all is + * expensive. The tab filter allows to filter out entries, then a mount + * table and utab are very tiny files. * - * *but*... the filter uses mnt_fs_streq_{target,srcpath} functions - * where LABEL, UUID or symlinks are canonicalized. It means that - * it's usable only for canonicalized stuff (e.g. kernel mountinfo). + * The filter uses mnt_fs_streq_{target,srcpath} function where all + * paths should be absolute and canonicalized. This is done within + * mnt_context_get_mtab_for_target() where LABEL, UUID or symlinks are + * canonicalized. If --no-canonicalize is enabled than the target path + * is expected already canonical. + * + * It also means that we have to read mount table from kernel + * (non-writable mtab). */ if (!mnt_context_mtab_writable(cxt) && *tgt == '/' && - !mnt_context_is_nocanonicalize(cxt) && !mnt_context_is_force(cxt) && !mnt_context_is_lazy(cxt)) rc = mnt_context_get_mtab_for_target(cxt, &mtab, tgt); else
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor