Whamcloud - gitweb
LU-2740 utils: Add support for --version option
[fs/lustre-release.git] / lustre / utils / obd.c
index f0091de..235e785 100644 (file)
 #include <unistd.h>
 
 #include "obdctl.h"
-
-#include <obd.h>          /* for struct lov_stripe_md */
+#include <libcfs/libcfs.h>
+#include <lnet/lnet.h>
+#include <lustre/lustre_idl.h>
+#include <lustre_cfg.h>
+#include <lustre_ioctl.h>
 #include <lustre/lustre_build_version.h>
 
 #include <lnet/lnetctl.h>
@@ -110,13 +113,6 @@ const int nthreads = 1;
 
 static int cur_device = -1;
 
-struct lov_oinfo lov_oinfos[LOV_MAX_STRIPE_COUNT];
-
-struct lsm_buffer {
-        struct lov_stripe_md lsm;
-        struct lov_oinfo *ptrs[LOV_MAX_STRIPE_COUNT];
-} lsm_buffer;
-
 static int l2_ioctl(int dev_id, int opc, void *buf)
 {
         return l_ioctl(dev_id, opc, buf);
@@ -281,75 +277,6 @@ int parse_devname(char *func, char *name)
         return ret;
 }
 
-static void
-reset_lsmb (struct lsm_buffer *lsmb)
-{
-        memset (&lsmb->lsm, 0, sizeof (lsmb->lsm));
-        memset(lov_oinfos, 0, sizeof(lov_oinfos));
-        lsmb->lsm.lsm_magic = LOV_MAGIC;
-}
-
-static int
-parse_lsm (struct lsm_buffer *lsmb, char *string)
-{
-        struct lov_stripe_md *lsm = &lsmb->lsm;
-        char                 *end;
-        int                   i;
-
-        /*
-         * object_id[=size#count[@offset:id]*]
-         */
-
-        reset_lsmb (lsmb);
-
-       ostid_set_id(&lsm->lsm_oi, strtoull(string, &end, 0));
-       if (end == string)
-               return -1;
-       string = end;
-
-        if (*string == 0)
-                return (0);
-
-        if (*string != '=')
-                return (-1);
-        string++;
-
-        lsm->lsm_stripe_size = strtoul (string, &end, 0);
-        if (end == string)
-                return (-1);
-        string = end;
-
-        if (*string != '#')
-                return (-1);
-        string++;
-
-        lsm->lsm_stripe_count = strtoul (string, &end, 0);
-        if (end == string)
-                return (-1);
-        string = end;
-
-        if (*string == 0)               /* don't have to specify obj ids */
-                return (0);
-
-       for (i = 0; i < lsm->lsm_stripe_count; i++) {
-               if (*string != '@')
-                       return (-1);
-               string++;
-               lsm->lsm_oinfo[i]->loi_ost_idx = strtoul(string, &end, 0);
-               if (*end != ':')
-                       return (-1);
-               string = end + 1;
-               ostid_set_id(&lsm->lsm_oinfo[i]->loi_oi,
-                            strtoull(string, &end, 0));
-               string = end;
-       }
-
-        if (*string != 0)
-                return (-1);
-
-        return (0);
-}
-
 char *jt_cmdname(char *func)
 {
         static char buf[512];
@@ -475,22 +402,22 @@ static int shmem_setup(void)
         rc = pthread_mutexattr_setpshared(&mattr, PTHREAD_PROCESS_SHARED);
         if (rc != 0) {
                 fprintf(stderr, "Can't set shared mutex attr\n");
-                return rc;
+               goto out;
         }
 
         rc = pthread_condattr_setpshared(&cattr, PTHREAD_PROCESS_SHARED);
         if (rc != 0) {
                 fprintf(stderr, "Can't set shared cond attr\n");
-                return rc;
+               goto out;
         }
 
         pthread_mutex_init(&shared_data->mutex, &mattr);
         pthread_cond_init(&shared_data->cond, &cattr);
-
+out:
         pthread_mutexattr_destroy(&mattr);
         pthread_condattr_destroy(&cattr);
 
-        return 0;
+       return rc;
 }
 
 static inline void shmem_lock(void)
@@ -1005,17 +932,12 @@ int jt_get_version(int argc, char **argv)
         if (rc)
                 fprintf(stderr, "error: %s: %s\n", jt_cmdname(argv[0]),
                         strerror(-rc));
-        else
-                printf("Lustre version: %s\n", version);
+       else
+               printf("Lustre version: %s\n", version);
 
-        printf("lctl   version: %s\n", BUILD_VERSION);
-        return rc;
+       return rc;
 }
 
