Browse Source

xfsprogs package update

Signed-off-by: basebuilder_pel7x64builder0 <basebuilder@powerel.org>
master
basebuilder_pel7x64builder0 5 years ago
parent
commit
31addb9657
  1. 128
      SOURCES/xfsprogs-4.10.0-xfs_db-fix-the-source-command-when-passed-as-a-c-opt.patch
  2. 10
      SOURCES/xfsprogs-4.10.0-xfs_metadump-ignore-0-entries.patch
  3. 12
      SOURCES/xfsprogs-4.11.0-xfs_repair-warn-about-dirty-log-with-n-option.patch
  4. 80
      SOURCES/xfsprogs-4.12.0-mkfs.xfs-allow-specification-of-0-data-stripe-width-.patch
  5. 88
      SOURCES/xfsprogs-4.12.0-xfs_db-improve-argument-naming-in-set_cur-and-set_io.patch
  6. 8
      SOURCES/xfsprogs-4.12.0-xfs_db-properly-set-inode-type.patch
  7. 6
      SOURCES/xfsprogs-4.12.0-xfs_db-update-buffer-size-when-new-type-is-set.patch
  8. 12
      SOURCES/xfsprogs-4.13.0-mkfs.xfs-Don-t-stagger-AG-for-a-single-disk.patch
  9. 10
      SOURCES/xfsprogs-4.13.0-xfs_repair-don-t-use-do_warn-for-normal-log-message.patch
  10. 55
      SOURCES/xfsprogs-4.14.0-db-increase-metadump-s-default-overly-long-extent-di.patch
  11. 35
      SOURCES/xfsprogs-4.15.0-xfs_copy-accept-CRC-version-of-ABTB_MAGIC-in-ASSERT.patch
  12. 37
      SOURCES/xfsprogs-4.15.0-xfs_db-fix-crash-when-field-list-selector-string-has.patch
  13. 97
      SOURCES/xfsprogs-4.15.0-xfsprogs-update-dead-urls.patch
  14. 16
      SOURCES/xfsprogs-4.16-xfs_repair-handle-corrupt-log.patch
  15. 194
      SOURCES/xfsprogs-4.17.0-xfs_io-add-label-command.patch
  16. 64
      SOURCES/xfsprogs-4.17.0-xfsprogs-be-careful-about-what-we-stat-in-platform_c.patch
  17. 51
      SOURCES/xfsprogs-4.18-repair-root-parent.patch
  18. 46
      SOURCES/xfsprogs-4.5.0-change-mkfs-options.patch
  19. 7
      SOURCES/xfsprogs-4.5.0-revert-AGFL-pack.patch
  20. 86
      SOURCES/xfsprogs-4.5.0-revert-xfs_db-sparse-inodes.patch
  21. 26
      SOURCES/xfsprogs-4.5.0-xfs_repair-exit-value-memory.patch
  22. 52
      SOURCES/xfsprogs-4.5.0-xfs_repair-quota-inodes.patch
  23. 16
      SOURCES/xfsprogs-4.5.0-xfs_repair-rtino-version.patch
  24. 9
      SOURCES/xfsprogs-4.7.0-defang-frag.patch
  25. 24
      SOURCES/xfsprogs-4.7.0-fix-agf-limit-errors.patch
  26. 76
      SOURCES/xfsprogs-4.7.0-quota-fixes.patch
  27. 18
      SOURCES/xfsprogs-4.8.0-replace-ustat.patch
  28. 22
      SOURCES/xfsprogs-4.8.0-xfs_copy-UUID.patch
  29. 12
      SOURCES/xfsprogs-4.8.0-xfs_repair-exit-with-status-2-if-log-dirtiness-is-un.patch
  30. 27
      SOURCES/xfsprogs-4.9-xfs_io-fix-m-option.patch
  31. 12
      SOURCES/xfsprogs-4.9.0-junk-attr-leaf-count-zero.patch
  32. 24
      SOURCES/xfsprogs-wrapper.h
  33. 43
      SPECS/xfsprogs.spec

128
SOURCES/xfsprogs-4.10.0-xfs_db-fix-the-source-command-when-passed-as-a-c-opt.patch

@ -0,0 +1,128 @@ @@ -0,0 +1,128 @@
From c8dc4235614292020f82a031545d66c000b455f9 Mon Sep 17 00:00:00 2001
From: "Darrick J. Wong" <darrick.wong@oracle.com>
Date: Wed, 25 Jan 2017 20:02:43 -0600
Subject: [PATCH] xfs_db: fix the 'source' command when passed as a -c option

The 'source' command is supposed to read commands out of a file and
execute them. This works great when done from an interactive command
line, but it doesn't work at all when invoked from the command line
because we never actually do anything with the opened file.

So don't load stdin into the input stack when we're only executing
command line options, and use that to decide if source_f is executing
from the command line so that we can actually run the input loop. We'll
use this for the per-field fuzzing xfstests.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
---
db/init.c | 2 +-
db/input.c | 43 +++++++++++++++++++++++++++++++++----------
2 files changed, 34 insertions(+), 11 deletions(-)

