]> err.no Git - util-linux/commitdiff
mount: fsprobe: use blkid cache only when really necessary
authorKarel Zak <kzak@redhat.com>
Thu, 10 May 2007 10:10:57 +0000 (12:10 +0200)
committerKarel Zak <kzak@redhat.com>
Thu, 17 May 2007 10:52:40 +0000 (12:52 +0200)
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 <kzak@redhat.com>
mount/fsprobe_blkid.c

index 2dc734e5a4e6b2f5be50ef17f5f3307c7fcdb86c..4d288972920a9bd32db158a0270f6b014ffd24b2 100644 (file)
@@ -2,35 +2,55 @@
 #include <blkid/blkid.h>
 #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;
 }