lib/repo-finder-mount: Ignore mounts which have a ‘system’ file system

For example, tmpfs or a cgroup file system. This is basically an
optimisation of the list of file systems we check for repositories,
since we would never expect any of these file systems to be capable of
containing a repository.

Depends on the new API from
https://bugzilla.gnome.org/show_bug.cgi?id=788927.

Signed-off-by: Philip Withnall <withnall@endlessm.com>

Closes: #1307
Approved by: cgwalters
This commit is contained in:
Philip Withnall 2017-10-25 15:49:49 +01:00 committed by Atomic Bot
parent d76840d0c1
commit 0760ce1281

View File

@ -23,6 +23,7 @@
#include "config.h"
#include <gio/gio.h>
#include <gio/gunixmounts.h>
#include <glib.h>
#include <glib-object.h>
#include <libglnx.h>
@ -355,6 +356,23 @@ ostree_repo_finder_mount_resolve_async (OstreeRepoFinder *finde
continue;
}
#if GLIB_CHECK_VERSION(2, 55, 0)
G_GNUC_BEGIN_IGNORE_DEPRECATIONS /* remove once GLIB_VERSION_MAX_ALLOWED ≥ 2.56 */
g_autoptr(GUnixMountEntry) mount_entry = g_unix_mount_at (mount_root_path, NULL);
if (mount_entry != NULL &&
(g_unix_is_system_fs_type (g_unix_mount_get_fs_type (mount_entry)) ||
g_unix_is_system_device_path (g_unix_mount_get_device_path (mount_entry))))
{
g_debug ("Ignoring mount %s as its file system type (%s) or device "
"path (%s) indicate its a system mount.",
mount_name, g_unix_mount_get_fs_type (mount_entry),
g_unix_mount_get_device_path (mount_entry));
continue;
}
G_GNUC_END_IGNORE_DEPRECATIONS
#endif /* GLib 2.56.0 */
/* stat() the mount root so we can later check whether the resolved
* repositories for individual refs are on the same device (to avoid the
* symlinks for them pointing outside the mount root). */