Whamcloud - gitweb
LU-8851 nodemap: add uid/gid only flags to control mapping
[fs/lustre-release.git] / lustre / utils / obd.c
index 350346d..0fdec22 100644 (file)
@@ -1497,9 +1497,11 @@ int jt_obd_create(int argc, char **argv)
                ostid_set_id(&data.ioc_obdo1.o_oi, base_id);
                data.ioc_obdo1.o_uid = 0;
                data.ioc_obdo1.o_gid = 0;
+               data.ioc_obdo1.o_projid = 0;
                data.ioc_obdo1.o_valid = OBD_MD_FLTYPE | OBD_MD_FLMODE |
                                         OBD_MD_FLID | OBD_MD_FLUID |
-                                        OBD_MD_FLGID | OBD_MD_FLGROUP;
+                                        OBD_MD_FLGID | OBD_MD_FLGROUP |
+                                        OBD_MD_FLPROJID;
 
                 memset(buf, 0, sizeof(rawbuf));
                 rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf));
@@ -2459,8 +2461,13 @@ int jt_lcfg_erase(int argc, char **argv)
        char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf;
        int rc;
 
-       if (argc != 2)
+       if (argc == 3) {
+               if (strncmp(argv[2], "-q", strlen("-q")) != 0 &&
+                   strncmp(argv[2], "--quiet", strlen("--quiet")) != 0)
+                       return CMD_HELP;
+       } else if (argc != 2) {
                return CMD_HELP;
+       }
 
        memset(&data, 0, sizeof(data));
        data.ioc_dev = get_mgs_device();
@@ -3662,7 +3669,7 @@ int jt_nodemap_modify(int argc, char **argv)
        if (nodemap_name == NULL || param == NULL || value == NULL) {
                fprintf(stderr, "usage: nodemap_modify --name <nodemap_name> "
                                "--property <property_name> --value <value>\n");
-               fprintf(stderr, "valid properties: admin trusted "
+               fprintf(stderr, "valid properties: admin trusted map_mode "
                                "squash_uid squash_gid deny_unknown\n");
                return -1;
        }
@@ -3677,6 +3684,8 @@ int jt_nodemap_modify(int argc, char **argv)
                cmd = LCFG_NODEMAP_SQUASH_UID;
        } else if (strcmp("squash_gid", param) == 0) {
                cmd = LCFG_NODEMAP_SQUASH_GID;
+       } else if (strcmp("map_mode", param) == 0) {
+               cmd = LCFG_NODEMAP_MAP_MODE;
        } else {
                fprintf(stderr, "error: %s: nodemap_modify invalid "
                                "subcommand: %s\n",
@@ -4243,34 +4252,23 @@ int jt_barrier_thaw(int argc, char **argv)
        return rc;
 }
 
-int jt_barrier_stat(int argc, char **argv)
+int __jt_barrier_stat(int argc, char **argv, struct barrier_ctl *bc)
 {
        struct obd_ioctl_data data;
        char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf;
-       struct barrier_ctl bc;
        int rc;
 
-       if (argc != 2)
-               return CMD_HELP;
-
        memset(&data, 0, sizeof(data));
        rc = data.ioc_dev = get_mgs_device();
        if (rc < 0)
                return rc;
 
-       memset(&bc, 0, sizeof(bc));
-       bc.bc_version = BARRIER_VERSION_V1;
-       bc.bc_cmd = BC_STAT;
-
-       if (strlen(argv[1]) > 8) {
-               fprintf(stderr, "fsname name %s is too long. "
-                       "It should not exceed 8.\n", argv[1]);
-               return -EINVAL;
-       }
-
-       strncpy(bc.bc_name, argv[1], sizeof(bc.bc_name));
-       data.ioc_inlbuf1 = (char *)&bc;
-       data.ioc_inllen1 = sizeof(bc);
+       memset(bc, 0, sizeof(*bc));
+       bc->bc_version = BARRIER_VERSION_V1;
+       bc->bc_cmd = BC_STAT;
+       strncpy(bc->bc_name, argv[1], sizeof(bc->bc_name));
+       data.ioc_inlbuf1 = (char *)bc;
+       data.ioc_inllen1 = sizeof(*bc);
        memset(buf, 0, sizeof(rawbuf));
        rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf));
        if (rc) {
@@ -4279,11 +4277,31 @@ int jt_barrier_stat(int argc, char **argv)
        }
 
        rc = l_ioctl(OBD_DEV_ID, OBD_IOC_BARRIER, buf);
-       if (rc < 0) {
+       if (rc < 0)
                fprintf(stderr, "Fail to query barrier for %s: %s\n",
                        argv[1], strerror(errno));
-       } else {
+       else
                obd_ioctl_unpack(&data, buf, sizeof(rawbuf));
+
+       return rc;
+}
+
+int jt_barrier_stat(int argc, char **argv)
+{
+       struct barrier_ctl bc;
+       int rc;
+
+       if (argc != 2)
+               return CMD_HELP;
+
+       if (strlen(argv[1]) > 8) {
+               fprintf(stderr, "fsname name %s is too long. "
+                       "It should not exceed 8.\n", argv[1]);
+               return -EINVAL;
+       }
+
+       rc = __jt_barrier_stat(argc, argv, &bc);
+       if (!rc) {
                printf("The barrier for %s is in '%s'\n",
                       argv[1], barrier_status2name(bc.bc_status));
                if (bc.bc_status == BS_FREEZING_P1 ||