diff --git a/kmod/src/format.h b/kmod/src/format.h index 66bbf1c1..1482eeea 100644 --- a/kmod/src/format.h +++ b/kmod/src/format.h @@ -8,7 +8,7 @@ */ #define SCOUTFS_FORMAT_VERSION_MIN 1 #define SCOUTFS_FORMAT_VERSION_MIN_STR __stringify(SCOUTFS_FORMAT_VERSION_MIN) -#define SCOUTFS_FORMAT_VERSION_MAX 1 +#define SCOUTFS_FORMAT_VERSION_MAX 2 #define SCOUTFS_FORMAT_VERSION_MAX_STR __stringify(SCOUTFS_FORMAT_VERSION_MAX) /* statfs(2) f_type */ diff --git a/utils/src/change_format_version.c b/utils/src/change_format_version.c index 071e6303..1e5e1507 100644 --- a/utils/src/change_format_version.c +++ b/utils/src/change_format_version.c @@ -119,6 +119,16 @@ static int do_change_fmt_vers(struct change_fmt_vers_args *args) goto out; } + if (le64_to_cpu(meta_super->fmt_vers) > args->fmt_vers || + le64_to_cpu(data_super->fmt_vers) > args->fmt_vers) { + ret = -EPERM; + printf("Downgrade of Meta Format Version: %llu and Data Format Version: %llu to Format Version: %llu is not allowed\n", + le64_to_cpu(meta_super->fmt_vers), + le64_to_cpu(data_super->fmt_vers), + args->fmt_vers); + goto out; + } + if (le64_to_cpu(meta_super->fmt_vers) != args->fmt_vers) { meta_super->fmt_vers = cpu_to_le64(args->fmt_vers);