-/*
- * Print an obd device line with the ost_conn_uuid inserted, if the obd
- * is an osc.
- */
 static void print_obd_line(char *s)
 {
         char buf[MAX_STRING_SIZE];
@@ -1023,7 +945,9 @@ static void print_obd_line(char *s)
         FILE *fp = NULL;
         char *ptr;
 
-        if (sscanf(s, " %*d %*s osc %s %*s %*d ", obd_name) == 0)
+       snprintf(buf, sizeof(buf), " %%*d %%*s osc %%%zus %%*s %%*d ",
+                sizeof(obd_name) - 1);
+       if (sscanf(s, buf, obd_name) == 0)
                 goto try_mdc;
         snprintf(buf, sizeof(buf),
                  "/proc/fs/lustre/osc/%s/ost_conn_uuid", obd_name);
@@ -1032,7 +956,9 @@ static void print_obd_line(char *s)
         goto got_one;
 
 try_mdc:
-        if (sscanf(s, " %*d %*s mdc %s %*s %*d ", obd_name) == 0)
+       snprintf(buf, sizeof(buf), " %%*d %%*s mdc %%%zus %%*s %%*d ",
+                sizeof(obd_name) - 1);
+       if (sscanf(s, buf, obd_name) == 0)
                 goto fail;
         snprintf(buf, sizeof(buf),
                  "/proc/fs/lustre/mdc/%s/mds_conn_uuid", obd_name);
@@ -1515,25 +1441,19 @@ int jt_obd_test_md_getattr(int argc, char **argv)
         return jt_obd_md_common(argc, argv, ECHO_MD_GETATTR);
 }
 
-/* Create one or more objects, arg[4] may describe stripe meta-data.  If
- * not, defaults assumed.  This echo-client instance stashes the stripe
- * object ids.  Use get_stripe on this node to print full lsm and
- * set_stripe on another node to cut/paste between nodes.
- */
-/* create <count> [<file_create_mode>] [q|v|# verbosity] [striping] */
 int jt_obd_create(int argc, char **argv)
 {
-        char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf;
-        struct obd_ioctl_data data;
-        struct timeval next_time;
-        __u64 count = 1, next_count, base_id = 1;
-        int verbose = 1, mode = 0100644, rc = 0, i, valid_lsm = 0;
+       char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf;
+       struct obd_ioctl_data data;
+       struct timeval next_time;
+       __u64 count = 1, next_count, base_id = 1;
+       int verbose = 1, mode = 0100644, rc = 0, i;
         char *end;
 
         memset(&data, 0, sizeof(data));
         data.ioc_dev = cur_device;
-        if (argc < 2 || argc > 5)
-                return CMD_HELP;
+       if (argc < 2 || argc > 4)
+               return CMD_HELP;
 
         count = strtoull(argv[1], &end, 0);
         if (*end) {
@@ -1559,19 +1479,6 @@ int jt_obd_create(int argc, char **argv)
                         return CMD_HELP;
         }
 
-       if (argc < 5) {
-               reset_lsmb(&lsm_buffer);       /* will set default */
-       } else {
-               rc = parse_lsm(&lsm_buffer, argv[4]);
-               if (rc != 0) {
-                       fprintf(stderr, "error: %s: invalid lsm '%s'\n",
-                               jt_cmdname(argv[0]), argv[4]);
-                       return CMD_HELP;
-               }
-               base_id = ostid_id(&lsm_buffer.lsm.lsm_oi);
-               valid_lsm = 1;
-       }
-
         printf("%s: "LPD64" objects\n", jt_cmdname(argv[0]), count);
         gettimeofday(&next_time, NULL);
         next_time.tv_sec -= verbose;
@@ -1585,10 +1492,6 @@ int jt_obd_create(int argc, char **argv)
                data.ioc_obdo1.o_valid = OBD_MD_FLTYPE | OBD_MD_FLMODE |
                                         OBD_MD_FLID | OBD_MD_FLUID |
                                         OBD_MD_FLGID | OBD_MD_FLGROUP;
-               if (valid_lsm) {
-                       data.ioc_plen1 = sizeof lsm_buffer;
-                       data.ioc_pbuf1 = (char *)&lsm_buffer;
-               }
 
                 memset(buf, 0, sizeof(rawbuf));
                 rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf));
@@ -2322,74 +2225,6 @@ out:
         return rc;
 }
 
