libmount: always use mnt_resolve_target() in mnt_fs_match_target()

The requested path is also target mountpoint, so let's optimize
realpath() usage as well.

Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
Karel Zak 2014-07-01 10:34:09 +02:00
parent fb329bbc04
commit 8642cd7b0f
2 changed files with 9 additions and 4 deletions

View File

@ -504,6 +504,7 @@ static char *canonicalize_path_and_cache(const char *path,
char *key = NULL;
char *value = NULL;
DBG(CACHE, ul_debugobj(cache, "canonicalize path %s", path));
p = canonicalize_path(path);
if (p && cache) {

View File

@ -1411,11 +1411,15 @@ int mnt_fs_append_comment(struct libmnt_fs *fs, const char *comm)
*
* Possible are three attempts:
* 1) compare @target with @fs->target
*
* 2) realpath(@target) with @fs->target
*
* 3) realpath(@target) with realpath(@fs->target) if @fs is not from
* /proc/self/mountinfo. However, if mnt_cache_set_targets(cache,
* mtab) was called, and the path @fs->target is found in @mtab,
* this comparison is not performed (see mnt_resolve_target()).
* /proc/self/mountinfo.
*
* However, if mnt_cache_set_targets(cache, mtab) was called, and the
* path @target or @fs->target is found in the @mtab, the canonicalization is
* is not performed (see mnt_resolve_target()).
*
* The 2nd and 3rd attempts are not performed when @cache is NULL.
*
@ -1435,7 +1439,7 @@ int mnt_fs_match_target(struct libmnt_fs *fs, const char *target,
if (!rc && cache) {
/* 2) - canonicalized and non-canonicalized */
char *cn = mnt_resolve_path(target, cache);
char *cn = mnt_resolve_target(target, cache);
rc = (cn && mnt_fs_streq_target(fs, cn));
/* 3) - canonicalized and canonicalized */