Whamcloud - gitweb
LU-4843 mdt: disallow old clients access striped dir
[fs/lustre-release.git] / lustre / utils / lfs.c
index 6e48c4f..cb684a1 100644 (file)
@@ -54,6 +54,7 @@
 #include <err.h>
 #include <pwd.h>
 #include <grp.h>
+#include <sys/quota.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
 # include <sys/quota.h>
 #endif
 
-/* For dirname() */
-#include <libgen.h>
-
+#include <libcfs/libcfs.h>
+#include <libcfs/libcfsutil.h>
 #include <lnet/lnetctl.h>
-
-#include <liblustre.h>
 #include <lustre/lustreapi.h>
-
-#include <libcfs/libcfsutil.h>
-#include <obd.h>
+#include <lustre_ver.h>
 #include "obdctl.h"
 
 /* all functions */
@@ -160,7 +156,9 @@ command_t cmdlist[] = {
         "[--default_stripe|-D ] <dir>\n"
         "\tstripe_count: stripe count of the striped directory\n"
         "\tmdt_index:  MDT index of first stripe\n"
-        "\thash_type:  hash type of the striped directory\n"
+        "\thash_type:  hash type of the striped directory. Hash types:\n"
+        "      -t fnv_1a_64 FNV-1a hash algorithm(default)\n"
+        "      -t all_char  sum of characters % MDT_COUNT. (not recommended)\n"
         "\tdefault_stripe: set default dirstripe of the directory\n"},
        {"getdirstripe", lfs_getdirstripe, 0,
         "To list the striping info for a given directory\n"
@@ -886,7 +884,10 @@ static int lfs_find(int argc, char **argv)
 {
         int c, ret;
         time_t t;
-        struct find_param param = { .maxdepth = -1, .quiet = 1 };
+       struct find_param param = {
+               .fp_max_depth = -1,
+               .quiet = 1,
+       };
         struct option long_opts[] = {
                 {"atime",        required_argument, 0, 'A'},
                 {"stripe-count", required_argument, 0, 'c'},
@@ -965,24 +966,24 @@ static int lfs_find(int argc, char **argv)
                         if (strcmp(optarg, "!") == 0)
                                 neg_opt = 2;
                         break;
-                case 'A':
-                        xtime = &param.atime;
-                        xsign = &param.asign;
-                        param.exclude_atime = !!neg_opt;
-                        /* no break, this falls through to 'C' for ctime */
-                case 'C':
-                        if (c == 'C') {
-                                xtime = &param.ctime;
-                                xsign = &param.csign;
-                                param.exclude_ctime = !!neg_opt;
-                        }
-                        /* no break, this falls through to 'M' for mtime */
-                case 'M':
-                        if (c == 'M') {
-                                xtime = &param.mtime;
-                                xsign = &param.msign;
-                                param.exclude_mtime = !!neg_opt;
-                        }
+               case 'A':
+                       xtime = &param.fp_atime;
+                       xsign = &param.fp_asign;
+                       param.fp_exclude_atime = !!neg_opt;
+                       /* no break, this falls through to 'C' for ctime */
+               case 'C':
+                       if (c == 'C') {
+                               xtime = &param.fp_ctime;
+                               xsign = &param.fp_csign;
+                               param.fp_exclude_ctime = !!neg_opt;
+                       }
+                       /* no break, this falls through to 'M' for mtime */
+               case 'M':
+                       if (c == 'M') {
+                               xtime = &param.fp_mtime;
+                               xsign = &param.fp_msign;
+                               param.fp_exclude_mtime = !!neg_opt;
+                       }
                         ret = set_time(&t, xtime, optarg);
                         if (ret == INT_MAX) {
                                 ret = -1;
@@ -1010,14 +1011,14 @@ static int lfs_find(int argc, char **argv)
                         param.check_stripecount = 1;
                         param.exclude_stripecount = !!neg_opt;
                         break;
-                case 'D':
-                        param.maxdepth = strtol(optarg, 0, 0);
-                        break;
-                case 'g':
-                case 'G':
-                        ret = name2id(&param.gid, optarg, GROUP);
-                        if (ret) {
-                                param.gid = strtoul(optarg, &endptr, 10);
+               case 'D':
+                       param.fp_max_depth = strtol(optarg, 0, 0);
+                       break;
+               case 'g':
+               case 'G':
+                       ret = name2id(&param.fp_gid, optarg, GROUP);
+                       if (ret) {
+                               param.fp_gid = strtoul(optarg, &endptr, 10);
                                 if (*endptr != '\0') {
                                         fprintf(stderr, "Group/GID: %s cannot "
                                                 "be found.\n", optarg);
@@ -1025,8 +1026,8 @@ static int lfs_find(int argc, char **argv)
                                         goto err;
                                 }
                         }
-                        param.exclude_gid = !!neg_opt;
-                        param.check_gid = 1;
+                       param.fp_exclude_gid = !!neg_opt;
+                       param.fp_check_gid = 1;
                         break;
                case 'L':
                        ret = name2layout(&param.layout, optarg);
@@ -1037,9 +1038,9 @@ static int lfs_find(int argc, char **argv)
                        break;
                 case 'u':
                 case 'U':
-                        ret = name2id(&param.uid, optarg, USER);
-                        if (ret) {
-                                param.uid = strtoul(optarg, &endptr, 10);
+                       ret = name2id(&param.fp_uid, optarg, USER);
+                       if (ret) {
+                               param.fp_uid = strtoul(optarg, &endptr, 10);
                                 if (*endptr != '\0') {
                                         fprintf(stderr, "User/UID: %s cannot "
                                                 "be found.\n", optarg);
@@ -1047,8 +1048,8 @@ static int lfs_find(int argc, char **argv)
                                         goto err;
                                 }
                         }
-                        param.exclude_uid = !!neg_opt;
-                        param.check_uid = 1;
+                       param.fp_exclude_uid = !!neg_opt;
+                       param.fp_check_uid = 1;
                         break;
                 case FIND_POOL_OPT:
                         if (strlen(optarg) > LOV_MAXPOOLNAME) {
@@ -1180,25 +1181,37 @@ err_free:
                        param.check_stripesize = 1;
                        param.exclude_stripesize = !!neg_opt;
                        break;
-                case 't':
-                        param.exclude_type = !!neg_opt;
-                        switch(optarg[0]) {
-                        case 'b': param.type = S_IFBLK; break;
-                        case 'c': param.type = S_IFCHR; break;
-                        case 'd': param.type = S_IFDIR; break;
-                        case 'f': param.type = S_IFREG; break;
-                        case 'l': param.type = S_IFLNK; break;
-                        case 'p': param.type = S_IFIFO; break;
-                        case 's': param.type = S_IFSOCK; break;
-#ifdef S_IFDOOR /* Solaris only */
-                        case 'D': param.type = S_IFDOOR; break;
-#endif
-                        default: fprintf(stderr, "error: %s: bad type '%s'\n",
-                                         argv[0], optarg);
-                                 ret = CMD_HELP;
-                                 goto err;
-                        };
-                        break;
+               case 't':
+                       param.fp_exclude_type = !!neg_opt;
+                       switch (optarg[0]) {
+                       case 'b':
+                               param.fp_type = S_IFBLK;
+                               break;
+                       case 'c':
+                               param.fp_type = S_IFCHR;
+                               break;
+                       case 'd':
+                               param.fp_type = S_IFDIR;
+                               break;
+                       case 'f':
+                               param.fp_type = S_IFREG;
+                               break;
+                       case 'l':
+                               param.fp_type = S_IFLNK;
+                               break;
+                       case 'p':
+                               param.fp_type = S_IFIFO;
+                               break;
+                       case 's':
+                               param.fp_type = S_IFSOCK;
+                               break;
+                       default:
+                               fprintf(stderr, "error: %s: bad type '%s'\n",
+                                       argv[0], optarg);
+                               ret = CMD_HELP;
+                               goto err;
+                       };
+                       break;
                 default:
                         ret = CMD_HELP;
                         goto err;
@@ -1283,7 +1296,7 @@ static int lfs_getstripe_internal(int argc, char **argv,
        };
        int c, rc;
 
-       param->maxdepth = 1;
+       param->fp_max_depth = 1;
        optind = 0;
        while ((c = getopt_long(argc, argv, "cdDghiLMoO:pqrRsSv",
                                long_opts, NULL)) != -1) {
@@ -1301,7 +1314,7 @@ static int lfs_getstripe_internal(int argc, char **argv,
                        param->quiet++;
                        break;
                case 'd':
-                       param->maxdepth = 0;
+                       param->fp_max_depth = 0;
                        break;
                case 'D':
                        param->get_default_lmv = 1;
@@ -1320,7 +1333,7 @@ static int lfs_getstripe_internal(int argc, char **argv,
 #endif
                        if (!(param->verbose & VERBOSE_DETAIL)) {
                                param->verbose |= VERBOSE_COUNT;
-                               param->maxdepth = 0;
+                               param->fp_max_depth = 0;
                        }
                        break;
 #if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(2, 9, 53, 0)
@@ -1333,7 +1346,7 @@ static int lfs_getstripe_internal(int argc, char **argv,
                case 'S':
                        if (!(param->verbose & VERBOSE_DETAIL)) {
                                param->verbose |= VERBOSE_SIZE;
-                               param->maxdepth = 0;
+                               param->fp_max_depth = 0;
                        }
                        break;
 #if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(2, 9, 53, 0)
@@ -1349,30 +1362,30 @@ static int lfs_getstripe_internal(int argc, char **argv,
 #endif
                        if (!(param->verbose & VERBOSE_DETAIL)) {
                                param->verbose |= VERBOSE_OFFSET;
-                               param->maxdepth = 0;
+                               param->fp_max_depth = 0;
                        }
                        break;
                case 'p':
                        if (!(param->verbose & VERBOSE_DETAIL)) {
                                param->verbose |= VERBOSE_POOL;
-                               param->maxdepth = 0;
+                               param->fp_max_depth = 0;
                        }
                        break;
                case 'g':
                        if (!(param->verbose & VERBOSE_DETAIL)) {
                                param->verbose |= VERBOSE_GENERATION;
-                               param->maxdepth = 0;
+                               param->fp_max_depth = 0;
                        }
                        break;
                case 'L':
                        if (!(param->verbose & VERBOSE_DETAIL)) {
                                param->verbose |= VERBOSE_LAYOUT;
-                               param->maxdepth = 0;
+                               param->fp_max_depth = 0;
                        }
                        break;
                case 'M':
                        if (!(param->verbose & VERBOSE_DETAIL))
-                               param->maxdepth = 0;
+                               param->fp_max_depth = 0;
                        param->verbose |= VERBOSE_MDTINDEX;
                        break;
                case 'R':
@@ -1387,7 +1400,7 @@ static int lfs_getstripe_internal(int argc, char **argv,
                return CMD_HELP;
 
        if (param->recursive)
-               param->maxdepth = -1;
+               param->fp_max_depth = -1;
 
        if (!param->verbose)
                param->verbose = VERBOSE_ALL;
@@ -1602,7 +1615,10 @@ static int lfs_rmentry(int argc, char **argv)
 
 static int lfs_mv(int argc, char **argv)
 {
-       struct  find_param param = { .maxdepth = -1, .mdtindex = -1};
+       struct  find_param param = {
+               .fp_max_depth = -1,
+               .mdtindex = -1,
+       };
        char   *end;
        int     c;
        int     rc = 0;
@@ -2658,7 +2674,7 @@ static void print_quota(char *mnt, struct if_quotactl *qctl, int type,
                char strbuf[32];
 
                 if (dqb->dqb_bhardlimit &&
-                    toqb(dqb->dqb_curspace) >= dqb->dqb_bhardlimit) {
+                   lustre_stoqb(dqb->dqb_curspace) >= dqb->dqb_bhardlimit) {
                         bover = 1;
                 } else if (dqb->dqb_bsoftlimit && dqb->dqb_btime) {
                         if (dqb->dqb_btime > now) {
@@ -2688,7 +2704,7 @@ static void print_quota(char *mnt, struct if_quotactl *qctl, int type,
                if (bover)
                        diff2str(dqb->dqb_btime, timebuf, now);
 
-               kbytes2str(toqb(dqb->dqb_curspace), strbuf, h);
+               kbytes2str(lustre_stoqb(dqb->dqb_curspace), strbuf, h);
                if (rc == -EREMOTEIO)
                        sprintf(numbuf[0], "%s*", strbuf);
                else
@@ -3154,7 +3170,8 @@ static int lfs_changelog(int argc, char **argv)
                         /* namespace rec includes parent and filename */
                        printf(" p="DFID" %.*s", PFID(&rec->cr_pfid),
                                rec->cr_namelen, rec->cr_name);
-               if (fid_is_sane(&rec->cr_sfid))
+
+               if (!fid_is_zero(&rec->cr_sfid))
                        printf(" s="DFID" sp="DFID" %.*s",
                                PFID(&rec->cr_sfid), PFID(&rec->cr_spfid),
                                changelog_rec_snamelen(rec),
@@ -3528,7 +3545,7 @@ static int lfs_hsm_action(int argc, char **argv)
                if ((hps == HPS_RUNNING) &&
                    (hua == HUA_ARCHIVE || hua == HUA_RESTORE))
                        printf("("LPX64 " bytes moved)\n", he.length);
-               else if ((he.offset + he.length) == OBD_OBJECT_EOF)
+               else if ((he.offset + he.length) == LUSTRE_EOF)
                        printf("(from "LPX64 " to EOF)\n", he.offset);
                else
                        printf("(from "LPX64 " to "LPX64")\n",
@@ -3823,3 +3840,7 @@ int main(int argc, char **argv)
         return rc < 0 ? -rc : rc;
 }
 
+#ifdef _LUSTRE_IDL_H_
+/* Everything we need here should be included by lustreapi.h. */
+# error "lfs should not depend on lustre_idl.h"
+#endif /* _LUSTRE_IDL_H_ */