From 4b9c399bf67501183389087437313c5b08f8f776 Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Thu, 10 May 2007 12:10:57 +0200 Subject: [PATCH] mount: fsprobe: use blkid cache only when really necessary The blkid_get_cache() parses /etc/blkid.tab, it's better do it only when we really need to resolve a spec (label or uuid). Signed-off-by: Karel Zak --- mount/fsprobe_blkid.c | 55 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 45 insertions(+), 10 deletions(-) diff --git a/mount/fsprobe_blkid.c b/mount/fsprobe_blkid.c index 2dc734e5..4d288972 100644 --- a/mount/fsprobe_blkid.c +++ b/mount/fsprobe_blkid.c @@ -2,35 +2,55 @@ #include #include "fsprobe.h" +#define BLKID_EMPTY_CACHE "/dev/null" static blkid_cache blkid; void -fsprobe_init(void) { - blkid_get_cache(&blkid, NULL); +fsprobe_init(void) +{ + blkid = NULL; } void -fsprobe_exit(void) { - blkid_put_cache(blkid); +fsprobe_exit(void) +{ + if (blkid) + blkid_put_cache(blkid); } const char * -fsprobe_get_label_by_devname(const char *devname) { +fsprobe_get_label_by_devname(const char *devname) +{ + if (!blkid) + blkid_get_cache(&blkid, NULL); + return blkid_get_tag_value(blkid, "LABEL", devname); } const char * -fsprobe_get_uuid_by_devname(const char *devname) { +fsprobe_get_uuid_by_devname(const char *devname) +{ + if (!blkid) + blkid_get_cache(&blkid, NULL); + return blkid_get_tag_value(blkid, "UUID", devname); } const char * -fsprobe_get_devname_by_uuid(const char *uuid) { +fsprobe_get_devname_by_uuid(const char *uuid) +{ + if (!blkid) + blkid_get_cache(&blkid, NULL); + return blkid_get_devname(blkid, "UUID", uuid); } const char * -fsprobe_get_devname_by_label(const char *label) { +fsprobe_get_devname_by_label(const char *label) +{ + if (!blkid) + blkid_get_cache(&blkid, NULL); + return blkid_get_devname(blkid, "LABEL", label); } @@ -41,7 +61,22 @@ fsprobe_known_fstype(const char *fstype) } const char * -fsprobe_get_fstype_by_devname(const char *devname) { - return blkid_get_tag_value(blkid, "TYPE", devname); +fsprobe_get_fstype_by_devname(const char *devname) +{ + blkid_cache c; + const char *tp; + + if (blkid) + return blkid_get_tag_value(blkid, "TYPE", devname); + + /* The cache is not initialized yet. Use empty cache rather than waste + * time with /etc/blkid.tab. It seems that probe FS is faster than + * parse the cache file. -- kzak (17-May-2007) + */ + blkid_get_cache(&c, BLKID_EMPTY_CACHE); + tp = blkid_get_tag_value(c, "TYPE", devname); + blkid_put_cache(c); + + return tp; } -- 2.39.5