Whamcloud - gitweb
LU-807 utils: remove old service tags support
[fs/lustre-release.git] / lustre / utils / mount_utils.c
index bbe5d8b..570fa54 100644 (file)
  * GPL HEADER END
  */
 /*
- * Copyright  2008 Sun Microsystems, Inc. All rights reserved
+ * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
  * Use is subject to license terms.
+ * Copyright (c) 2012 Whamcloud, Inc.
  */
 /*
  * This file is part of Lustre, http://www.lustre.org/
  * Lustre is a trademark of Sun Microsystems, Inc.
  */
 
+#if HAVE_CONFIG_H
+#  include "config.h"
+#endif /* HAVE_CONFIG_H */
+
 #include <stdio.h>
 #include <errno.h>
 #include <string.h>
@@ -114,8 +119,8 @@ int get_mountdata(char *dev, struct lustre_disk_data *mo_ldd)
                 return errno;
         }
 
-        snprintf(cmd, cmdsz, "/sbin/debugfs -c -R 'dump /%s %s/mountdata' %s",
-                 MOUNT_DATA_FILE, tmpdir, dev);
+        snprintf(cmd, cmdsz, "%s -c -R 'dump /%s %s/mountdata' %s",
+                 DEBUGFS, MOUNT_DATA_FILE, tmpdir, dev);
 
         ret = run_command(cmd, cmdsz);
         if (ret) {
@@ -127,13 +132,20 @@ int get_mountdata(char *dev, struct lustre_disk_data *mo_ldd)
         sprintf(filepnm, "%s/mountdata", tmpdir);
         filep = fopen(filepnm, "r");
         if (filep) {
+                size_t num_read;
                 vprint("Reading %s\n", MOUNT_DATA_FILE);
-                fread(mo_ldd, sizeof(*mo_ldd), 1, filep);
-       } else {
+                num_read = fread(mo_ldd, sizeof(*mo_ldd), 1, filep);
+                if (num_read < 1 && ferror(filep)) {
+                        fprintf(stderr, "%s: Unable to read from file (%s): %s\n",
+                                progname, filepnm, strerror(errno));
+                        goto out_close;
+                }
+        } else {
                 verrprint("%s: Unable to read %d.%d config %s.\n",
                           progname, LUSTRE_MAJOR, LUSTRE_MINOR, filepnm);
-                goto out_close;
-       }       
+                ret = 1;
+                goto out_rmdir;
+        }
 
 out_close:
         fclose(filep);
@@ -143,123 +155,11 @@ out_rmdir:
         ret2 = run_command(cmd, cmdsz);
         if (ret2) {
                 verrprint("Failed to remove temp dir %s (%d)\n", tmpdir, ret2);
-               /* failure return from run_command() is more important
+                /* failure return from run_command() is more important
                  * than the failure to remove a dir */
-               if (!ret)
-                       ret = ret2;
-       }
-
-        return ret;
-}
-
-#define PARENT_URN "urn:uuid:2bb5bdbf-6c4b-11dc-9b8e-080020a9ed93"
-#define PARENT_PRODUCT "Lustre"
-
-static int stclient(char *type, char *arch)
-{
-
-        char product[64];
-        char *urn = NULL;
-        char cmd[1024];
-        FILE *fp;
-        int i;
-
-        if (strcmp(type, "Client") == 0)
-                urn = CLIENT_URN;
-        else if (strcmp(type, "MDS") == 0)
-                urn = MDS_URN;
-        else if (strcmp(type, "MGS") == 0)
-                urn = MGS_URN;
-        else if (strcmp(type, "OSS") == 0)
-                urn = OSS_URN;
-
-        snprintf(product, 64, "Lustre %s %d.%d.%d", type, LUSTRE_MAJOR,
-                 LUSTRE_MINOR, LUSTRE_PATCH); 
-
-        /* need to see if the entry exists first */
-        snprintf(cmd, 1024,
-                 "/opt/sun/servicetag/bin/stclient -f -t '%s' ", urn);
-        fp = popen(cmd, "r");
-        if (!fp) {
-                if (verbose)
-                        fprintf(stderr, "%s: trying to run stclient -f: %s\n",
-                                progname, strerror(errno));
-                return 0;
-        }
-
-        i = fread(cmd, 1, sizeof(cmd), fp);
-        if (i) {
-                cmd[i] = 0;
-                if (strcmp(cmd, "Record not found\n") != 0) {
-                        /* exists, just return */
-                        pclose(fp);
-                        return 0;
-                }
+                if (!ret)
+                        ret = ret2;
         }
-        pclose(fp);
 
-        snprintf(cmd, 1024, "/opt/sun/servicetag/bin/stclient -a -p '%s' "
-               "-e %d.%d.%d -t '%s' -S mount -F '%s' -P '%s' -m SUN "
-               "-A %s -z global", product, LUSTRE_MAJOR, LUSTRE_MINOR,
-               LUSTRE_PATCH, urn, PARENT_URN, PARENT_PRODUCT, arch);
-
-        return(run_command(cmd, sizeof(cmd)));
-}
-
-void register_service_tags(char *usource, char *source, char *target)
-{
-        struct lustre_disk_data mo_ldd;
-        struct utsname utsname_buf;
-        struct stat stat_buf;
-        char stclient_loc[] = "/opt/sun/servicetag/bin/stclient";
-        int rc;
-
-        rc = stat(stclient_loc, &stat_buf);
-
-        if (rc == 0) {
-                /* call the service tags stclient to show that we use Lustre on
-                   this system */
-
-                rc = uname(&utsname_buf);
-                if (rc) {
-                        if (verbose)
-                                fprintf(stderr,
-                                        "%s: trying to get uname failed: %s, "
-                                        "inventory tags will not be created\n",
-                                        progname, strerror(errno));
-                } else {
-
-                        /* client or server? */
-                        if (strchr(usource, ':')) {
-                                stclient("Client", utsname_buf.machine);
-                        } else {
-                                /* first figure what type of device it is */
-                                rc = get_mountdata(source, &mo_ldd);
-                                if (rc) {
-                                        if (verbose)
-                                                fprintf(stderr,
-                                                        "%s: trying to read mountdata from %s "
-                                                        "failed: %s, inventory tags will not "
-                                                        "be created\n",
-                                                        progname, target, strerror(errno));
-                                } else {
-
-                                        if (IS_MDT(&mo_ldd))
-                                                stclient("MDS", utsname_buf.machine);
-
-                                        if (IS_MGS(&mo_ldd))
-                                                stclient("MGS", utsname_buf.machine);
-
-                                        if (IS_OST(&mo_ldd))
-                                                stclient("OSS", utsname_buf.machine);
-                                }
-                        }
-                }
-        } else {
-                if (errno != ENOENT && verbose) {
-                        fprintf(stderr,
-                                "%s: trying to stat stclient failed: %s\n",
-                                progname, strerror(errno));
-                }
-        }
+        return ret;
 }