From 2238214ddc81d8ecab386d9e38d68f9357e2ad74 Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Thu, 24 Mar 2016 11:51:12 +0100 Subject: libmount: try absolute target before canonicalize The path canonicalization is expensive and in many cases unwanted due to problems with readlink() on unreachable NFS and automounters. This patch add a possibility to search also by $(CWD)/ if the is relative to reduce number of situation when we convert the path to the canonical absolute path. The common use-case: # cd /some/long/path # umount ./mountpoint old version: 15543: libmount: TAB: [0x560a99a54230]: lookup TARGET: './test' 15543: libmount: CACHE: [0x560a99a54290]: canonicalize path ./test 15543: libmount: CACHE: [0x560a99a54290]: add entry [ 1] (path): /mnt/test: ./test 15543: libmount: TAB: [0x560a99a54230]: lookup canonical TARGET: '/mnt/test' 15543: libmount: CXT: [0x560a99a54050]: umount fs: /mnt/test new version: 15597: libmount: TAB: [0xabf230]: lookup TARGET: './test' 15597: libmount: TAB: [0xabf230]: lookup absolute TARGET: '/mnt/test' 15597: libmount: CXT: [0xabf050]: umount fs: /mnt/test Signed-off-by: Karel Zak --- include/canonicalize.h | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'include/canonicalize.h') diff --git a/include/canonicalize.h b/include/canonicalize.h index 7a18aca09..0a292fc32 100644 --- a/include/canonicalize.h +++ b/include/canonicalize.h @@ -13,9 +13,19 @@ #define CANONICALIZE_H #include "c.h" /* for PATH_MAX */ +#include "strutils.h" extern char *canonicalize_path(const char *path); extern char *canonicalize_path_restricted(const char *path); extern char *canonicalize_dm_name(const char *ptname); +extern char *absolute_path(const char *path); + +static inline int is_relative_path(const char *path) +{ + if (!path || *path == '/') + return 0; + return 1; +} + #endif /* CANONICALIZE_H */ -- cgit v1.2.3-55-g7522