Index: xfsprogs-4.5.0/db/init.c
===================================================================
--- xfsprogs-4.5.0.orig/db/init.c
+++ xfsprogs-4.5.0/db/init.c
@@ -192,7 +192,6 @@ main(
char **v;
int start_iocur_sp;
- pushfile(stdin);
init(argc, argv);
start_iocur_sp = iocur_sp;
@@ -207,6 +206,7 @@ main(
goto close_devices;
}
+ pushfile(stdin);
while (!done) {
if ((input = fetchline()) == NULL)
break;
Index: xfsprogs-4.5.0/db/input.c
===================================================================
--- xfsprogs-4.5.0.orig/db/input.c
+++ xfsprogs-4.5.0/db/input.c
@@ -156,7 +156,7 @@ fetchline_internal(void)
rval = NULL;
for (rlen = iscont = 0; ; ) {
- if (inputstacksize == 1) {
+ if (curinput == stdin) {
if (iscont)
dbprintf("... ");
else
@@ -181,18 +181,24 @@ fetchline_internal(void)
}
if (ferror(curinput) || feof(curinput) ||
(len = strlen(buf)) == 0) {
- popfile();
- if (curinput == NULL) {
+ /*
+ * No more input at this inputstack level; pop
+ * our fd off and return so that a lower
+ * level fetchline can handle us. If this was
+ * an interactive session, print a newline
+ * because ^D doesn't emit one.
+ */
+ if (curinput == stdin)
dbprintf("\n");
- return NULL;
- }
+
+ popfile();
iscont = 0;
rlen = 0;
if (rval) {
xfree(rval);
rval = NULL;
}
- continue;
+ return NULL;
}
if (inputstacksize == 1)
logprintf("%s", buf);
@@ -225,7 +231,9 @@ fetchline(void)
if (inputstacksize == 1) {
line = readline(get_prompt());
- if (line && *line) {
+ if (!line)
+ dbprintf("\n");
+ else if (line && *line) {
add_history(line);
logprintf("%s", line);
}
@@ -314,12 +322,27 @@ source_f(
char **argv)
{
FILE *f;
+ int c, done = 0;
+ char *input;
+ char **v;
f = fopen(argv[1], "r");
- if (f == NULL)
+ if (f == NULL) {
dbprintf(_("can't open %s\n"), argv[0]);
- else
- pushfile(f);
+ return 0;
+ }
+
+ /* Run the sourced commands now. */
+ pushfile(f);
+ while (!done) {
+ if ((input = fetchline_internal()) == NULL)
+ break;
+ v = breakline(input, &c);
+ if (c)
+ done = command(c, v);
+ doneline(input, v);
+ }
+
return 0;
}

10
SOURCES/xfsprogs-4.10.0-xfs_metadump-ignore-0-entries.patch

@ -24,12 +24,12 @@ index 38519f1..66952f6 100644 @@ -24,12 +24,12 @@ index 38519f1..66952f6 100644
--- a/db/metadump.c
+++ b/db/metadump.c
@@ -1654,7 +1654,8 @@ process_attr_block(
xfs_attr3_leaf_hdr_from_disk(mp->m_attr_geo, &hdr, leaf);
xfs_attr3_leaf_hdr_from_disk(mp->m_attr_geo, &hdr, leaf);
nentries = hdr.count;
nentries = hdr.count;
- if (nentries * sizeof(xfs_attr_leaf_entry_t) +
+ if (nentries == 0 ||
+ nentries * sizeof(xfs_attr_leaf_entry_t) +
xfs_attr3_leaf_hdr_size(leaf) >
XFS_ATTR3_RMT_BUF_SPACE(mp, bs)) {
if (show_warnings)
xfs_attr3_leaf_hdr_size(leaf) >
XFS_ATTR3_RMT_BUF_SPACE(mp, bs)) {
if (show_warnings)

12
SOURCES/xfsprogs-4.11.0-xfs_repair-warn-about-dirty-log-with-n-option.patch

@ -19,14 +19,14 @@ Index: xfsprogs-4.5.0/repair/phase2.c @@ -19,14 +19,14 @@ Index: xfsprogs-4.5.0/repair/phase2.c
--- xfsprogs-4.5.0.orig/repair/phase2.c
+++ xfsprogs-4.5.0/repair/phase2.c
@@ -89,11 +89,16 @@ zero_log(
_("zero_log: head block %" PRId64 " tail block %" PRId64 "\n"),
head_blk, tail_blk);
}
_("zero_log: head block %" PRId64 " tail block %" PRId64 "\n"),
head_blk, tail_blk);
}
- if (!no_modify && head_blk != tail_blk) {
- if (zap_log) {
+ if (head_blk != tail_blk) {
+ if (!no_modify && zap_log) {
do_warn(_(
do_warn(_(
"ALERT: The filesystem has valuable metadata changes in a log which is being\n"
"destroyed because the -L option was used.\n"));
+ } else if (no_modify) {
@ -34,6 +34,6 @@ Index: xfsprogs-4.5.0/repair/phase2.c @@ -34,6 +34,6 @@ Index: xfsprogs-4.5.0/repair/phase2.c
+"ALERT: The filesystem has valuable metadata changes in a log which is being\n"
+"ignored because the -n option was used. Expect spurious inconsistencies\n"
+"which may be resolved by first mounting the filesystem to replay the log.\n"));
} else {
do_warn(_(
} else {
do_warn(_(
"ERROR: The filesystem has valuable metadata changes in a log which needs to\n"

80
SOURCES/xfsprogs-4.12.0-mkfs.xfs-allow-specification-of-0-data-stripe-width-.patch

@ -25,62 +25,62 @@ Index: xfsprogs-rhel7.5/mkfs/xfs_mkfs.c @@ -25,62 +25,62 @@ Index: xfsprogs-rhel7.5/mkfs/xfs_mkfs.c
--- xfsprogs-rhel7.5.orig/mkfs/xfs_mkfs.c
+++ xfsprogs-rhel7.5/mkfs/xfs_mkfs.c
@@ -909,6 +909,7 @@ main(
int dsw;
int dsunit;
int dswidth;
int dsw;
int dsunit;
int dswidth;
+ int dsflag;
int force_overwrite;
struct fsxattr fsx;
int iaflag;
int force_overwrite;
struct fsxattr fsx;
int iaflag;
@@ -1012,7 +1013,7 @@ main(
dfile = logfile = rtfile = NULL;
dsize = logsize = rtsize = rtextsize = protofile = NULL;
dsu = dsw = dsunit = dswidth = lalign = lsu = lsunit = 0;
dfile = logfile = rtfile = NULL;
dsize = logsize = rtsize = rtextsize = protofile = NULL;
dsu = dsw = dsunit = dswidth = lalign = lsu = lsunit = 0;
- nodsflag = norsflag = 0;
+ dsflag = nodsflag = norsflag = 0;
force_overwrite = 0;
worst_freelist = 0;
lazy_sb_counters = 1;
force_overwrite = 0;
worst_freelist = 0;
lazy_sb_counters = 1;
@@ -1137,6 +1138,7 @@ main(
exit(1);
}
dsunit = cvtnum(0, 0, value);
exit(1);
}
dsunit = cvtnum(0, 0, value);
+ dsflag = 1;
break;
case D_SWIDTH:
if (!value || *value == '\0')
break;
case D_SWIDTH:
if (!value || *value == '\0')
@@ -1153,6 +1155,7 @@ main(
exit(1);
}
dswidth = cvtnum(0, 0, value);
exit(1);
}
dswidth = cvtnum(0, 0, value);
+ dsflag = 1;
break;
case D_SU:
if (!value || *value == '\0')
break;
case D_SU:
if (!value || *value == '\0')
@@ -1164,6 +1167,7 @@ main(
D_SU);
dsu = cvtnum(
blocksize, sectorsize, value);
D_SU);
dsu = cvtnum(
blocksize, sectorsize, value);
+ dsflag = 1;
break;
case D_SW:
if (!value || *value == '\0')
break;
case D_SW:
if (!value || *value == '\0')
@@ -1180,6 +1184,7 @@ main(
exit(1);
}
dsw = cvtnum(0, 0, value);
exit(1);
}
dsw = cvtnum(0, 0, value);
+ dsflag = 1;
break;
case D_NOALIGN:
if (dsu)
break;
case D_NOALIGN:
if (dsu)
@@ -2078,6 +2083,10 @@ _("warning: sparse inodes not supported
calc_stripe_factors(dsu, dsw, sectorsize, lsu, lsectorsize,
&dsunit, &dswidth, &lsunit);
calc_stripe_factors(dsu, dsw, sectorsize, lsu, lsectorsize,
&dsunit, &dswidth, &lsunit);
+ /* If sunit & swidth were manually specified as 0, same as noalign */
+ if (dsflag && !dsunit && !dswidth)
+ nodsflag = 1;
+
xi.setblksize = sectorsize;
xi.setblksize = sectorsize;
/*
/*

88
SOURCES/xfsprogs-4.12.0-xfs_db-improve-argument-naming-in-set_cur-and-set_io.patch

@ -32,62 +32,62 @@ Index: xfsprogs-rhel7.5/db/io.c @@ -32,62 +32,62 @@ Index: xfsprogs-rhel7.5/db/io.c
+ const typ_t *type,
+ xfs_daddr_t blknum,
+ int len,
int ring_flag,
bbmap_t *bbmap)
int ring_flag,
bbmap_t *bbmap)
{
@@ -497,14 +497,13 @@ set_cur(
xfs_ino_t dirino;
xfs_ino_t ino;
__uint16_t mode;
xfs_ino_t dirino;
xfs_ino_t ino;
__uint16_t mode;
- const struct xfs_buf_ops *ops = t ? t->bops : NULL;
+ const struct xfs_buf_ops *ops = type ? type->bops : NULL;
if (iocur_sp < 0) {
dbprintf(_("set_cur no stack element to set\n"));
return;
}
if (iocur_sp < 0) {
dbprintf(_("set_cur no stack element to set\n"));
return;
}
-
ino = iocur_top->ino;
dirino = iocur_top->dirino;
mode = iocur_top->mode;
ino = iocur_top->ino;
dirino = iocur_top->dirino;
mode = iocur_top->mode;
@@ -514,7 +513,7 @@ set_cur(
if (bbmap) {
if (bbmap) {
#ifdef DEBUG_BBMAP
int i;
int i;
- printf(_("xfs_db got a bbmap for %lld\n"), (long long)d);
+ printf(_("xfs_db got a bbmap for %lld\n"), (long long)blknum);
printf(_("\tblock map"));
for (i = 0; i < bbmap->nmaps; i++)
printf(" %lld:%d", (long long)bbmap->b[i].bm_bn,
printf(_("\tblock map"));
for (i = 0; i < bbmap->nmaps; i++)
printf(" %lld:%d", (long long)bbmap->b[i].bm_bn,
@@ -528,7 +527,7 @@ set_cur(
bp = libxfs_readbuf_map(mp->m_ddev_targp, bbmap->b,
bbmap->nmaps, 0, ops);
} else {
bp = libxfs_readbuf_map(mp->m_ddev_targp, bbmap->b,
bbmap->nmaps, 0, ops);
} else {
- bp = libxfs_readbuf(mp->m_ddev_targp, d, c, 0, ops);
+ bp = libxfs_readbuf(mp->m_ddev_targp, blknum, len, 0, ops);
iocur_top->bbmap = NULL;
}
iocur_top->bbmap = NULL;
}
@@ -544,13 +543,13 @@ set_cur(
if (!ops)
bp->b_flags |= LIBXFS_B_UNCHECKED;
if (!ops)
bp->b_flags |= LIBXFS_B_UNCHECKED;
- iocur_top->bb = d;
- iocur_top->blen = c;
+ iocur_top->bb = blknum;
+ iocur_top->blen = len;
iocur_top->boff = 0;
iocur_top->data = iocur_top->buf;
iocur_top->boff = 0;
iocur_top->data = iocur_top->buf;
- iocur_top->len = BBTOB(c);
- iocur_top->off = d << BBSHIFT;
- iocur_top->typ = cur_typ = t;
+ iocur_top->len = BBTOB(len);
+ iocur_top->off = blknum << BBSHIFT;
+ iocur_top->typ = cur_typ = type;
iocur_top->ino = ino;
iocur_top->dirino = dirino;
iocur_top->mode = mode;
iocur_top->ino = ino;
iocur_top->dirino = dirino;
iocur_top->mode = mode;
@@ -564,23 +563,24 @@ set_cur(
void
@ -95,38 +95,38 @@ Index: xfsprogs-rhel7.5/db/io.c @@ -95,38 +95,38 @@ Index: xfsprogs-rhel7.5/db/io.c
- const typ_t *t)
+ const typ_t *type)
{
struct xfs_buf *bp = iocur_top->bp;
struct xfs_buf *bp = iocur_top->bp;
/* adjust buffer size for types with fields & hence fsize() */
/* adjust buffer size for types with fields & hence fsize() */
- if (t->fields) {
+ if (type->fields) {
int bb_count; /* type's size in basic blocks */
int bb_count; /* type's size in basic blocks */
- bb_count = BTOBB(byteize(fsize(t->fields, iocur_top->data, 0, 0)));
- set_cur(t, iocur_top->bb, bb_count, DB_RING_IGN, NULL);
+ bb_count = BTOBB(byteize(fsize(type->fields,
+ iocur_top->data, 0, 0)));
+ set_cur(type, iocur_top->bb, bb_count, DB_RING_IGN, NULL);
}
}
- iocur_top->typ = t;
+ iocur_top->typ = type;
/* verify the buffer if the type has one. */
if (!bp)
return;
/* verify the buffer if the type has one. */
if (!bp)
return;
- if (!t->bops) {
+ if (!type->bops) {
bp->b_ops = NULL;
bp->b_flags |= LIBXFS_B_UNCHECKED;
return;
bp->b_ops = NULL;
bp->b_flags |= LIBXFS_B_UNCHECKED;
return;
@@ -588,7 +588,7 @@ set_iocur_type(
if (!(bp->b_flags & LIBXFS_B_UPTODATE))
return;
bp->b_error = 0;
if (!(bp->b_flags & LIBXFS_B_UPTODATE))
return;
bp->b_error = 0;
- bp->b_ops = t->bops;
+ bp->b_ops = type->bops;
bp->b_ops->verify_read(bp);
bp->b_flags &= ~LIBXFS_B_UNCHECKED;
bp->b_ops->verify_read(bp);
bp->b_flags &= ~LIBXFS_B_UNCHECKED;
}
Index: xfsprogs-rhel7.5/db/io.h
===================================================================

8
SOURCES/xfsprogs-4.12.0-xfs_db-properly-set-inode-type.patch

@ -35,7 +35,7 @@ Index: xfsprogs-rhel7.5/db/io.c @@ -35,7 +35,7 @@ Index: xfsprogs-rhel7.5/db/io.c
+++ xfsprogs-rhel7.5/db/io.c
@@ -567,6 +567,22 @@ set_iocur_type(
{
struct xfs_buf *bp = iocur_top->bp;
struct xfs_buf *bp = iocur_top->bp;
+ /* Inodes are special; verifier checks all inodes in the chunk */
+ if (type->typnm == TYP_INODE) {
@ -53,6 +53,6 @@ Index: xfsprogs-rhel7.5/db/io.c @@ -53,6 +53,6 @@ Index: xfsprogs-rhel7.5/db/io.c
+ return;
+ }
+
/* adjust buffer size for types with fields & hence fsize() */
if (type->fields) {
int bb_count; /* type's size in basic blocks */
/* adjust buffer size for types with fields & hence fsize() */
if (type->fields) {
int bb_count; /* type's size in basic blocks */

6
SOURCES/xfsprogs-4.12.0-xfs_db-update-buffer-size-when-new-type-is-set.patch

@ -51,7 +51,7 @@ Index: xfsprogs-rhel7.5/db/io.c @@ -51,7 +51,7 @@ Index: xfsprogs-rhel7.5/db/io.c
static void pop_help(void);
@@ -567,6 +568,13 @@ set_iocur_type(
{
struct xfs_buf *bp = iocur_top->bp;
struct xfs_buf *bp = iocur_top->bp;
+ /* adjust buffer size for types with fields & hence fsize() */
+ if (t->fields) {
@ -60,6 +60,6 @@ Index: xfsprogs-rhel7.5/db/io.c @@ -60,6 +60,6 @@ Index: xfsprogs-rhel7.5/db/io.c
+ bb_count = BTOBB(byteize(fsize(t->fields, iocur_top->data, 0, 0)));
+ set_cur(t, iocur_top->bb, bb_count, DB_RING_IGN, NULL);
+ }
iocur_top->typ = t;
iocur_top->typ = t;
/* verify the buffer if the type has one. */
/* verify the buffer if the type has one. */

12
SOURCES/xfsprogs-4.13.0-mkfs.xfs-Don-t-stagger-AG-for-a-single-disk.patch

@ -42,13 +42,13 @@ Index: xfsprogs-rhel7.5/mkfs/xfs_mkfs.c @@ -42,13 +42,13 @@ Index: xfsprogs-rhel7.5/mkfs/xfs_mkfs.c
--- xfsprogs-rhel7.5.orig/mkfs/xfs_mkfs.c
+++ xfsprogs-rhel7.5/mkfs/xfs_mkfs.c
@@ -2308,7 +2308,9 @@ reported by the device (%u).\n"),
}
}
}
}
}
}
- if (dswidth && ((agsize % dswidth) == 0) && (agcount > 1)) {
+ if (dswidth && ((agsize % dswidth) == 0)
+ && (dswidth != dsunit)
+ && (agcount > 1)) {
/* This is a non-optimal configuration because all AGs
* start on the same disk in the stripe. Changing
* the AG size by one sunit will guarantee that this
/* This is a non-optimal configuration because all AGs
* start on the same disk in the stripe. Changing
* the AG size by one sunit will guarantee that this

10
SOURCES/xfsprogs-4.13.0-xfs_repair-don-t-use-do_warn-for-normal-log-message.patch

@ -25,10 +25,10 @@ Index: xfsprogs-4.5.0/repair/phase2.c @@ -25,10 +25,10 @@ Index: xfsprogs-4.5.0/repair/phase2.c
+++ xfsprogs-4.5.0/repair/phase2.c
@@ -85,7 +85,7 @@ zero_log(
"attempt a repair.\n"));
} else {
if (verbose) {
} else {
if (verbose) {
- do_warn(
+ do_log(
_("zero_log: head block %" PRId64 " tail block %" PRId64 "\n"),
head_blk, tail_blk);
}
_("zero_log: head block %" PRId64 " tail block %" PRId64 "\n"),
head_blk, tail_blk);
}

55
SOURCES/xfsprogs-4.14.0-db-increase-metadump-s-default-overly-long-extent-di.patch

@ -0,0 +1,55 @@ @@ -0,0 +1,55 @@
From 921c30674e9bc719e7c2747deb6deb04be2adb4b Mon Sep 17 00:00:00 2001
From: "Darrick J. Wong" <darrick.wong@oracle.com>
Date: Thu, 9 Nov 2017 11:35:22 -0600
Subject: [PATCH] db: increase metadump's default overly long extent discard
threshold

Back in 88b8e1d6d7 ("Make xfs_metadump more robust against bad data"),
metadump grew the ability to ignore a directory extent if it was longer
than 20 blocks. Presumably this was to protect metadump from dumping
absurdly long extents resulting from bmbt corruption, but it's certainly
possible to create a directory with an extent longer than 20 blocks.
Hilariously, the discards happen with no warning unless the caller
explicitly set -w.

This was raised to 1000 blocks in 7431d134fe8 ("Increase default maximum
extent size for xfs_metadump when copying..."), but it's still possible
to create a directory with an extent longer than 1000 blocks.

Increase the threshold to MAXEXTLEN blocks because it's totally valid
for the filesystem to create extents up to that length.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
---
db/metadump.c | 2 +-
man/man8/xfs_metadump.8 | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)

Index: xfsprogs-4.5.0/db/metadump.c
===================================================================
--- xfsprogs-4.5.0.orig/db/metadump.c
+++ xfsprogs-4.5.0/db/metadump.c
@@ -32,7 +32,7 @@
#include "field.h"
#include "dir2.h"
-#define DEFAULT_MAX_EXT_SIZE 1000
+#define DEFAULT_MAX_EXT_SIZE MAXEXTLEN
/*
* It's possible that multiple files in a directory (or attributes
Index: xfsprogs-4.5.0/man/man8/xfs_metadump.8
===================================================================
--- xfsprogs-4.5.0.orig/man/man8/xfs_metadump.8
+++ xfsprogs-4.5.0/man/man8/xfs_metadump.8
@@ -114,7 +114,7 @@ copied.
.B \-m
Set the maximum size of an allowed metadata extent. Extremely large metadata
extents are likely to be corrupt, and will be skipped if they exceed
-this value. The default size is 1000 blocks.
+this value. The default size is 2097151 blocks.
.TP
.B \-o
Disables obfuscation of file names and extended attributes.

35
SOURCES/xfsprogs-4.15.0-xfs_copy-accept-CRC-version-of-ABTB_MAGIC-in-ASSERT.patch

@ -0,0 +1,35 @@ @@ -0,0 +1,35 @@
From d0ca5d8a3875a423b522ee9767cbeb3d47bed420 Mon Sep 17 00:00:00 2001
From: Eric Sandeen <sandeen@redhat.com>
Date: Thu, 25 Jan 2018 13:55:01 -0600
Subject: [PATCH] xfs_copy: accept CRC version of ABTB_MAGIC in ASSERT

Not sure how this was missed for so long, but to handle CRC
filesystems, this ASSERT on block magic must accept CRC magic
as well.

Reported-by: Radek Burkat <radek@pinkbike.com>
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Bill O'Donnell <billodo@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
---
copy/xfs_copy.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/copy/xfs_copy.c b/copy/xfs_copy.c
index fb37375..16ee4d9 100644
--- a/copy/xfs_copy.c
+++ b/copy/xfs_copy.c
@@ -1140,7 +1140,8 @@ main(int argc, char **argv)
((char *) btree_buf.data +
pos - btree_buf.position);
- ASSERT(be32_to_cpu(block->bb_magic) == XFS_ABTB_MAGIC);
+ ASSERT(be32_to_cpu(block->bb_magic) == XFS_ABTB_MAGIC ||
+ be32_to_cpu(block->bb_magic) == XFS_ABTB_CRC_MAGIC);
}
/*
--
2.9.5

37
SOURCES/xfsprogs-4.15.0-xfs_db-fix-crash-when-field-list-selector-string-has.patch

@ -0,0 +1,37 @@ @@ -0,0 +1,37 @@
From 945e47e2fcc5d1cec693122286da06d8ab829c52 Mon Sep 17 00:00:00 2001
From: "Darrick J. Wong" <darrick.wong@oracle.com>
Date: Thu, 4 Jan 2018 13:58:29 -0600
Subject: [PATCH] xfs_db: fix crash when field list selector string has
trailing slash

If I run the following command:

xfs_db /dev/sdf -x -c 'agf 0' -c 'addr refcntroot' -c 'addr ptrs[1]\'

it errors out with "bad character in field \" and
then ftok_free crashes on an invalid free() because picking up the
previous token (the closing bracket) xrealloc'd the token array to be 5
elements long but never set the last element's tok pointer.
Consequently the ftok_free tries to free whatever garbage pointer is in
that last element and kaboom.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Eric Sandeen <sandeen@sandeen.net>
[sandeen: slightly clarify commit log]
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
---
db/flist.c | 1 +
1 file changed, 1 insertion(+)

Index: xfsprogs-4.5.0/db/flist.c
===================================================================
--- xfsprogs-4.5.0.orig/db/flist.c
+++ xfsprogs-4.5.0/db/flist.c
@@ -400,6 +400,7 @@ flist_split(
strncpy(a, s, l);
a[l] = '\0';
v = xrealloc(v, (nv + 2) * sizeof(*v));
+ v[nv + 1].tok = NULL;
v[nv].tok = a;
v[nv].tokty = t;
nv++;

97
SOURCES/xfsprogs-4.15.0-xfsprogs-update-dead-urls.patch

@ -0,0 +1,97 @@ @@ -0,0 +1,97 @@
From 50663dc149619aef23bcb43e6fdf48bc60487374 Mon Sep 17 00:00:00 2001
From: "Darrick J. Wong" <darrick.wong@oracle.com>
Date: Thu, 25 Jan 2018 13:55:01 -0600
Subject: [PATCH] xfsprogs: update dead urls

Since oss.sgi.com is dead and xfs.org is slowly migrating to
xfs.wiki.kernel.org, update all the documentation links to point to the
current landing pads.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
---
README | 2 +-
debian/control | 6 +++---
debian/copyright | 2 +-
debian/watch | 2 +-
4 files changed, 6 insertions(+), 6 deletions(-)

Index: xfsprogs-4.5.0/README
===================================================================
--- xfsprogs-4.5.0.orig/README
+++ xfsprogs-4.5.0/README
@@ -9,4 +9,4 @@ and references to other XFS manual pages
For more information and details on how to contribute to the
XFS project see the web pages at:
- http://oss.sgi.com/projects/xfs/
+ https://xfs.wiki.kernel.org/
Index: xfsprogs-4.5.0/debian/control
===================================================================
--- xfsprogs-4.5.0.orig/debian/control
+++ xfsprogs-4.5.0/debian/control
@@ -24,7 +24,7 @@ Description: Utilities for managing the
Btrees (directories, extents, free space) to aid both performance
and scalability.
.
- Refer to the documentation at http://oss.sgi.com/projects/xfs/
+ Refer to the documentation at https://xfs.wiki.kernel.org/
for complete details.
Package: xfslibs-dev
Index: xfsprogs-4.5.0/debian/copyright
===================================================================
--- xfsprogs-4.5.0.orig/debian/copyright
+++ xfsprogs-4.5.0/debian/copyright
@@ -1,7 +1,7 @@
This package was debianized by Nathan Scott nathans@debian.org on
Sun, 19 Nov 2000 07:37:09 -0500.
-It can be downloaded from ftp://oss.sgi.com/projects/xfs/download/
+It can be downloaded from https://www.kernel.org/pub/linux/utils/fs/xfs/xfsprogs/
Copyright:
Index: xfsprogs-4.5.0/debian/watch
===================================================================
--- xfsprogs-4.5.0.orig/debian/watch
+++ xfsprogs-4.5.0/debian/watch
@@ -1,3 +1,3 @@
version=3
opts=uversionmangle=s/(\d)[_\.\-\+]?((RC|rc|pre|dev|beta|alpha)\d*)$/$1~$2/ \
-ftp://oss.sgi.com/projects/xfs/cmd_tars/xfsprogs-(.+)\.tar\.gz
+https://www.kernel.org/pub/linux/utils/fs/xfs/xfsprogs/xfsprogs-(.+)\.tar\.xz
Index: xfsprogs-4.5.0/libxfs/util.c
===================================================================
--- xfsprogs-4.5.0.orig/libxfs/util.c
+++ xfsprogs-4.5.0/libxfs/util.c
@@ -690,7 +690,7 @@ libxfs_fs_repair_cmn_err(int level, xfs_
fprintf(stderr, " This is a bug.\n");
fprintf(stderr, "%s version %s\n", progname, VERSION);
fprintf(stderr, "Please capture the filesystem metadata with "
- "xfs_metadump and\nreport it to xfs@oss.sgi.com.\n");
+ "xfs_metadump and\nreport it to linux-xfs@vger.kernel.org.\n");
va_end(ap);
}
Index: xfsprogs-4.5.0/man/man8/xfs_mdrestore.8
===================================================================
--- xfsprogs-4.5.0.orig/man/man8/xfs_mdrestore.8
+++ xfsprogs-4.5.0/man/man8/xfs_mdrestore.8
@@ -51,4 +51,4 @@ returns an exit code of 0 if all the met
.BR xfs (5)
.SH BUGS
Email bug reports to
-.BR xfs@oss.sgi.com .
+.BR linux-xfs@vger.kernel.org .
Index: xfsprogs-4.5.0/man/man8/xfs_metadump.8
===================================================================
--- xfsprogs-4.5.0.orig/man/man8/xfs_metadump.8
+++ xfsprogs-4.5.0/man/man8/xfs_metadump.8
@@ -154,4 +154,4 @@ command.
.BR xfs (5)
.SH BUGS
Email bug reports to
-.BR xfs@oss.sgi.com .
+.BR linux-xfs@vger.kernel.org .

16
SOURCES/xfsprogs-4.16-xfs_repair-handle-corrupt-log.patch

@ -12,17 +12,17 @@ Index: xfsprogs-4.5.0/repair/phase2.c @@ -12,17 +12,17 @@ Index: xfsprogs-4.5.0/repair/phase2.c
--- xfsprogs-4.5.0.orig/repair/phase2.c
+++ xfsprogs-4.5.0/repair/phase2.c
@@ -78,12 +78,13 @@ zero_log(
do_warn(
_("zero_log: cannot find log head/tail (xlog_find_tail=%d)\n"),
error);
do_warn(
_("zero_log: cannot find log head/tail (xlog_find_tail=%d)\n"),
error);
- if (!no_modify && !zap_log)
+ if (!no_modify && !zap_log) {
do_warn(_(
do_warn(_(
"ERROR: The log head and/or tail cannot be discovered. Attempt to mount the\n"
"filesystem to replay the log or use the -L option to destroy the log and\n"
"attempt a repair.\n"));
exit(2);
exit(2);
+ }
} else {
if (verbose) {
do_log(
} else {
if (verbose) {
do_log(

194
SOURCES/xfsprogs-4.17.0-xfs_io-add-label-command.patch

@ -0,0 +1,194 @@ @@ -0,0 +1,194 @@
From cfa10b0f972005b38ed294bca66cebf2f65298ec Mon Sep 17 00:00:00 2001
From: Eric Sandeen <sandeen@redhat.com>
Date: Thu, 24 May 2018 14:48:33 -0500
Subject: [PATCH] xfs_io: add label command

This adds an online get/set/clear label command to xfs_io.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
---
io/Makefile | 6 +--
io/init.c | 1 +
io/io.h | 1 +
io/label.c | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
man/man8/xfs_io.8 | 13 +++++++
5 files changed, 126 insertions(+), 3 deletions(-)
create mode 100644 io/label.c

Index: xfsprogs-4.5.0/io/Makefile
===================================================================
--- xfsprogs-4.5.0.orig/io/Makefile
+++ xfsprogs-4.5.0/io/Makefile
@@ -9,7 +9,7 @@ LTCOMMAND = xfs_io
LSRCFILES = xfs_bmap.sh xfs_freeze.sh xfs_mkfile.sh
HFILES = init.h io.h
CFILES = init.c \
- attr.c bmap.c file.c freeze.c fsync.c getrusage.c imap.c link.c \
+ attr.c bmap.c file.c freeze.c fsync.c getrusage.c imap.c label.c link.c \
mmap.c open.c parent.c pread.c prealloc.c pwrite.c seek.c shutdown.c \
sync.c truncate.c reflink.c
Index: xfsprogs-4.5.0/io/init.c
===================================================================
--- xfsprogs-4.5.0.orig/io/init.c
+++ xfsprogs-4.5.0/io/init.c
@@ -65,6 +65,7 @@ init_commands(void)
help_init();
imap_init();
inject_init();
+ label_init();
seek_init();
madvise_init();
mincore_init();
Index: xfsprogs-4.5.0/io/io.h
===================================================================
--- xfsprogs-4.5.0.orig/io/io.h
+++ xfsprogs-4.5.0/io/io.h
@@ -102,6 +102,7 @@ extern void getrusage_init(void);
extern void help_init(void);
extern void imap_init(void);
extern void inject_init(void);
+extern void label_init(void);
extern void mmap_init(void);
extern void open_init(void);
extern void parent_init(void);
Index: xfsprogs-4.5.0/io/label.c
===================================================================
--- /dev/null
+++ xfsprogs-4.5.0/io/label.c
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2018 Red Hat, Inc.
+ * All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it would be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <sys/ioctl.h>
+#include <sys/mount.h>
+#include "platform_defs.h"
+#include "libxfs.h"
+#include "path.h"
+#include "command.h"
+#include "init.h"
+#include "io.h"
+
+#ifndef FS_IOC_GETFSLABEL
+/* Max chars for the interface; fs limits may differ */
+#define FSLABEL_MAX 256
+#define FS_IOC_GETFSLABEL _IOR(0x94, 49, char[FSLABEL_MAX])
+#define FS_IOC_SETFSLABEL _IOW(0x94, 50, char[FSLABEL_MAX])
+#endif
+
+static cmdinfo_t label_cmd;
+
+static void
+label_help(void)
+{
+ printf(_(
+"\n"
+" Manipulate or query the filesystem label while mounted.\n"
+"\n"
+" With no arguments, displays the current filesystem label.\n"
+" -s newlabel -- set the filesystem label to newlabel\n"
+" -c -- clear the filesystem label (sets to NULL string)\n"
+"\n"));
+}
+
+static int
+label_f(
+ int argc,
+ char **argv)
+{
+ int c;
+ int error;
+ char label[FSLABEL_MAX];
+
+ if (argc == 1) {
+ memset(label, 0, sizeof(label));
+ error = ioctl(file->fd, FS_IOC_GETFSLABEL, &label);
+ goto out;
+ }
+
+ while ((c = getopt(argc, argv, "cs:")) != EOF) {
+ switch (c) {
+ case 'c':
+ label[0] = '\0';
+ break;
+ case 's':
+ strncpy(label, optarg, sizeof(label));
+ break;
+ default:
+ return command_usage(&label_cmd);
+ }
+ }
+
+ /* Check for trailing arguments */
+ if (argc != optind)
+ return command_usage(&label_cmd);
+
+ error = ioctl(file->fd, FS_IOC_SETFSLABEL, label);
+out:
+ if (error) {
+ perror("label");
+ exitcode = 1;
+ } else {
+ printf("label = \"%s\"\n", label);
+ }
+
+ return 0;
+}
+
+void
+label_init(void)
+{
+ label_cmd.name = "label";
+ label_cmd.cfunc = label_f;
+ label_cmd.argmin = 0;
+ label_cmd.argmax = 3;
+ label_cmd.args = _("[-s label|-c]");
+ label_cmd.flags = CMD_NOMAP_OK | CMD_FOREIGN_OK;
+ label_cmd.oneline =
+ _("query, set, or clear the filesystem label while mounted");
+ label_cmd.help = label_help;
+
+ add_command(&label_cmd);
+}
Index: xfsprogs-4.5.0/man/man8/xfs_io.8
===================================================================
--- xfsprogs-4.5.0.orig/man/man8/xfs_io.8
+++ xfsprogs-4.5.0/man/man8/xfs_io.8
@@ -812,7 +812,19 @@ verbose output will be printed.
.IP
.B [NOTE: Not currently operational on Linux.]
.PD
-
+.TP
+.BI "label" " " "[ -c | -s " label " ] "
+On filesystems that support online label manipulation, get, set, or clear the
+filesystem label. With no options, print the current filesystem label. The
+.B \-c
+option clears the filesystem label by setting it to the null string. The
+.BI "\-s " label
+option sets the filesystem label to
+.IR label .
+If the label is longer than the filesystem will accept,
+.B xfs_io
+will print an error message. XFS filesystem labels can be at most 12
+characters long.
.SH SEE ALSO
.BR mkfs.xfs (8),
.BR xfsctl (3),

64
SOURCES/xfsprogs-4.17.0-xfsprogs-be-careful-about-what-we-stat-in-platform_c.patch

@ -0,0 +1,64 @@ @@ -0,0 +1,64 @@
From 98c4a01c21b99b13d8aaa406ab15b7424ee5ef9f Mon Sep 17 00:00:00 2001
From: Eric Sandeen <sandeen@redhat.com>
Date: Wed, 23 May 2018 16:30:49 -0500
Subject: [PATCH] xfsprogs: be careful about what we stat in
platform_check_mount

After we lost ustat(2) in commit 4e7a824, we ended up with a slightly
bonkers method to determine if our target block device was mounted:
it goes through every entry returned by getmntent and stats the dir
to see if its underlying device matches ours.

Unfortunately that dir might be a hung nfs server and sadness ensues.

So just do a really simple sanity check before we try to stat the
mountpoint: does its device start with a / ? If not, skip it.

Fixes: 4e7a824 ("libxfs/linux.c: Replace use of ustat by stat")
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Allison Henderson <allison.henderson@oracle.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
---
libfrog/linux.c | 10 ++++++++++
1 file changed, 10 insertions(+)

Index: xfsprogs-4.5.0/libxfs/linux.c
===================================================================
--- xfsprogs-4.5.0.orig/libxfs/linux.c
+++ xfsprogs-4.5.0/libxfs/linux.c
@@ -68,7 +68,17 @@ platform_check_ismounted(char *name, cha
progname, name);
return 1;
}
+ /*
+ * This whole business is to work out if our block device is mounted
+ * after we lost ustat(2), see:
+ * 4e7a824 libxfs/linux.c: Replace use of ustat by stat
+ * We don't really want to stat every single mounted directory,
+ * as that may include tmpfs, cgroups, procfs or - worst - hung nfs
+ * servers. So first, a simple check: does the "dev" start with "/" ?
+ */
while ((mnt = getmntent(f)) != NULL) {
+ if (mnt->mnt_fsname[0] != '/')
+ continue;
if (stat64(mnt->mnt_dir, &mst) < 0)
continue;
if (mst.st_dev != s->st_rdev)
@@ -99,7 +109,17 @@ platform_check_iswritable(char *name, ch
"mounted filesystem\n"), progname, name);
return fatal;
}
+ /*
+ * This whole business is to work out if our block device is mounted
+ * after we lost ustat(2), see:
+ * 4e7a824 libxfs/linux.c: Replace use of ustat by stat
+ * We don't really want to stat every single mounted directory,
+ * as that may include tmpfs, cgroups, procfs or - worst - hung nfs
+ * servers. So first, a simple check: does the "dev" start with "/" ?
+ */
while ((mnt = getmntent(f)) != NULL) {
+ if (mnt->mnt_fsname[0] != '/')
+ continue;
if (stat64(mnt->mnt_fsname, &mst) < 0)
continue;
if ((mst.st_mode & S_IFMT) != S_IFBLK)

51
SOURCES/xfsprogs-4.18-repair-root-parent.patch

@ -0,0 +1,51 @@ @@ -0,0 +1,51 @@
xfs_repair: Fix root inode's parent when it's bogus for sf directory

Currently when root inode is in short-form and its parent ino
has an invalid value, process_sf_dir2() ends up not fixing it,
because if verify_inum() fails we never get to the next case which
would fix the root inode's parent pointer.

This behavior triggers the following assert on process_dir2():

ASSERT((ino != mp->m_sb.sb_rootino && ino != *parent) ||
(ino == mp->m_sb.sb_rootino &&
(ino == *parent || need_root_dotdot == 1)));

This patch fixes this behavior by making sure we always properly
handle rootino parent pointer in process_sf_dir2()

Signed-off-by: Marco Benatto <mbenatto@redhat.com>
Reviewed-by: Eric Sandeen <sandeen@redhat.com>

---

Note: reviewed but not yet merged upstream

repair/dir2.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/repair/dir2.c b/repair/dir2.c
index e162d2b..225f926 100644
--- a/repair/dir2.c
+++ b/repair/dir2.c
@@ -495,8 +495,10 @@ _("corrected entry offsets in directory %" PRIu64 "\n"),
/*
* if parent entry is bogus, null it out. we'll fix it later .
+ * If the validation fails for the root inode we fix it in
+ * the next else case.
*/
- if (verify_inum(mp, *parent)) {
+ if (verify_inum(mp, *parent) && ino != mp->m_sb.sb_rootino) {
do_warn(
_("bogus .. inode number (%" PRIu64 ") in directory inode %" PRIu64 ", "),
--
2.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html


46
SOURCES/xfsprogs-4.5.0-change-mkfs-options.patch

@ -49,45 +49,45 @@ Index: xfsprogs-4.5.0/mkfs/xfs_mkfs.c @@ -49,45 +49,45 @@ Index: xfsprogs-4.5.0/mkfs/xfs_mkfs.c
--- xfsprogs-4.5.0.orig/mkfs/xfs_mkfs.c
+++ xfsprogs-4.5.0/mkfs/xfs_mkfs.c
@@ -105,8 +105,6 @@ char *iopts[] = {
"attr",
"attr",
#define I_PROJID32BIT 6
"projid32bit",
"projid32bit",
-#define I_SPINODES 7
- "sparse",
NULL
NULL
};
@@ -1019,7 +1017,7 @@ main(
worst_freelist = 0;
lazy_sb_counters = 1;
crcs_enabled = 1;
worst_freelist = 0;
lazy_sb_counters = 1;
crcs_enabled = 1;
- finobt = 1;
+ finobt = 0;
finobtflag = false;
spinodes = 0;
memset(&fsx, 0, sizeof(fsx));
finobtflag = false;
spinodes = 0;
memset(&fsx, 0, sizeof(fsx));
@@ -1343,6 +1341,7 @@ main(
illegal(value, "i projid32bit");
projid16bit = c ? 0 : 1;
break;
illegal(value, "i projid32bit");
projid16bit = c ? 0 : 1;
break;
+#if 0
case I_SPINODES:
if (!value || *value == '\0')
value = "1";
case I_SPINODES:
if (!value || *value == '\0')
value = "1";
@@ -1350,6 +1349,7 @@ main(
if (spinodes < 0 || spinodes > 1)
illegal(value, "i spinodes");
break;
if (spinodes < 0 || spinodes > 1)
illegal(value, "i spinodes");
break;
+#endif
default:
unknown('i', value);
}
default:
unknown('i', value);
}
@@ -3213,7 +3213,7 @@ usage( void )
sectlog=n|sectsize=num\n\
sectlog=n|sectsize=num\n\
/* force overwrite */ [-f]\n\
/* inode size */ [-i log=n|perblock=n|size=num,maxpct=n,attr=0|1|2,\n\
- projid32bit=0|1,sparse=0|1]\n\
+ projid32bit=0|1]\n\
/* no discard */ [-K]\n\
/* log subvol */ [-l agnum=n,internal,size=num,logdev=xxx,version=n\n\
sunit=value|su=num,sectlog=n|sectsize=num,\n\
sunit=value|su=num,sectlog=n|sectsize=num,\n\

7
SOURCES/xfsprogs-4.5.0-revert-AGFL-pack.patch

@ -2,10 +2,11 @@ reverted: @@ -2,10 +2,11 @@ reverted:
--- b/libxfs/xfs_format.h
+++ a/libxfs/xfs_format.h
@@ -787,7 +787,7 @@
__be64 agfl_lsn;
__be32 agfl_crc;
__be32 agfl_bno[]; /* actually XFS_AGFL_SIZE(mp) */
__be64 agfl_lsn;
__be32 agfl_crc;
__be32 agfl_bno[]; /* actually XFS_AGFL_SIZE(mp) */
+} xfs_agfl_t;
-} __attribute__((packed)) xfs_agfl_t;
#define XFS_AGFL_CRC_OFF offsetof(struct xfs_agfl, agfl_crc)

86
SOURCES/xfsprogs-4.5.0-revert-xfs_db-sparse-inodes.patch

@ -37,7 +37,7 @@ index 0871ed7..750ecc1 100644 @@ -37,7 +37,7 @@ index 0871ed7..750ecc1 100644
--- a/db/check.c
+++ b/db/check.c
@@ -4311,51 +4311,6 @@ scanfunc_cnt(
scan_sbtree(agf, be32_to_cpu(pp[i]), level, 0, scanfunc_cnt, TYP_CNTBT);
scan_sbtree(agf, be32_to_cpu(pp[i]), level, 0, scanfunc_cnt, TYP_CNTBT);
}
-static bool
@ -87,11 +87,11 @@ index 0871ed7..750ecc1 100644 @@ -87,11 +87,11 @@ index 0871ed7..750ecc1 100644
-
static void
scanfunc_ino(
struct xfs_btree_block *block,
struct xfs_btree_block *block,
@@ -4373,13 +4328,6 @@ scanfunc_ino(
int off;
xfs_inobt_ptr_t *pp;
xfs_inobt_rec_t *rp;
int off;
xfs_inobt_ptr_t *pp;
xfs_inobt_rec_t *rp;
- bool sparse, crc;
- int inodes_per_chunk;
- int freecount;
@ -100,20 +100,20 @@ index 0871ed7..750ecc1 100644 @@ -100,20 +100,20 @@ index 0871ed7..750ecc1 100644
- xfs_agino_t rino;
- xfs_extlen_t cblocks;
if (be32_to_cpu(block->bb_magic) != XFS_IBT_MAGIC &&
be32_to_cpu(block->bb_magic) != XFS_IBT_CRC_MAGIC) {
if (be32_to_cpu(block->bb_magic) != XFS_IBT_MAGIC &&
be32_to_cpu(block->bb_magic) != XFS_IBT_CRC_MAGIC) {
@@ -4407,111 +4355,59 @@ scanfunc_ino(
return;
}
rp = XFS_INOBT_REC_ADDR(mp, block, 1);
return;
}
rp = XFS_INOBT_REC_ADDR(mp, block, 1);
- sparse = xfs_sb_version_hassparseinodes(&mp->m_sb);
- crc = xfs_sb_version_hascrc(&mp->m_sb);
for (i = 0; i < be16_to_cpu(block->bb_numrecs); i++) {
for (i = 0; i < be16_to_cpu(block->bb_numrecs); i++) {
- nfree = 0;
-
- /* First let's look at the inode chunk alignment */
agino = be32_to_cpu(rp[i].ir_startino);
off = XFS_INO_TO_OFFSET(mp, agino);
agino = be32_to_cpu(rp[i].ir_startino);
off = XFS_INO_TO_OFFSET(mp, agino);
- if (off == 0 &&
- (sbversion & XFS_SB_VERSION_ALIGNBIT) &&
- mp->m_sb.sb_inoalignmt &&
@ -131,13 +131,13 @@ index 0871ed7..750ecc1 100644 @@ -131,13 +131,13 @@ index 0871ed7..750ecc1 100644
+ mp->m_sb.sb_inoalignmt &&
+ (XFS_INO_TO_AGBNO(mp, agino) %
+ mp->m_sb.sb_inoalignmt))
sbversion &= ~XFS_SB_VERSION_ALIGNBIT;
sbversion &= ~XFS_SB_VERSION_ALIGNBIT;
+ set_dbmap(seqno, XFS_AGINO_TO_AGBNO(mp, agino),
+ (xfs_extlen_t)MAX(1,
+ XFS_INODES_PER_CHUNK >>
+ mp->m_sb.sb_inopblog),
+ DBM_INODE, seqno, bno);
}
}
-
- /* Move on to examining the inode chunks */
- if (sparse) {
@ -178,7 +178,7 @@ index 0871ed7..750ecc1 100644 @@ -178,7 +178,7 @@ index 0871ed7..750ecc1 100644
+ if (iocur_top->data == NULL) {
+ if (!sflag)
+ dbprintf(_("can't read inode block "
"%u/%u\n"),
"%u/%u\n"),
- seqno, rino, seqno, bno);
- error++;
- }
@ -218,7 +218,7 @@ index 0871ed7..750ecc1 100644 @@ -218,7 +218,7 @@ index 0871ed7..750ecc1 100644
+ seqno,
+ XFS_AGINO_TO_AGBNO(mp, agino));
+ error++;
pop_cur();
pop_cur();
-
- startidx = find_zero_ino_bit(holemask, endidx);
- endidx = find_one_ino_bit(holemask, startidx);
@ -240,41 +240,41 @@ index 0871ed7..750ecc1 100644 @@ -240,41 +240,41 @@ index 0871ed7..750ecc1 100644
+ isfree);
+ }
+ if (nfree != be32_to_cpu(rp[i].ir_u.f.ir_freecount)) {
if (!sflag)
dbprintf(_("ir_freecount/free mismatch, "
"inode chunk %u/%u, freecount "
"%d nfree %d\n"),
seqno, agino,
if (!sflag)
dbprintf(_("ir_freecount/free mismatch, "
"inode chunk %u/%u, freecount "
"%d nfree %d\n"),
seqno, agino,
- freecount, nfree);
+ be32_to_cpu(rp[i].ir_u.f.ir_freecount), nfree);
error++;
}
error++;
}
+ pop_cur();
}
return;
}
}
return;
}
@@ -4543,11 +4439,6 @@ scanfunc_fino(
int off;
xfs_inobt_ptr_t *pp;
struct xfs_inobt_rec *rp;
int off;
xfs_inobt_ptr_t *pp;
struct xfs_inobt_rec *rp;
- bool sparse, crc;
- int startidx, endidx;
- __u16 holemask;
- xfs_agino_t rino;
- xfs_extlen_t cblocks;
if (be32_to_cpu(block->bb_magic) != XFS_FIBT_MAGIC &&
be32_to_cpu(block->bb_magic) != XFS_FIBT_CRC_MAGIC) {
if (be32_to_cpu(block->bb_magic) != XFS_FIBT_MAGIC &&
be32_to_cpu(block->bb_magic) != XFS_FIBT_CRC_MAGIC) {
@@ -4575,63 +4466,21 @@ scanfunc_fino(
return;
}
rp = XFS_INOBT_REC_ADDR(mp, block, 1);
return;
}
rp = XFS_INOBT_REC_ADDR(mp, block, 1);
- sparse = xfs_sb_version_hassparseinodes(&mp->m_sb);
- crc = xfs_sb_version_hascrc(&mp->m_sb);
for (i = 0; i < be16_to_cpu(block->bb_numrecs); i++) {
for (i = 0; i < be16_to_cpu(block->bb_numrecs); i++) {
- /* First let's look at the inode chunk alignment */
agino = be32_to_cpu(rp[i].ir_startino);
off = XFS_INO_TO_OFFSET(mp, agino);
agino = be32_to_cpu(rp[i].ir_startino);
off = XFS_INO_TO_OFFSET(mp, agino);
- if (off == 0 &&
- (sbversion & XFS_SB_VERSION_ALIGNBIT) &&
- mp->m_sb.sb_inoalignmt &&
@ -292,13 +292,13 @@ index 0871ed7..750ecc1 100644 @@ -292,13 +292,13 @@ index 0871ed7..750ecc1 100644
+ mp->m_sb.sb_inoalignmt &&
+ (XFS_INO_TO_AGBNO(mp, agino) %
+ mp->m_sb.sb_inoalignmt))
sbversion &= ~XFS_SB_VERSION_ALIGNBIT;
sbversion &= ~XFS_SB_VERSION_ALIGNBIT;
+ check_set_dbmap(seqno, XFS_AGINO_TO_AGBNO(mp, agino),
+ (xfs_extlen_t)MAX(1,
+ XFS_INODES_PER_CHUNK >>
+ mp->m_sb.sb_inopblog),
+ DBM_INODE, DBM_INODE, seqno, bno);
}
}
-
- /* Move on to examining the inode chunks */
- if (sparse) {
@ -336,6 +336,6 @@ index 0871ed7..750ecc1 100644 @@ -336,6 +336,6 @@ index 0871ed7..750ecc1 100644
- startidx = find_zero_ino_bit(holemask, endidx);
- endidx = find_one_ino_bit(holemask, startidx);
- } while (endidx < XFS_INODES_PER_CHUNK);
}
return;
}
}
return;
}

26
SOURCES/xfsprogs-4.5.0-xfs_repair-exit-value-memory.patch

@ -28,24 +28,24 @@ index 9d91f2d..bbf0edc 100644 @@ -28,24 +28,24 @@ index 9d91f2d..bbf0edc 100644
--- a/repair/xfs_repair.c
+++ b/repair/xfs_repair.c
@@ -851,16 +851,16 @@ main(int argc, char **argv)
"with the -m option. Please increase it to at least %lu.\n"),
mem_used / 1024);
}
"with the -m option. Please increase it to at least %lu.\n"),
mem_used / 1024);
}
- do_warn(
+ do_log(
_("Memory available for repair (%luMB) may not be sufficient.\n"
"At least %luMB is needed to repair this filesystem efficiently\n"
"If repair fails due to lack of memory, please\n"),
max_mem / 1024, mem_used / 1024);
if (do_prefetch)
_("Memory available for repair (%luMB) may not be sufficient.\n"
"At least %luMB is needed to repair this filesystem efficiently\n"
"If repair fails due to lack of memory, please\n"),
max_mem / 1024, mem_used / 1024);
if (do_prefetch)
- do_warn(
+ do_log(
_("turn prefetching off (-P) to reduce the memory footprint.\n"));
else
_("turn prefetching off (-P) to reduce the memory footprint.\n"));
else
- do_warn(
+ do_log(
_("increase system RAM and/or swap space to at least %luMB.\n"),
mem_used * 2 / 1024);
_("increase system RAM and/or swap space to at least %luMB.\n"),
mem_used * 2 / 1024);
--
2.5.5
@ -54,3 +54,5 @@ _______________________________________________ @@ -54,3 +54,5 @@ _______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs



52
SOURCES/xfsprogs-4.5.0-xfs_repair-quota-inodes.patch

@ -36,58 +36,60 @@ index 45db6ae..44f3e3e 100644 @@ -36,58 +36,60 @@ index 45db6ae..44f3e3e 100644
--- a/libxfs/xfs_sb.c
+++ b/libxfs/xfs_sb.c
@@ -316,13 +316,16 @@ xfs_sb_quota_from_disk(struct xfs_sb *sbp)
XFS_PQUOTA_CHKD : XFS_GQUOTA_CHKD;
sbp->sb_qflags &= ~(XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD);
XFS_PQUOTA_CHKD : XFS_GQUOTA_CHKD;
sbp->sb_qflags &= ~(XFS_OQUOTA_ENFD | XFS_OQUOTA_CHKD);
- if (sbp->sb_qflags & XFS_PQUOTA_ACCT) {
+ if (sbp->sb_qflags & XFS_PQUOTA_ACCT &&
+ sbp->sb_gquotino != NULLFSINO) {
/*
* In older version of superblock, on-disk superblock only
* has sb_gquotino, and in-core superblock has both sb_gquotino
* and sb_pquotino. But, only one of them is supported at any
* point of time. So, if PQUOTA is set in disk superblock,
/*
* In older version of superblock, on-disk superblock only
* has sb_gquotino, and in-core superblock has both sb_gquotino
* and sb_pquotino. But, only one of them is supported at any
* point of time. So, if PQUOTA is set in disk superblock,
- * copy over sb_gquotino to sb_pquotino.
+ * copy over sb_gquotino to sb_pquotino. The NULLFSINO test
+ * above is to make sure we don't do this twice and wipe them
+ * both out!
*/
sbp->sb_pquotino = sbp->sb_gquotino;
sbp->sb_gquotino = NULLFSINO;
*/
sbp->sb_pquotino = sbp->sb_gquotino;
sbp->sb_gquotino = NULLFSINO;
diff --git a/repair/sb.c b/repair/sb.c
index 3965953..8087242 100644
--- a/repair/sb.c
+++ b/repair/sb.c
@@ -155,7 +155,6 @@ __find_secondary_sb(
for (i = 0; !done && i < bsize; i += BBSIZE) {
c_bufsb = (char *)sb + i;
libxfs_sb_from_disk(&bufsb, (xfs_dsb_t *)c_bufsb);
for (i = 0; !done && i < bsize; i += BBSIZE) {
c_bufsb = (char *)sb + i;
libxfs_sb_from_disk(&bufsb, (xfs_dsb_t *)c_bufsb);
- libxfs_sb_quota_from_disk(&bufsb);
if (verify_sb(c_bufsb, &bufsb, 0) != XR_OK)
continue;
if (verify_sb(c_bufsb, &bufsb, 0) != XR_OK)
continue;
@@ -568,7 +567,6 @@ get_sb(xfs_sb_t *sbp, xfs_off_t off, int size, xfs_agnumber_t agno)
do_error("%s\n", strerror(error));
}
libxfs_sb_from_disk(sbp, buf);
do_error("%s\n", strerror(error));
}
libxfs_sb_from_disk(sbp, buf);
- libxfs_sb_quota_from_disk(sbp);
rval = verify_sb((char *)buf, sbp, agno == 0);
free(buf);
rval = verify_sb((char *)buf, sbp, agno == 0);
free(buf);
diff --git a/repair/scan.c b/repair/scan.c
index 964ff06..366ce16 100644
--- a/repair/scan.c
+++ b/repair/scan.c
@@ -1622,7 +1622,6 @@ scan_ag(
goto out_free_sb;
}
libxfs_sb_from_disk(sb, XFS_BUF_TO_SBP(sbbuf));
goto out_free_sb;
}
libxfs_sb_from_disk(sb, XFS_BUF_TO_SBP(sbbuf));
- libxfs_sb_quota_from_disk(sb);
agfbuf = libxfs_readbuf(mp->m_dev,
XFS_AG_DADDR(mp, agno, XFS_AGF_DADDR(mp)),
agfbuf = libxfs_readbuf(mp->m_dev,
XFS_AG_DADDR(mp, agno, XFS_AGF_DADDR(mp)),

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs



16
SOURCES/xfsprogs-4.5.0-xfs_repair-rtino-version.patch

@ -33,20 +33,20 @@ Index: xfsprogs-4.5.0/repair/phase6.c @@ -33,20 +33,20 @@ Index: xfsprogs-4.5.0/repair/phase6.c
--- xfsprogs-4.5.0.orig/repair/phase6.c
+++ xfsprogs-4.5.0/repair/phase6.c
@@ -507,7 +507,7 @@ mk_rbmino(xfs_mount_t *mp)
error);
}
error);
}
- vers = xfs_sb_version_hascrc(&mp->m_sb) ? 3 : 1;
+ vers = xfs_sb_version_hascrc(&mp->m_sb) ? 3 : 2;
memset(&ip->i_d, 0, xfs_icdinode_size(vers));
memset(&ip->i_d, 0, xfs_icdinode_size(vers));
ip->i_d.di_magic = XFS_DINODE_MAGIC;
ip->i_d.di_magic = XFS_DINODE_MAGIC;
@@ -766,7 +766,7 @@ mk_rsumino(xfs_mount_t *mp)
error);
}
error);
}
- vers = xfs_sb_version_hascrc(&mp->m_sb) ? 3 : 1;
+ vers = xfs_sb_version_hascrc(&mp->m_sb) ? 3 : 2;
memset(&ip->i_d, 0, xfs_icdinode_size(vers));
memset(&ip->i_d, 0, xfs_icdinode_size(vers));
ip->i_d.di_magic = XFS_DINODE_MAGIC;
ip->i_d.di_magic = XFS_DINODE_MAGIC;

9
SOURCES/xfsprogs-4.7.0-defang-frag.patch

@ -22,12 +22,13 @@ Index: xfsprogs-4.5.0/db/frag.c @@ -22,12 +22,13 @@ Index: xfsprogs-4.5.0/db/frag.c
--- xfsprogs-4.5.0.orig/db/frag.c
+++ xfsprogs-4.5.0/db/frag.c
@@ -172,6 +172,10 @@ frag_f(
answer = 0.0;
dbprintf(_("actual %llu, ideal %llu, fragmentation factor %.2f%%\n"),
extcount_actual, extcount_ideal, answer);
answer = 0.0;
dbprintf(_("actual %llu, ideal %llu, fragmentation factor %.2f%%\n"),
extcount_actual, extcount_ideal, answer);
+ dbprintf(_("Note, this number is largely meaningless.\n"));
+ answer = (double)extcount_actual / (double)extcount_ideal;
+ dbprintf(_("Files on this filesystem average %.2f extents per file\n"),
+ answer);
return 0;
return 0;
}

24
SOURCES/xfsprogs-4.7.0-fix-agf-limit-errors.patch

@ -22,20 +22,20 @@ Index: xfsprogs-4.5.0/repair/agheader.c @@ -22,20 +22,20 @@ Index: xfsprogs-4.5.0/repair/agheader.c
--- xfsprogs-4.5.0.orig/repair/agheader.c
+++ xfsprogs-4.5.0/repair/agheader.c
@@ -94,7 +94,7 @@ verify_set_agf(xfs_mount_t *mp, xfs_agf_
if (be32_to_cpu(agf->agf_flfirst) >= XFS_AGFL_SIZE(mp)) {
do_warn(_("flfirst %d in agf %d too large (max = %zu)\n"),
be32_to_cpu(agf->agf_flfirst),
if (be32_to_cpu(agf->agf_flfirst) >= XFS_AGFL_SIZE(mp)) {
do_warn(_("flfirst %d in agf %d too large (max = %zu)\n"),
be32_to_cpu(agf->agf_flfirst),
- i, XFS_AGFL_SIZE(mp));
+ i, XFS_AGFL_SIZE(mp) - 1);
if (!no_modify)
agf->agf_flfirst = cpu_to_be32(0);
}
if (!no_modify)
agf->agf_flfirst = cpu_to_be32(0);
}
@@ -102,7 +102,7 @@ verify_set_agf(xfs_mount_t *mp, xfs_agf_
if (be32_to_cpu(agf->agf_fllast) >= XFS_AGFL_SIZE(mp)) {
do_warn(_("fllast %d in agf %d too large (max = %zu)\n"),
be32_to_cpu(agf->agf_fllast),
if (be32_to_cpu(agf->agf_fllast) >= XFS_AGFL_SIZE(mp)) {
do_warn(_("fllast %d in agf %d too large (max = %zu)\n"),
be32_to_cpu(agf->agf_fllast),
- i, XFS_AGFL_SIZE(mp));
+ i, XFS_AGFL_SIZE(mp) - 1);
if (!no_modify)
agf->agf_fllast = cpu_to_be32(0);
}
if (!no_modify)
agf->agf_fllast = cpu_to_be32(0);
}

76
SOURCES/xfsprogs-4.7.0-quota-fixes.patch

@ -191,46 +191,46 @@ Index: xfsprogs-4.5.0/quota/report.c @@ -191,46 +191,46 @@ Index: xfsprogs-4.5.0/quota/report.c
--- xfsprogs-4.5.0.orig/quota/report.c
+++ xfsprogs-4.5.0/quota/report.c
@@ -90,8 +90,10 @@ dump_file(
else
cmd = XFS_GETQUOTA;
else
cmd = XFS_GETQUOTA;
+ /* Fall back silently if XFS_GETNEXTQUOTA fails, warn on XFS_GETQUOTA */
if (xfsquotactl(cmd, dev, type, id, (void *)&d) < 0) {
if (xfsquotactl(cmd, dev, type, id, (void *)&d) < 0) {
- if (errno != ENOENT && errno != ENOSYS && errno != ESRCH)
+ if (errno != ENOENT && errno != ENOSYS && errno != ESRCH &&
+ cmd == XFS_GETQUOTA)
perror("XFS_GETQUOTA");
return 0;
}
perror("XFS_GETQUOTA");
return 0;
}
@@ -347,8 +349,10 @@ report_mount(
else
cmd = XFS_GETQUOTA;
else
cmd = XFS_GETQUOTA;
+ /* Fall back silently if XFS_GETNEXTQUOTA fails, warn on XFS_GETQUOTA*/
if (xfsquotactl(cmd, dev, type, id, (void *)&d) < 0) {
if (xfsquotactl(cmd, dev, type, id, (void *)&d) < 0) {
- if (errno != ENOENT && errno != ENOSYS && errno != ESRCH)
+ if (errno != ENOENT && errno != ENOSYS && errno != ESRCH &&
+ cmd == XFS_GETQUOTA)
perror("XFS_GETQUOTA");
return 0;
}
perror("XFS_GETQUOTA");
return 0;
}
@@ -389,7 +393,11 @@ report_mount(
name = p->pr_name;
}
}
name = p->pr_name;
}
}
- fprintf(fp, "%-10s", name);
+ /* If no name is found, print the id #num instead of (null) */
+ if (name != NULL)
+ fprintf(fp, "%-10s", name);
+ else
+ fprintf(fp, "#%-9u", d.d_id);
}
}
if (form & XFS_BLOCK_QUOTA) {
if (form & XFS_BLOCK_QUOTA) {
@@ -571,6 +579,16 @@ report_project_mount(
id = oid + 1;
}
} else {
id = oid + 1;
}
} else {
+ if (!getprprid(0)) {
+ /*
+ * Print default project quota, even if projid 0
@ -241,16 +241,16 @@ Index: xfsprogs-4.5.0/quota/report.c @@ -241,16 +241,16 @@ Index: xfsprogs-4.5.0/quota/report.c
+ flags |= NO_HEADER_FLAG;
+ }
+
setprent();
while ((p = getprent()) != NULL) {
if (report_mount(fp, p->pr_prid, p->pr_name, NULL,
setprent();
while ((p = getprent()) != NULL) {
if (report_mount(fp, p->pr_prid, p->pr_name, NULL,
Index: xfsprogs-4.5.0/quota/util.c
===================================================================
--- xfsprogs-4.5.0.orig/quota/util.c
+++ xfsprogs-4.5.0/quota/util.c
@@ -43,6 +43,18 @@ time_to_string(
timer = MAX(origin - now, 0);
}
timer = MAX(origin - now, 0);
}
+ /*
+ * If we are in verbose mode, or if less than a day remains, we
@ -264,9 +264,9 @@ Index: xfsprogs-4.5.0/quota/util.c @@ -264,9 +264,9 @@ Index: xfsprogs-4.5.0/quota/util.c
+ if ((timer > SECONDS_IN_A_DAY) && !(flags & VERBOSE_FLAG))
+ timer += 30; /* seconds */
+
days = timer / SECONDS_IN_A_DAY;
if (days)
timer %= SECONDS_IN_A_DAY;
days = timer / SECONDS_IN_A_DAY;
if (days)
timer %= SECONDS_IN_A_DAY;
Index: xfsprogs-4.5.0/man/man8/xfs_quota.8
===================================================================
--- xfsprogs-4.5.0.orig/man/man8/xfs_quota.8
@ -287,23 +287,23 @@ Index: xfsprogs-4.5.0/libxcmd/input.c @@ -287,23 +287,23 @@ Index: xfsprogs-4.5.0/libxcmd/input.c
--- xfsprogs-4.5.0.orig/libxcmd/input.c
+++ xfsprogs-4.5.0/libxcmd/input.c
@@ -366,7 +366,7 @@ uid_from_string(
char *sp;
char *sp;
uid_long = strtoul(user, &sp, 10);
uid_long = strtoul(user, &sp, 10);
- if (sp != user) {
+ if (sp != user && *sp == '\0') {
if ((uid_long == ULONG_MAX && errno == ERANGE)
|| (uid_long > (uid_t)-1))
return -1;
if ((uid_long == ULONG_MAX && errno == ERANGE)
|| (uid_long > (uid_t)-1))
return -1;
@@ -387,7 +387,7 @@ gid_from_string(
char *sp;
char *sp;
gid_long = strtoul(group, &sp, 10);
gid_long = strtoul(group, &sp, 10);
- if (sp != group) {
+ if (sp != group && *sp == '\0') {
if ((gid_long == ULONG_MAX && errno == ERANGE)
|| (gid_long > (gid_t)-1))
return -1;
if ((gid_long == ULONG_MAX && errno == ERANGE)
|| (gid_long > (gid_t)-1))
return -1;
Index: xfsprogs-4.5.0/libxfs/xfs_quota_defs.h
===================================================================
--- xfsprogs-4.5.0.orig/libxfs/xfs_quota_defs.h

18
SOURCES/xfsprogs-4.8.0-replace-ustat.patch

@ -42,11 +42,11 @@ index c9f2baf..44bc1f9 100644 @@ -42,11 +42,11 @@ index c9f2baf..44bc1f9 100644
+ struct mntent *mnt;
+ char mounts[MAXPATHLEN];
if (!s) {
if (stat64(block, &st) < 0)
if (!s) {
if (stat64(block, &st) < 0)
@@ -63,14 +61,27 @@ platform_check_ismounted(char *name, char *block, struct stat64 *s, int verbose)
s = &st;
}
s = &st;
}
- if (ustat(s->st_rdev, ust) >= 0) {
+ strcpy(mounts, (!access(PROC_MOUNTED, R_OK)) ? PROC_MOUNTED : MOUNTED);
@ -62,13 +62,13 @@ index c9f2baf..44bc1f9 100644 @@ -62,13 +62,13 @@ index c9f2baf..44bc1f9 100644
+ if (mst.st_dev != s->st_rdev)
+ continue;
+
if (verbose)
fprintf(stderr,
_("%s: %s contains a mounted filesystem\n"),
progname, name);
if (verbose)
fprintf(stderr,
_("%s: %s contains a mounted filesystem\n"),
progname, name);
- return 1;
+ break;
}
}
- return 0;
+ endmntent(f);
+ return mnt != NULL;

22
SOURCES/xfsprogs-4.8.0-xfs_copy-UUID.patch

@ -49,8 +49,8 @@ index 3c8998c..22ded6b 100644 @@ -49,8 +49,8 @@ index 3c8998c..22ded6b 100644
+ ag_header_t *ag_hdr, /* AG hdr to update for this copy */
+ thread_args *tcarg) /* Args for this thread, with UUID */
{
/*
* If this filesystem has CRCs, the original UUID is stamped into
/*
* If this filesystem has CRCs, the original UUID is stamped into
- * all metadata. If we are changing the UUID in the copy, we need
- * to copy the original UUID into the meta_uuid slot and set the
- * set the incompat flag if that hasn't already been done.
@ -58,22 +58,22 @@ index 3c8998c..22ded6b 100644 @@ -58,22 +58,22 @@ index 3c8998c..22ded6b 100644
+ * the original filesystem and we are changing the UUID in this copy,
+ * we must copy the original sb_uuid to the sb_meta_uuid slot and set
+ * the incompat flag for the feature on this copy.
*/
*/
- if (!uuid_equal(&tcarg->uuid, &ag_hdr->xfs_sb->sb_uuid) &&
- xfs_sb_version_hascrc(sb) && !xfs_sb_version_hasmetauuid(sb)) {
+ if (xfs_sb_version_hascrc(sb) && !xfs_sb_version_hasmetauuid(sb) &&
+ !uuid_equal(&tcarg->uuid, &sb->sb_uuid)) {
__be32 feat;
__be32 feat;
feat = be32_to_cpu(ag_hdr->xfs_sb->sb_features_incompat);
feat |= XFS_SB_FEAT_INCOMPAT_META_UUID;
ag_hdr->xfs_sb->sb_features_incompat = cpu_to_be32(feat);
platform_uuid_copy(&ag_hdr->xfs_sb->sb_meta_uuid,
feat = be32_to_cpu(ag_hdr->xfs_sb->sb_features_incompat);
feat |= XFS_SB_FEAT_INCOMPAT_META_UUID;
ag_hdr->xfs_sb->sb_features_incompat = cpu_to_be32(feat);
platform_uuid_copy(&ag_hdr->xfs_sb->sb_meta_uuid,
- &ag_hdr->xfs_sb->sb_uuid);
+ &sb->sb_uuid);
}
}
+ /* Copy the (possibly new) fs-identifier UUID into sb_uuid */
platform_uuid_copy(&ag_hdr->xfs_sb->sb_uuid, &tcarg->uuid);
platform_uuid_copy(&ag_hdr->xfs_sb->sb_uuid, &tcarg->uuid);
/* We may have changed the UUID, so update the superblock CRC */
/* We may have changed the UUID, so update the superblock CRC */

12
SOURCES/xfsprogs-4.8.0-xfs_repair-exit-with-status-2-if-log-dirtiness-is-un.patch

@ -21,15 +21,15 @@ Index: xfsprogs-4.5.0/repair/phase2.c @@ -21,15 +21,15 @@ Index: xfsprogs-4.5.0/repair/phase2.c
--- xfsprogs-4.5.0.orig/repair/phase2.c
+++ xfsprogs-4.5.0/repair/phase2.c
@@ -79,10 +79,11 @@ zero_log(
_("zero_log: cannot find log head/tail (xlog_find_tail=%d)\n"),
error);
if (!no_modify && !zap_log)
_("zero_log: cannot find log head/tail (xlog_find_tail=%d)\n"),
error);
if (!no_modify && !zap_log)
- do_error(_(
+ do_warn(_(
"ERROR: The log head and/or tail cannot be discovered. Attempt to mount the\n"
"filesystem to replay the log or use the -L option to destroy the log and\n"
"attempt a repair.\n"));
+ exit(2);
} else {
if (verbose) {
do_log(
} else {
if (verbose) {
do_log(

27
SOURCES/xfsprogs-4.9-xfs_io-fix-m-option.patch

@ -19,30 +19,31 @@ Index: xfsprogs-4.5.0/io/init.c @@ -19,30 +19,31 @@ Index: xfsprogs-4.5.0/io/init.c
@@ -32,7 +32,7 @@ void
usage(void)
{
fprintf(stderr,
fprintf(stderr,
- _("Usage: %s [-adfmnrRstVx] [-p prog] [-c cmd]... file\n"),
+ _("Usage: %s [-adfnrRstVx] [-m mode] [-p prog] [-c cmd]... file\n"),
progname);
exit(1);
progname);
exit(1);
}
@@ -139,7 +139,7 @@ init(
pagesize = getpagesize();
gettimeofday(&stopwatch, NULL);
pagesize = getpagesize();
gettimeofday(&stopwatch, NULL);
- while ((c = getopt(argc, argv, "ac:dFfmp:nrRstTVx")) != EOF) {
+ while ((c = getopt(argc, argv, "ac:dFfm:p:nrRstTVx")) != EOF) {
switch (c) {
case 'a':
flags |= IO_APPEND;
switch (c) {
case 'a':
flags |= IO_APPEND;
Index: xfsprogs-4.5.0/io/open.c
===================================================================
--- xfsprogs-4.5.0.orig/io/open.c
+++ xfsprogs-4.5.0/io/open.c
@@ -759,7 +759,7 @@ open_init(void)
open_cmd.argmin = 0;
open_cmd.argmax = -1;
open_cmd.flags = CMD_NOMAP_OK | CMD_NOFILE_OK | CMD_FOREIGN_OK;
open_cmd.argmin = 0;
open_cmd.argmax = -1;
open_cmd.flags = CMD_NOMAP_OK | CMD_NOFILE_OK | CMD_FOREIGN_OK;
- open_cmd.args = _("[-acdrstxT] [path]");
+ open_cmd.args = _("[-acdrstxT] [-m mode] [path]");
open_cmd.oneline = _("open the file specified by path");
open_cmd.help = open_help;
open_cmd.oneline = _("open the file specified by path");
open_cmd.help = open_help;

12
SOURCES/xfsprogs-4.9.0-junk-attr-leaf-count-zero.patch

@ -33,16 +33,18 @@ index 40cb5f7..b855a10 100644 @@ -33,16 +33,18 @@ index 40cb5f7..b855a10 100644
--- a/repair/attr_repair.c
+++ b/repair/attr_repair.c
@@ -593,7 +593,8 @@ process_leaf_attr_block(
stop = xfs_attr3_leaf_hdr_size(leaf);
stop = xfs_attr3_leaf_hdr_size(leaf);
/* does the count look sorta valid? */
/* does the count look sorta valid? */
- if (leafhdr.count * sizeof(xfs_attr_leaf_entry_t) + stop >
+ if (!leafhdr.count ||
+ leafhdr.count * sizeof(xfs_attr_leaf_entry_t) + stop >
mp->m_sb.sb_blocksize) {
do_warn(
_("bad attribute count %d in attr block %u, inode %" PRIu64 "\n"),
mp->m_sb.sb_blocksize) {
do_warn(
_("bad attribute count %d in attr block %u, inode %" PRIu64 "\n"),
--
To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html



24
SOURCES/xfsprogs-wrapper.h

@ -0,0 +1,24 @@ @@ -0,0 +1,24 @@
/* This file is here to prevent a file conflict on multiarch systems. A
* conflict will occur because platform_defs.h has arch-specific definitions.
*
* DO NOT INCLUDE THE NEW FILE DIRECTLY -- ALWAYS INCLUDE THIS ONE INSTEAD. */

#if defined(__i386__)
#include "platform_defs-i386.h"
#elif defined(__x86_64__)
#include "platform_defs-x86_64.h"
#elif defined(__powerpc64__)
#include "platform_defs-ppc64.h"
#elif defined(__powerpc__)
#include "platform_defs-ppc.h"
#elif defined(__s390x__)
#include "platform_defs-s390x.h"
#elif defined(__s390__)
#include "platform_defs-s390.h"
#elif defined(__sparc__) && defined(__arch64__)
#include "platform_defs-sparc64.h"
#elif defined(__sparc__)
#include "platform_defs-sparc.h"
#else
#error "This xfsprogs-devel package does not work your architecture?"
#endif

43
SPECS/xfsprogs.spec

@ -1,15 +1,15 @@ @@ -1,15 +1,15 @@
Summary: Utilities for managing the XFS filesystem
Name: xfsprogs
Version: 4.5.0
Release: 15%{?dist}
Release: 19%{?dist}
# Licensing based on generic "GNU GENERAL PUBLIC LICENSE"
# in source, with no mention of version.
# doc/COPYING file specifies what is GPL and what is LGPL
# but no mention of versions in the source.
License: GPL+ and LGPLv2+
Group: System Environment/Base
URL: http://oss.sgi.com/projects/xfs/
Source0: ftp://oss.sgi.com/projects/xfs/cmd_tars/%{name}-%{version}.tar.gz
URL: https://xfs.wiki.kernel.org
Source0: http://kernel.org/pub/linux/utils/fs/xfs/xfsprogs/%{name}-%{version}.tar.gz
Source1: xfsprogs-wrapper.h
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: libtool, gettext, libattr-devel, libuuid-devel
@ -47,6 +47,15 @@ Patch22: xfsprogs-4.13.0-xfs_repair-don-t-use-do_warn-for-normal-log-message.pat @@ -47,6 +47,15 @@ Patch22: xfsprogs-4.13.0-xfs_repair-don-t-use-do_warn-for-normal-log-message.pat
Patch23: xfsprogs-4.11.0-xfs_repair-warn-about-dirty-log-with-n-option.patch
Patch24: xfsprogs-4.8.0-xfs_repair-exit-with-status-2-if-log-dirtiness-is-un.patch
Patch25: xfsprogs-4.16-xfs_repair-handle-corrupt-log.patch
# RHEL-7.6
Patch26: xfsprogs-4.10.0-xfs_db-fix-the-source-command-when-passed-as-a-c-opt.patch
Patch27: xfsprogs-4.14.0-db-increase-metadump-s-default-overly-long-extent-di.patch
Patch28: xfsprogs-4.15.0-xfs_db-fix-crash-when-field-list-selector-string-has.patch
Patch29: xfsprogs-4.15.0-xfsprogs-update-dead-urls.patch
Patch30: xfsprogs-4.17.0-xfsprogs-be-careful-about-what-we-stat-in-platform_c.patch
Patch31: xfsprogs-4.17.0-xfs_io-add-label-command.patch
Patch32: xfsprogs-4.18-repair-root-parent.patch
Patch33: xfsprogs-4.15.0-xfs_copy-accept-CRC-version-of-ABTB_MAGIC-in-ASSERT.patch

%description
A set of commands to use the XFS filesystem, including mkfs.xfs.
@ -58,10 +67,6 @@ variable block sizes, is extent based, and makes extensive use of @@ -58,10 +67,6 @@ variable block sizes, is extent based, and makes extensive use of
Btrees (directories, extents, free space) to aid both performance
and scalability.

Refer to the documentation at http://oss.sgi.com/projects/xfs/
for complete details. This implementation is on-disk compatible
with the IRIX version of XFS.

%package devel
Summary: XFS filesystem-specific headers
Group: Development/Libraries
@ -103,6 +108,14 @@ also want to install xfsprogs. @@ -103,6 +108,14 @@ also want to install xfsprogs.
%patch23 -p1
%patch24 -p1
%patch25 -p1
%patch26 -p1
%patch27 -p1
%patch28 -p1
%patch29 -p1
%patch30 -p1
%patch31 -p1
%patch32 -p1
%patch33 -p1

%build
export tagname=CC
@ -168,6 +181,22 @@ rm -rf $RPM_BUILD_ROOT @@ -168,6 +181,22 @@ rm -rf $RPM_BUILD_ROOT
%{_libdir}/*.so

%changelog
* Mon Feb 11 2019 Eric Sandeen <sandeen@redhat.com> 4.5.0-19
- xfs_copy: accept CRC version of ABTB_MAGIC in ASSERT (#1641023)

* Wed Jun 20 2018 Eric Sandeen <sandeen@redhat.com> 4.5.0-18
- xfs_repar: Fix root inode's parent for sf directory (#1590334)

* Wed Jun 13 2018 Eric Sandeen <sandeen@redhat.com> 4.5.0-17
- xfs_io: add online label command (#1584912)

* Thu May 31 2018 Eric Sandeen <sandeen@redhat.com> 4.5.0-16
- xfs_db: fix the source command when passed as -c option (#1510279)
- xfs_metadump: allow much larger extent counts (#1502927)
- xfs_db: fix crash when field list selector has garbage (#1532271)
- mkfs.xfs, others: don't stat non-block devices on startup (#1573974)
- Update project URLs throughout the pkg, code and docs (#1550798)

* Tue Feb 27 2018 Eric Sandeen <sandeen@redhat.com> 4.5.0-15
- xfs_repair: allow repair of corrupt log (#1549525)


Loading…
Cancel
Save