chiark / gitweb /
fs-util: add shortcut for chase_symlinks() when it is called like open(O_PATH)
authorLennart Poettering <lennart@poettering.net>
Mon, 26 Mar 2018 14:34:54 +0000 (16:34 +0200)
committerSven Eden <yamakuzure@gmx.net>
Fri, 24 Aug 2018 14:47:08 +0000 (16:47 +0200)
Let's optimize things, and let the kernel chase the paths if none of the
features chase_symlinks() offers are actually used.

src/basic/fs-util.c

index d43aca249776c87d105d4679c9ab247f9a4d9291..fe8554842f9976653fe6b6a2d0c4c501d99027ac 100644 (file)
@@ -649,6 +649,16 @@ int chase_symlinks(const char *path, const char *original_root, unsigned flags,
         if (noop_root(original_root))
                 original_root = NULL;
 
+        if (!original_root && !ret && (flags & (CHASE_NONEXISTENT|CHASE_NO_AUTOFS|CHASE_SAFE|CHASE_OPEN)) == CHASE_OPEN) {
+                /* Shortcut the CHASE_OPEN case if the caller isn't interested in the actual path and has no root set
+                 * and doesn't care about any of the other special features we provide either. */
+                r = open(path, O_PATH|O_CLOEXEC);
+                if (r < 0)
+                        return -errno;
+
+                return r;
+        }
+
         if (original_root) {
                 r = path_make_absolute_cwd(original_root, &root);
                 if (r < 0)