[gfs2-utils] 02/02: mkfs.gfs2: Remove a stray semicolon
by pagure@pagure.io
This is an automated email from the git hooks/post-receive script.
andyp pushed a commit to branch master
in repository gfs2-utils.
commit 0e4b680e7dbb36c6a41a4be618378974089b92b4
Author: Andrew Price <anprice(a)redhat.com>
AuthorDate: Thu Jan 14 11:35:22 2021 +0000
mkfs.gfs2: Remove a stray semicolon
Signed-off-by: Andrew Price <anprice(a)redhat.com>
---
gfs2/mkfs/main_mkfs.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gfs2/mkfs/main_mkfs.c b/gfs2/mkfs/main_mkfs.c
index e6fc6532..573e0413 100644
--- a/gfs2/mkfs/main_mkfs.c
+++ b/gfs2/mkfs/main_mkfs.c
@@ -542,7 +542,7 @@ static int are_you_sure(void)
if (res == 0) /* No */
return 0;
/* Unrecognized input; go again. */
- };
+ }
}
static int choose_blocksize(struct mkfs_opts *opts, unsigned *pbsize)
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
3 years, 2 months
[gfs2-utils] 01/02: mkfs.gfs2: make are_you_sure EOF happy
by pagure@pagure.io
This is an automated email from the git hooks/post-receive script.
andyp pushed a commit to branch master
in repository gfs2-utils.
commit a236a21ab62858e679e304672ba0653f81646969
Author: Alexander Aring <aahringo(a)redhat.com>
AuthorDate: Wed Jan 13 12:36:46 2021 -0500
mkfs.gfs2: make are_you_sure EOF happy
This patch adds a check for getline() error, as the manpage states out
that -1 is returned in EOF case we answer such case and possible
other errors with no. If you currently press ctrl-d during this question
an endless loop of asking this question over and over again will occur.
However this patch changes to handle errors with no and prints a newline
so the user have a new clean shell prompt afterwards. If getline reads
zero characters .e.g '\n', the question is if we are sure is asked again.
Signed-off-by: Alexander Aring <aahringo(a)redhat.com>
Signed-off-by: Andrew Price <anprice(a)redhat.com>
---
gfs2/mkfs/main_mkfs.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/gfs2/mkfs/main_mkfs.c b/gfs2/mkfs/main_mkfs.c
index 5e34ca1f..e6fc6532 100644
--- a/gfs2/mkfs/main_mkfs.c
+++ b/gfs2/mkfs/main_mkfs.c
@@ -528,9 +528,14 @@ static int are_you_sure(void)
`locale -k noexpr` */
printf( _("Are you sure you want to proceed? [y/n] "));
ret = getline(&line, &len, stdin);
+ if (ret < 0) {
+ printf("\n");
+ free(line);
+ return 0;
+ }
res = rpmatch(line);
free(line);
- if (ret <= 0)
+ if (ret == 0)
continue;
if (res == 1) /* Yes */
return 1;
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
3 years, 2 months
[gfs2-utils] branch master updated (ace82dd1 -> 0e4b680e)
by pagure@pagure.io
This is an automated email from the git hooks/post-receive script.
andyp pushed a change to branch master
in repository gfs2-utils.
from ace82dd1 tunegfs2: Add support for fs format versions
new a236a21a mkfs.gfs2: make are_you_sure EOF happy
new 0e4b680e mkfs.gfs2: Remove a stray semicolon
The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
gfs2/mkfs/main_mkfs.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
3 years, 2 months
[gfs2-utils] 03/03: tunegfs2: Add support for fs format versions
by pagure@pagure.io
This is an automated email from the git hooks/post-receive script.
andyp pushed a commit to branch master
in repository gfs2-utils.
commit ace82dd1b1700ae93681cd61928c4c0f92c1fcfa
Author: Andrew Price <anprice(a)redhat.com>
AuthorDate: Thu Jan 7 13:25:06 2021 +0000
tunegfs2: Add support for fs format versions
Add a new -r option to change sb_fs_format. Only increasing the number
is supported. New tests added.
Signed-off-by: Andrew Price <anprice(a)redhat.com>
---
gfs2/libgfs2/libgfs2.h | 1 +
gfs2/man/tunegfs2.8 | 5 +++++
gfs2/tune/Makefile.am | 3 ++-
gfs2/tune/main.c | 18 +++++++++++++-----
gfs2/tune/super.c | 20 ++++++++++++++++++++
gfs2/tune/tunegfs2.h | 5 +++--
tests/Makefile.am | 3 ++-
tests/testsuite.at | 1 +
tests/tune.at | 17 +++++++++++++++++
9 files changed, 64 insertions(+), 9 deletions(-)
diff --git a/gfs2/libgfs2/libgfs2.h b/gfs2/libgfs2/libgfs2.h
index 6973c6f3..1f64b59e 100644
--- a/gfs2/libgfs2/libgfs2.h
+++ b/gfs2/libgfs2/libgfs2.h
@@ -327,6 +327,7 @@ struct metapath {
#define LGFS2_FS_FORMAT_MIN (1801)
#define LGFS2_FS_FORMAT_MAX (1802)
+#define LGFS2_FS_FORMAT_VALID(n) ((n) >= LGFS2_FS_FORMAT_MIN && (n) <= LGFS2_FS_FORMAT_MAX)
/* meta.c */
extern const struct lgfs2_metadata lgfs2_metadata[];
diff --git a/gfs2/man/tunegfs2.8 b/gfs2/man/tunegfs2.8
index c4446f44..660bf962 100644
--- a/gfs2/man/tunegfs2.8
+++ b/gfs2/man/tunegfs2.8
@@ -53,6 +53,11 @@ Set the filesystem UUID
Print out the information on the version of the tool.
+.TP
+\fB-r\fP \fI<version>\fR
+
+Set the filesystem format version.
+
.SH SEE ALSO
\fBgfs2\fP(5)
diff --git a/gfs2/tune/Makefile.am b/gfs2/tune/Makefile.am
index b03f609a..6c4bbe1f 100644
--- a/gfs2/tune/Makefile.am
+++ b/gfs2/tune/Makefile.am
@@ -10,10 +10,11 @@ tunegfs2_SOURCES = \
tunegfs2_CPPFLAGS = \
-D_FILE_OFFSET_BITS=64 \
-I$(top_srcdir)/gfs2/include \
- -I$(top_srcdir)/group/include
+ -I$(top_srcdir)/gfs2/libgfs2
tunegfs2_CFLAGS = \
$(uuid_CFLAGS)
tunegfs2_LDADD = \
+ $(top_builddir)/gfs2/libgfs2/libgfs2.la \
$(uuid_LIBS)
if HAVE_CHECK
diff --git a/gfs2/tune/main.c b/gfs2/tune/main.c
index 93f0f60c..d5998071 100644
--- a/gfs2/tune/main.c
+++ b/gfs2/tune/main.c
@@ -52,9 +52,9 @@ static void parse_mount_options(char *arg)
static void usage(char *name)
{
- printf("%s %s [-hlV] [-L <%s>] [-U <%s>] [-o <%s>] <%s>\n",
+ printf("%s %s [-hlV] [-L <%s>] [-U <%s>] [-o <%s>] [-r <%s>] <%s>\n",
_("Usage:"), basename(name), _("label"), _("UUID"),
- _("mount options"), _("device"));
+ _("mount options"), _("version"), _("device"));
}
static void version(void)
@@ -68,7 +68,7 @@ int main(int argc, char **argv)
int c, status;
memset(tfs, 0, sizeof(struct tunegfs2));
- while((c = getopt(argc, argv, "hL:U:lo:V")) != -1) {
+ while((c = getopt(argc, argv, "hL:U:lo:Vr:")) != -1) {
switch(c) {
case 'h':
usage(argv[0]);
@@ -90,6 +90,10 @@ int main(int argc, char **argv)
case 'V':
version();
return 0;
+ case 'r':
+ tfs->opt_format = 1;
+ tfs->format = optarg;
+ break;
default:
fprintf(stderr, _("Invalid option: %c\n"), c);
usage(argv[0]);
@@ -145,9 +149,13 @@ int main(int argc, char **argv)
if (status)
goto out;
}
-
+ if (tfs->opt_format) {
+ status = change_format(tfs, tfs->format);
+ if (status)
+ goto out;
+ }
if (tfs->opt_label || tfs->opt_uuid || tfs->opt_table ||
- tfs->opt_proto) {
+ tfs->opt_proto || tfs->opt_format) {
status = write_super(tfs);
if (status)
goto out;
diff --git a/gfs2/tune/super.c b/gfs2/tune/super.c
index f4b7d85b..c3029fd1 100644
--- a/gfs2/tune/super.c
+++ b/gfs2/tune/super.c
@@ -12,6 +12,7 @@
#define _(String) gettext(String)
#include <linux_endian.h>
#include <linux/gfs2_ondisk.h>
+#include <libgfs2.h>
#include "tunegfs2.h"
#ifdef GFS2_HAS_UUID
@@ -64,6 +65,7 @@ int print_super(const struct tunegfs2 *tfs)
}
#endif
printf( _("File system magic number: 0x%X\n"), be32_to_cpu(tfs->sb->sb_header.mh_magic));
+ printf(_("File system format version: %"PRIu32"\n"), be32_to_cpu(tfs->sb->sb_fs_format));
printf(_("Block size: %d\n"), be32_to_cpu(tfs->sb->sb_bsize));
printf(_("Block shift: %d\n"), be32_to_cpu(tfs->sb->sb_bsize_shift));
printf(_("Root inode: %llu\n"), (unsigned long long)be64_to_cpu(tfs->sb->sb_root_dir.no_addr));
@@ -150,3 +152,21 @@ int change_locktable(struct tunegfs2 *tfs, const char *locktable)
return 0;
}
+int change_format(struct tunegfs2 *tfs, const char *format)
+{
+ char *end;
+ long ln;
+
+ errno = 0;
+ ln = strtol(format, &end, 10);
+ if (errno || end == format || !LGFS2_FS_FORMAT_VALID(ln)) {
+ fprintf(stderr, _("Invalid format option '%s'\n"), format);
+ return EX_DATAERR;
+ }
+ if (ln < be32_to_cpu(tfs->sb->sb_fs_format)) {
+ fprintf(stderr, _("Regressing the filesystem format is not supported\n"));
+ return EX_DATAERR;
+ }
+ tfs->sb->sb_fs_format = cpu_to_be32(ln);
+ return 0;
+}
diff --git a/gfs2/tune/tunegfs2.h b/gfs2/tune/tunegfs2.h
index 3b28c58e..98c99696 100644
--- a/gfs2/tune/tunegfs2.h
+++ b/gfs2/tune/tunegfs2.h
@@ -1,8 +1,6 @@
#ifndef __GFS2_TUNE_DOT_H__
#define __GFS2_TUNE_DOT_H__
-#define GFS2_DEFAULT_BSIZE 4096
-
struct tunegfs2 {
char *devicename;
int fd;
@@ -13,11 +11,13 @@ struct tunegfs2 {
char *table;
char *proto;
char *mount_options;
+ char *format;
int opt_list;
int opt_label;
int opt_uuid;
int opt_proto;
int opt_table;
+ int opt_format;
};
extern int print_super(const struct tunegfs2 *);
@@ -26,6 +26,7 @@ extern int write_super(const struct tunegfs2 *);
extern int change_uuid(struct tunegfs2 *, const char *uuid);
extern int change_lockproto(struct tunegfs2 *, const char *label);
extern int change_locktable(struct tunegfs2 *, const char *label);
+extern int change_format(struct tunegfs2 *, const char *format);
#endif
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 11d848cd..9109cf39 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -52,7 +52,8 @@ TESTSUITE_AT = \
testsuite.at \
mkfs.at \
fsck.at \
- edit.at
+ edit.at \
+ tune.at
TESTSUITE = testsuite
diff --git a/tests/testsuite.at b/tests/testsuite.at
index 98102183..1c1dc9e5 100644
--- a/tests/testsuite.at
+++ b/tests/testsuite.at
@@ -51,3 +51,4 @@ AT_COLOR_TESTS
m4_include([mkfs.at])
m4_include([fsck.at])
m4_include([edit.at])
+m4_include([tune.at])
diff --git a/tests/tune.at b/tests/tune.at
new file mode 100644
index 00000000..b0158034
--- /dev/null
+++ b/tests/tune.at
@@ -0,0 +1,17 @@
+AT_TESTED([tunegfs2])
+AT_BANNER([tunegfs2 tests])
+
+AT_SETUP([Format version])
+AT_KEYWORDS(tunegfs2 tune)
+AT_CHECK([$GFS_MKFS -p lock_nolock -o format=1802 $GFS_TGT], 0, [ignore], [ignore])
+# Exit code 65 == EX_DATAERR (sysexits.h)
+AT_CHECK([tunegfs2 -r 0 $GFS_TGT], 65, [ignore], [ignore])
+# Regress not supported
+AT_CHECK([tunegfs2 -r 1801 $GFS_TGT], 65, [ignore], [ignore])
+# Format 1803 does not exist
+AT_CHECK([tunegfs2 -r 1803 $GFS_TGT], 65, [ignore], [ignore])
+# Normal version bump
+AT_CHECK([$GFS_MKFS -p lock_nolock -o format=1801 $GFS_TGT], 0, [ignore], [ignore])
+AT_CHECK([tunegfs2 -r 1802 $GFS_TGT], 0, [ignore], [ignore])
+AT_CHECK([fsck.gfs2 -n $GFS_TGT], 0, [ignore], [ignore])
+AT_CLEANUP
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
3 years, 2 months
[gfs2-utils] 02/03: fsck.gfs2: Enable checking of format 1802
by pagure@pagure.io
This is an automated email from the git hooks/post-receive script.
andyp pushed a commit to branch master
in repository gfs2-utils.
commit 1da2f61160dc2a37436807708d4852bcd28ddcde
Author: Andrew Price <anprice(a)redhat.com>
AuthorDate: Wed Jan 6 13:38:51 2021 +0000
fsck.gfs2: Enable checking of format 1802
Format 1802 introduces trusted.* xattrs with type 4. Since the
gfs2_ondisk.h kernel header may not match the booted kernel the validity
check is now hard coded.
Signed-off-by: Andrew Price <anprice(a)redhat.com>
---
gfs2/fsck/fsck.h | 2 +-
gfs2/fsck/pass1.c | 12 ++++++++++--
tests/fsck.at | 4 +++-
3 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/gfs2/fsck/fsck.h b/gfs2/fsck/fsck.h
index 877448c3..13dd7b37 100644
--- a/gfs2/fsck/fsck.h
+++ b/gfs2/fsck/fsck.h
@@ -4,7 +4,7 @@
#include "libgfs2.h"
#include "osi_tree.h"
-#define FSCK_MAX_FORMAT (1801)
+#define FSCK_MAX_FORMAT (1802)
#define FSCK_HASH_SHIFT (13)
#define FSCK_HASH_SIZE (1 << FSCK_HASH_SHIFT)
diff --git a/gfs2/fsck/pass1.c b/gfs2/fsck/pass1.c
index e6aec43e..88fc4dc4 100644
--- a/gfs2/fsck/pass1.c
+++ b/gfs2/fsck/pass1.c
@@ -998,6 +998,14 @@ static int ask_remove_eattr_entry(struct gfs2_sbd *sdp,
return 1;
}
+static int eatype_max(unsigned fs_format)
+{
+ int max = 4;
+ if (fs_format < 1802)
+ max = 3;
+ return max;
+}
+
static int check_eattr_entries(struct gfs2_inode *ip,
struct gfs2_buffer_head *leaf_bh,
struct gfs2_ea_header *ea_hdr,
@@ -1038,11 +1046,11 @@ static int check_eattr_entries(struct gfs2_inode *ip,
strncpy(ea_name, (char *)ea_hdr + sizeof(struct gfs2_ea_header),
ea_hdr->ea_name_len);
- if (!GFS2_EATYPE_VALID(ea_hdr->ea_type) &&
+ if (ea_hdr->ea_type > eatype_max(sdp->sd_sb.sb_fs_format) &&
((ea_hdr_prev) || (!ea_hdr_prev && ea_hdr->ea_type))){
/* Skip invalid entry */
log_err(_("EA (%s) type is invalid (%d > %d).\n"),
- ea_name, ea_hdr->ea_type, GFS2_EATYPE_LAST);
+ ea_name, ea_hdr->ea_type, eatype_max(sdp->sd_sb.sb_fs_format));
return ask_remove_eattr_entry(sdp, leaf_bh, ea_hdr,
ea_hdr_prev, 0, 0);
}
diff --git a/tests/fsck.at b/tests/fsck.at
index fab28a50..727108f4 100644
--- a/tests/fsck.at
+++ b/tests/fsck.at
@@ -59,11 +59,13 @@ AT_SETUP([gfs2 format versions])
AT_KEYWORDS(fsck.gfs2 fsck)
GFS_TGT_REGEN
AT_CHECK([mkfs.gfs2 -O -p lock_nolock ${GFS_TGT}], 0, [ignore], [ignore])
-AT_CHECK(GFS_RUN_OR_SKIP([echo "set sb { sb_fs_format: 1802 }" | gfs2l ${GFS_TGT}]), 0, [ignore], [ignore])
+AT_CHECK(GFS_RUN_OR_SKIP([echo "set sb { sb_fs_format: 1803 }" | gfs2l ${GFS_TGT}]), 0, [ignore], [ignore])
# Unsupported format, FSCK_USAGE == 16
AT_CHECK([fsck.gfs2 -y $GFS_TGT], 16, [ignore], [ignore])
# Format out of range
AT_CHECK(GFS_RUN_OR_SKIP([echo "set sb { sb_fs_format: 4242 }" | gfs2l ${GFS_TGT}]), 0, [ignore], [ignore])
AT_CHECK([fsck.gfs2 -y $GFS_TGT], 1, [ignore], [ignore])
AT_CHECK([fsck.gfs2 -n $GFS_TGT], 0, [ignore], [ignore])
+AT_CHECK([mkfs.gfs2 -O -p lock_nolock -o format=1802 ${GFS_TGT}], 0, [ignore], [ignore])
+AT_CHECK([fsck.gfs2 -n $GFS_TGT], 0, [ignore], [ignore])
AT_CLEANUP
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
3 years, 2 months
[gfs2-utils] 01/03: mkfs.gfs2: Add extended option for specifying
format version
by pagure@pagure.io
This is an automated email from the git hooks/post-receive script.
andyp pushed a commit to branch master
in repository gfs2-utils.
commit 5810d39c35df747e48086e7d9aa0df705a399750
Author: Andrew Price <anprice(a)redhat.com>
AuthorDate: Wed Jan 6 12:59:12 2021 +0000
mkfs.gfs2: Add extended option for specifying format version
Add -o format=<number> to allow testing of newer format versions. The
default value is taken from GFS2_FORMAT_FS in the
include/linux/gfs2_ondisk.h kernel header.
Signed-off-by: Andrew Price <anprice(a)redhat.com>
---
gfs2/fsck/initialize.c | 2 +-
gfs2/libgfs2/libgfs2.h | 5 ++++-
gfs2/libgfs2/structures.c | 4 ++--
gfs2/man/mkfs.gfs2.8 | 3 +++
gfs2/mkfs/main_mkfs.c | 26 +++++++++++++++++++++++++-
tests/mkfs.at | 10 ++++++++++
6 files changed, 45 insertions(+), 5 deletions(-)
diff --git a/gfs2/fsck/initialize.c b/gfs2/fsck/initialize.c
index ecda56e2..b5bcecfa 100644
--- a/gfs2/fsck/initialize.c
+++ b/gfs2/fsck/initialize.c
@@ -1291,7 +1291,7 @@ static int sb_repair(struct gfs2_sbd *sdp)
log_crit(_("Error reading root inode: %s\n"), strerror(errno));
return -1;
}
- lgfs2_sb_init(&sb, sdp->bsize);
+ lgfs2_sb_init(&sb, sdp->bsize, GFS2_FORMAT_FS);
strcpy(sb.sb_lockproto, GFS2_DEFAULT_LOCKPROTO);
strcpy(sb.sb_locktable, "unknown");
sb.sb_master_dir = sdp->master_dir->i_di.di_num;
diff --git a/gfs2/libgfs2/libgfs2.h b/gfs2/libgfs2/libgfs2.h
index e815b5d7..6973c6f3 100644
--- a/gfs2/libgfs2/libgfs2.h
+++ b/gfs2/libgfs2/libgfs2.h
@@ -325,6 +325,9 @@ struct metapath {
#define GFS2_MIN_RGSIZE (32)
#define GFS2_MAX_RGSIZE (2048)
+#define LGFS2_FS_FORMAT_MIN (1801)
+#define LGFS2_FS_FORMAT_MAX (1802)
+
/* meta.c */
extern const struct lgfs2_metadata lgfs2_metadata[];
extern const unsigned lgfs2_metadata_size;
@@ -676,7 +679,7 @@ static inline unsigned int rgrp_size(struct rgrp_tree *rgrp)
/* structures.c */
extern int build_master(struct gfs2_sbd *sdp);
-extern void lgfs2_sb_init(struct gfs2_sb *sb, unsigned bsize);
+extern void lgfs2_sb_init(struct gfs2_sb *sb, unsigned bsize, unsigned format);
extern int lgfs2_sb_write(const struct gfs2_sb *sb, int fd, const unsigned bsize);
extern int build_journal(struct gfs2_sbd *sdp, int j,
struct gfs2_inode *jindex);
diff --git a/gfs2/libgfs2/structures.c b/gfs2/libgfs2/structures.c
index 5cc2dd01..79095efc 100644
--- a/gfs2/libgfs2/structures.c
+++ b/gfs2/libgfs2/structures.c
@@ -53,13 +53,13 @@ int build_master(struct gfs2_sbd *sdp)
/**
* Initialise a gfs2_sb structure with sensible defaults.
*/
-void lgfs2_sb_init(struct gfs2_sb *sb, unsigned bsize)
+void lgfs2_sb_init(struct gfs2_sb *sb, unsigned bsize, unsigned format)
{
memset(sb, 0, sizeof(struct gfs2_sb));
sb->sb_header.mh_magic = GFS2_MAGIC;
sb->sb_header.mh_type = GFS2_METATYPE_SB;
sb->sb_header.mh_format = GFS2_FORMAT_SB;
- sb->sb_fs_format = GFS2_FORMAT_FS;
+ sb->sb_fs_format = format;
sb->sb_multihost_format = GFS2_FORMAT_MULTI;
sb->sb_bsize = bsize;
sb->sb_bsize_shift = ffs(bsize) - 1;
diff --git a/gfs2/man/mkfs.gfs2.8 b/gfs2/man/mkfs.gfs2.8
index 35e355a5..58742dea 100644
--- a/gfs2/man/mkfs.gfs2.8
+++ b/gfs2/man/mkfs.gfs2.8
@@ -86,6 +86,9 @@ probing the device or specified with the
and
.I sunit
extended options.
+.TP
+.BI format= <number>
+Set the filesystem format version. Testing only.
.RE
.TP
\fB-p\fP \fIprotocol\fR
diff --git a/gfs2/mkfs/main_mkfs.c b/gfs2/mkfs/main_mkfs.c
index 17643e59..5e34ca1f 100644
--- a/gfs2/mkfs/main_mkfs.c
+++ b/gfs2/mkfs/main_mkfs.c
@@ -81,6 +81,7 @@ static void print_ext_opts(void)
"swidth=N", _("Specify the stripe width of the device, overriding probed values"),
"sunit=N", _("Specify the stripe unit of the device, overriding probed values"),
"align=[0|1]", _("Disable or enable alignment of resource groups"),
+ "format=N", _("Specify the format version number"),
NULL, NULL
};
printf(_("Extended options:\n"));
@@ -118,6 +119,7 @@ struct mkfs_opts {
unsigned rgsize;
unsigned long sunit;
unsigned long swidth;
+ unsigned format;
uint64_t fssize;
int journals;
const char *lockproto;
@@ -137,6 +139,7 @@ struct mkfs_opts {
unsigned got_locktable:1;
unsigned got_device:1;
unsigned got_topol:1;
+ unsigned got_format:1;
unsigned override:1;
unsigned quiet:1;
@@ -158,6 +161,7 @@ static void opts_init(struct mkfs_opts *opts)
opts->locktable = "";
opts->confirm = 1;
opts->align = 1;
+ opts->format = GFS2_FORMAT_FS;
}
struct gfs2_inum *mkfs_journals = NULL;
@@ -290,6 +294,22 @@ static int parse_topology(struct mkfs_opts *opts, char *str)
return 0;
}
+static int parse_format(struct mkfs_opts *opts, char *str)
+{
+ unsigned long ln;
+
+ if (parse_ulong(opts, "format", str, &ln) != 0)
+ return -1;
+
+ if (ln < LGFS2_FS_FORMAT_MIN || ln > LGFS2_FS_FORMAT_MAX) {
+ fprintf(stderr, _("Invalid filesystem format: %s\n"), str);
+ return -1;
+ }
+ opts->format = ln;
+ opts->got_format = 1;
+ return 0;
+}
+
static int opt_parse_extended(char *str, struct mkfs_opts *opts)
{
char *opt;
@@ -316,6 +336,9 @@ static int opt_parse_extended(char *str, struct mkfs_opts *opts)
return -1;
opts->got_topol = (opts->dev.logical_sector_size != 0 &&
opts->dev.physical_sector_size != 0);
+ } else if (strcmp("format", key) == 0) {
+ if (parse_format(opts, val) != 0)
+ return -1;
} else if (strcmp("help", key) == 0) {
print_ext_opts();
return 1;
@@ -1129,7 +1152,7 @@ int main(int argc, char *argv[])
if (sbd_init(&sbd, &opts, bsize) != 0)
exit(-1);
- lgfs2_sb_init(&sb, bsize);
+ lgfs2_sb_init(&sb, bsize, opts.format);
if (opts.debug) {
printf(_("File system options:\n"));
printf(" bsize = %u\n", sbd.bsize);
@@ -1142,6 +1165,7 @@ int main(int argc, char *argv[])
printf(" fssize = %"PRIu64"\n", opts.fssize);
printf(" sunit = %lu\n", opts.sunit);
printf(" swidth = %lu\n", opts.swidth);
+ printf(" format = %u\n", opts.format);
}
rgs = rgs_init(&opts, &sbd);
if (rgs == NULL)
diff --git a/tests/mkfs.at b/tests/mkfs.at
index 73cdfee6..6d6d3bd1 100644
--- a/tests/mkfs.at
+++ b/tests/mkfs.at
@@ -31,6 +31,16 @@ AT_CHECK([$GFS_MKFS -p lock_nolock -c 0 $GFS_TGT], 255, [ignore], [ignore])
AT_CHECK([$GFS_MKFS -p lock_nolock -c 65 $GFS_TGT], 255, [ignore], [ignore])
AT_CLEANUP
+AT_SETUP([Format version validation])
+AT_KEYWORDS(mkfs.gfs2 mkfs)
+AT_CHECK([$GFS_MKFS -p lock_nolock -o format=-1 $GFS_TGT], 255, [ignore], [ignore])
+AT_CHECK([$GFS_MKFS -p lock_nolock -o format=0 $GFS_TGT], 255, [ignore], [ignore])
+AT_CHECK([$GFS_MKFS -p lock_nolock -o format=1800 $GFS_TGT], 255, [ignore], [ignore])
+AT_CHECK([$GFS_MKFS -p lock_nolock -o format=1801 $GFS_TGT], 0, [ignore], [ignore])
+AT_CHECK([$GFS_MKFS -p lock_nolock -o format=1802 $GFS_TGT], 0, [ignore], [ignore])
+AT_CHECK([$GFS_MKFS -p lock_nolock -o format=1803 $GFS_TGT], 255, [ignore], [ignore])
+AT_CLEANUP
+
AT_SETUP([Locking protocols])
AT_KEYWORDS(mkfs.gfs2 mkfs)
GFS_FSCK_CHECK([$GFS_MKFS -p lock_nolock $GFS_TGT])
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
3 years, 2 months
[gfs2-utils] branch master updated (957ed14e -> ace82dd1)
by pagure@pagure.io
This is an automated email from the git hooks/post-receive script.
andyp pushed a change to branch master
in repository gfs2-utils.
from 957ed14e mkfs.gfs2: Check for negative -j option
new 5810d39c mkfs.gfs2: Add extended option for specifying format version
new 1da2f611 fsck.gfs2: Enable checking of format 1802
new ace82dd1 tunegfs2: Add support for fs format versions
The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
gfs2/fsck/fsck.h | 2 +-
gfs2/fsck/initialize.c | 2 +-
gfs2/fsck/pass1.c | 12 ++++++++++--
gfs2/libgfs2/libgfs2.h | 6 +++++-
gfs2/libgfs2/structures.c | 4 ++--
gfs2/man/mkfs.gfs2.8 | 3 +++
gfs2/man/tunegfs2.8 | 5 +++++
gfs2/mkfs/main_mkfs.c | 26 +++++++++++++++++++++++++-
gfs2/tune/Makefile.am | 3 ++-
gfs2/tune/main.c | 18 +++++++++++++-----
gfs2/tune/super.c | 20 ++++++++++++++++++++
gfs2/tune/tunegfs2.h | 5 +++--
tests/Makefile.am | 3 ++-
tests/fsck.at | 4 +++-
tests/mkfs.at | 10 ++++++++++
tests/testsuite.at | 1 +
tests/tune.at | 17 +++++++++++++++++
17 files changed, 123 insertions(+), 18 deletions(-)
create mode 100644 tests/tune.at
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
3 years, 2 months