* 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>
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) {
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);
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;
}