-int jt_obd_ldlm_regress_start(int argc, char **argv)
-{
-        int rc;
-        struct obd_ioctl_data data;
-        char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf;
-        char argstring[200];
-        int i, count = sizeof(argstring) - 1;
-
-        memset(&data, 0, sizeof(data));
-        data.ioc_dev = cur_device;
-        if (argc > 5)
-                return CMD_HELP;
-
-        argstring[0] = '\0';
-        for (i = 1; i < argc; i++) {
-                strncat(argstring, " ", count);
-                count--;
-                strncat(argstring, argv[i], count);
-                count -= strlen(argv[i]);
-        }
-
-        if (strlen(argstring)) {
-                data.ioc_inlbuf1 = argstring;
-                data.ioc_inllen1 = strlen(argstring) + 1;
-        }
-
-        memset(buf, 0, sizeof(rawbuf));
-        rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf));
-        if (rc) {
-                fprintf(stderr, "error: %s: invalid ioctl\n",
-                        jt_cmdname(argv[0]));
-                return rc;
-        }
-        rc = l2_ioctl(OBD_DEV_ID, IOC_LDLM_REGRESS_START, buf);
-        if (rc)
-                fprintf(stderr, "error: %s: test failed: %s\n",
-                        jt_cmdname(argv[0]), strerror(rc = errno));
-
-        return rc;
-}
-
-int jt_obd_ldlm_regress_stop(int argc, char **argv)
-{
-        int rc;
-        char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf;
-        struct obd_ioctl_data data;
-
-        memset(&data, 0, sizeof(data));
-        data.ioc_dev = cur_device;
-
-        if (argc != 1)
-                return CMD_HELP;
-
-        memset(buf, 0, sizeof(rawbuf));
-        rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf));
-        if (rc) {
-                fprintf(stderr, "error: %s: invalid ioctl\n",
-                        jt_cmdname(argv[0]));
-                return rc;
-        }
-        rc = l2_ioctl(OBD_DEV_ID, IOC_LDLM_REGRESS_STOP, buf);
-
-        if (rc)
-                fprintf(stderr, "error: %s: test failed: %s\n",
-                        jt_cmdname(argv[0]), strerror(rc = errno));
-        return rc;
-}
-
 static int do_activate(int argc, char **argv, int flag)
 {
         struct obd_ioctl_data data;
@@ -3117,18 +2952,13 @@ static void signal_server(int sig)
 
 int obd_initialize(int argc, char **argv)
 {
-        int i;
-
-        for (i = 0; i < LOV_MAX_STRIPE_COUNT; i++)
-                lsm_buffer.lsm.lsm_oinfo[i] = lov_oinfos + i;
-
-        if (shmem_setup() != 0)
-                return -1;
+       if (shmem_setup() != 0)
+               return -1;
 
-        register_ioc_dev(OBD_DEV_ID, OBD_DEV_PATH,
-                         OBD_DEV_MAJOR, OBD_DEV_MINOR);
+       register_ioc_dev(OBD_DEV_ID, OBD_DEV_PATH,
+                        OBD_DEV_MAJOR, OBD_DEV_MINOR);
 
-        return 0;
+       return 0;
 }
 
 void obd_finalize(int argc, char **argv)
@@ -3379,10 +3209,8 @@ static int pool_cmd(enum lcfg_command_type cmd,
                 lustre_cfg_bufs_set_string(&bufs, 2, ostname);
 
         lcfg = lustre_cfg_new(cmd, &bufs);
-        if (IS_ERR(lcfg)) {
-                rc = PTR_ERR(lcfg);
-                return rc;
-        }
+       if (lcfg == NULL)
+               return rc;
 
         memset(&data, 0, sizeof(data));
         rc = data.ioc_dev = get_mgs_device();
@@ -3446,11 +3274,8 @@ static int nodemap_cmd(enum lcfg_command_type cmd, void *ret_data,
        va_end(ap);
 
        lcfg = lustre_cfg_new(cmd, &bufs);
-
-       if (IS_ERR(lcfg)) {
-               rc = PTR_ERR(lcfg);
-               return rc;
-       }
+       if (lcfg == NULL)
+               return -ENOMEM;
 
        memset(&data, 0, sizeof(data));
        rc = data.ioc_dev = get_mgs_device();
@@ -4415,35 +4240,6 @@ int jt_get_obj_version(int argc, char **argv)
         return 0;
 }
 
-void  llapi_ping_target(char *obd_type, char *obd_name,
-                        char *obd_uuid, void *args)
-{
-        int  rc;
-        struct obd_ioctl_data data;
-        char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf;
-
-        memset(&data, 0, sizeof(data));
-        data.ioc_inlbuf4 = obd_name;
-        data.ioc_inllen4 = strlen(obd_name) + 1;
-        data.ioc_dev = OBD_DEV_BY_DEVNAME;
-        memset(buf, 0, sizeof(rawbuf));
-        if (obd_ioctl_pack(&data, &buf, sizeof(rawbuf))) {
-                fprintf(stderr, "error: invalid ioctl\n");
-                return;
-        }
-        rc = l_ioctl(OBD_DEV_ID, OBD_IOC_PING_TARGET, buf);
-        if (rc)
-                rc = errno;
-        if (rc == ENOTCONN || rc == ESHUTDOWN) {
-                printf("%s: INACTIVE\n", obd_name);
-        } else if (rc) {
-                printf("%s: check error: %s\n",
-                        obd_name, strerror(errno));
-        } else {
-                printf("%s: active\n", obd_name);
-        }
-}
-
 int jt_changelog_register(int argc, char **argv)
 {
         char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf;