xfsprogs version update
Signed-off-by: basebuilder_pel7x64builder0 <basebuilder@powerel.org>master
parent
aca272aad0
commit
6201dac568
|
@ -0,0 +1,43 @@
|
|||
From b136f48b19a5b8e788aceb4b80e97d6ae9edd0ea Mon Sep 17 00:00:00 2001
|
||||
From: Achilles Gaikwad <agaikwad@redhat.com>
|
||||
Date: Mon, 28 Jan 2019 13:03:08 -0600
|
||||
Subject: [PATCH] xfs_quota: fix false error reporting of project inheritance
|
||||
flag is not set
|
||||
|
||||
After kernel commit:
|
||||
|
||||
9336e3a7 "xfs: project id inheritance is a directory only flag"
|
||||
|
||||
xfs stopped setting the project inheritance flag on regular files, but
|
||||
userspace quota code still checks for it and will now issue the error:
|
||||
|
||||
"project inheritance flag is not set"
|
||||
|
||||
for every regular file during quotacheck. Fix this by only checking
|
||||
for the flag on directories.
|
||||
|
||||
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1663502
|
||||
Reported-by: Steven Gardner <sgardner@redhat.com>
|
||||
Signed-off-by: Achilles Gaikwad <agaikwad@redhat.com>
|
||||
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
|
||||
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
|
||||
---
|
||||
quota/project.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/quota/project.c b/quota/project.c
|
||||
index 78ede9e..7c22947 100644
|
||||
--- a/quota/project.c
|
||||
+++ b/quota/project.c
|
||||
@@ -114,7 +114,7 @@ check_project(
|
||||
printf(_("%s - project identifier is not set"
|
||||
" (inode=%u, tree=%u)\n"),
|
||||
path, fsx.fsx_projid, (unsigned int)prid);
|
||||
- if (!(fsx.fsx_xflags & FS_XFLAG_PROJINHERIT))
|
||||
+ if (!(fsx.fsx_xflags & FS_XFLAG_PROJINHERIT) && S_ISDIR(stat->st_mode))
|
||||
printf(_("%s - project inheritance flag is not set\n"),
|
||||
path);
|
||||
}
|
||||
--
|
||||
2.9.5
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
From 051dae5efb4fc7c1c47ccb72ff161241fb0815ee Mon Sep 17 00:00:00 2001
|
||||
From: Brian Foster <bfoster@redhat.com>
|
||||
Date: Mon, 28 Jan 2019 16:05:16 -0600
|
||||
Subject: [PATCH] xfs_repair: initialize non-leaf finobt blocks with correct magic
|
||||
|
||||
The free inode btree construction code in xfs_repair has a bug where
|
||||
any non-leaf nodes outside of the leftmost block at the associated
|
||||
level in the tree are incorrectly initialized with the inobt magic
|
||||
value. Update the prop_ino_cursor() path responsible for growing the
|
||||
non-leaf portion of the inode btrees to use the btnum of the
|
||||
specific tree being generated rather than the hardcoded inode btree
|
||||
type.
|
||||
|
||||
Signed-off-by: Brian Foster <bfoster@redhat.com>
|
||||
Reported-by: Lucas Stach <l.stach@pengutronix.de>
|
||||
Root-caused-by: Lucas Stach <l.stach@pengutronix.de>
|
||||
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
|
||||
Reviewed-by: Dave Chinner <dchinner@redhat.com>
|
||||
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
|
||||
---
|
||||
|
||||
(backported for RHEL7)
|
||||
|
||||
--- xfsprogs-4.5.0/repair/phase5.c 2016-02-28 17:39:26.000000000 -0600
|
||||
+++ xfsprogs-4.5.0-mine/repair/phase5.c 2019-02-05 11:18:28.046228329 -0600
|
||||
@@ -1003,7 +1003,7 @@ init_ino_cursor(xfs_mount_t *mp, xfs_agn
|
||||
|
||||
static void
|
||||
prop_ino_cursor(xfs_mount_t *mp, xfs_agnumber_t agno, bt_status_t *btree_curs,
|
||||
- xfs_agino_t startino, int level)
|
||||
+ __uint32_t magic, xfs_agino_t startino, int level)
|
||||
{
|
||||
struct xfs_btree_block *bt_hdr;
|
||||
xfs_inobt_key_t *bt_key;
|
||||
@@ -1025,7 +1025,7 @@ prop_ino_cursor(xfs_mount_t *mp, xfs_agn
|
||||
* first path up the left side of the tree
|
||||
* where the agbno's are already set up
|
||||
*/
|
||||
- prop_ino_cursor(mp, agno, btree_curs, startino, level);
|
||||
+ prop_ino_cursor(mp, agno, btree_curs, magic, startino, level);
|
||||
}
|
||||
|
||||
if (be16_to_cpu(bt_hdr->bb_numrecs) ==
|
||||
@@ -1062,11 +1062,11 @@ prop_ino_cursor(xfs_mount_t *mp, xfs_agn
|
||||
bt_hdr = XFS_BUF_TO_BLOCK(lptr->buf_p);
|
||||
memset(bt_hdr, 0, mp->m_sb.sb_blocksize);
|
||||
if (xfs_sb_version_hascrc(&mp->m_sb))
|
||||
- xfs_btree_init_block(mp, lptr->buf_p, XFS_IBT_CRC_MAGIC,
|
||||
+ xfs_btree_init_block(mp, lptr->buf_p, magic,
|
||||
level, 0, agno,
|
||||
XFS_BTREE_CRC_BLOCKS);
|
||||
else
|
||||
- xfs_btree_init_block(mp, lptr->buf_p, XFS_IBT_MAGIC,
|
||||
+ xfs_btree_init_block(mp, lptr->buf_p, magic,
|
||||
level, 0, agno, 0);
|
||||
|
||||
bt_hdr->bb_u.s.bb_leftsib = cpu_to_be32(lptr->prev_agbno);
|
||||
@@ -1074,7 +1074,7 @@ prop_ino_cursor(xfs_mount_t *mp, xfs_agn
|
||||
/*
|
||||
* propagate extent record for first extent in new block up
|
||||
*/
|
||||
- prop_ino_cursor(mp, agno, btree_curs, startino, level);
|
||||
+ prop_ino_cursor(mp, agno, btree_curs, magic, startino, level);
|
||||
}
|
||||
/*
|
||||
* add inode info to current block
|
||||
@@ -1236,7 +1236,7 @@ build_ino_tree(xfs_mount_t *mp, xfs_agnu
|
||||
lptr->modulo--;
|
||||
|
||||
if (lptr->num_recs_pb > 0)
|
||||
- prop_ino_cursor(mp, agno, btree_curs,
|
||||
+ prop_ino_cursor(mp, agno, btree_curs, magic,
|
||||
ino_rec->ino_startnum, 0);
|
||||
|
||||
bt_rec = (xfs_inobt_rec_t *)
|
|
@ -0,0 +1,105 @@
|
|||
From 0e81250e5125dc664e1938288e47ff52b1cacbe4 Mon Sep 17 00:00:00 2001
|
||||
From: "Darrick J. Wong" <darrick.wong@oracle.com>
|
||||
Date: Fri, 26 Apr 2019 15:40:28 -0500
|
||||
Subject: [PATCH] xfs_db: metadump should handle symlinks properly
|
||||
|
||||
Remote symlink target blocks are multi-fsb objects on XFS v5 filesystems
|
||||
because we only write one rmt header per data fork extent. For fs
|
||||
blocksize >= 2048 we never have more than one block and therefore nobody
|
||||
noticed, but for blocksize == 1024 this is definitely not true and leads
|
||||
to metadump spraying error messages about symlink block crc errors.
|
||||
Therefore, reformulate the symlink metadump into a multi-fsb dump
|
||||
function.
|
||||
|
||||
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
|
||||
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
|
||||
[sandeen: shrink the map declaration]
|
||||
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
|
||||
---
|
||||
db/metadump.c | 43 ++++++++++++++++++++++++++++++++++++-------
|
||||
1 file changed, 36 insertions(+), 7 deletions(-)
|
||||
|
||||
Index: xfsprogs-4.5.0/db/metadump.c
|
||||
===================================================================
|
||||
--- xfsprogs-4.5.0.orig/db/metadump.c
|
||||
+++ xfsprogs-4.5.0/db/metadump.c
|
||||
@@ -1425,11 +1425,34 @@ process_dir_data_block(
|
||||
}
|
||||
}
|
||||
|
||||
-static void
|
||||
+static int
|
||||
process_symlink_block(
|
||||
- char *block)
|
||||
+ xfs_fileoff_t o,
|
||||
+ xfs_fsblock_t s,
|
||||
+ xfs_filblks_t c,
|
||||
+ typnm_t btype,
|
||||
+ xfs_fileoff_t last)
|
||||
{
|
||||
- char *link = block;
|
||||
+ struct bbmap map;
|
||||
+ char *link;
|
||||
+ int ret = 0;
|
||||
+
|
||||
+ push_cur();
|
||||
+ map.nmaps = 1;
|
||||
+ map.b[0].bm_bn = XFS_FSB_TO_DADDR(mp, s);
|
||||
+ map.b[0].bm_len = XFS_FSB_TO_BB(mp, c);
|
||||
+ set_cur(&typtab[btype], 0, 0, DB_RING_IGN, &map);
|
||||
+ if (!iocur_top->data) {
|
||||
+ xfs_agnumber_t agno = XFS_FSB_TO_AGNO(mp, s);
|
||||
+ xfs_agblock_t agbno = XFS_FSB_TO_AGBNO(mp, s);
|
||||
+
|
||||
+ print_warning("cannot read %s block %u/%u (%llu)",
|
||||
+ typtab[btype].name, agno, agbno, s);
|
||||
+ if (stop_on_read_error)
|
||||
+ ret = -1;
|
||||
+ goto out_pop;
|
||||
+ }
|
||||
+ link = iocur_top->data;
|
||||
|
||||
if (xfs_sb_version_hascrc(&(mp)->m_sb))
|
||||
link += sizeof(struct xfs_dsymlink_hdr);
|
||||
@@ -1447,6 +1470,12 @@ process_symlink_block(
|
||||
if (zlen < mp->m_sb.sb_blocksize)
|
||||
memset(link + linklen, 0, zlen);
|
||||
}
|
||||
+
|
||||
+ iocur_top->need_crc = 1;
|
||||
+ ret = write_buf(iocur_top);
|
||||
+out_pop:
|
||||
+ pop_cur();
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
#define MAX_REMOTE_VALS 4095
|
||||
@@ -1663,10 +1692,6 @@ process_single_fsb_objects(
|
||||
last == mp->m_dir_geo->fsbcount);
|
||||
iocur_top->need_crc = 1;
|
||||
break;
|
||||
- case TYP_SYMLINK:
|
||||
- process_symlink_block(dp);
|
||||
- iocur_top->need_crc = 1;
|
||||
- break;
|
||||
case TYP_ATTR:
|
||||
process_attr_block(dp, o);
|
||||
iocur_top->need_crc = 1;
|
||||
@@ -1764,6 +1789,8 @@ is_multi_fsb_object(
|
||||
{
|
||||
if (btype == TYP_DIR2 && mp->m_dir_geo->fsbcount > 1)
|
||||
return true;
|
||||
+ if (btype == TYP_SYMLINK)
|
||||
+ return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1778,6 +1805,8 @@ process_multi_fsb_objects(
|
||||
switch (btype) {
|
||||
case TYP_DIR2:
|
||||
return process_multi_fsb_dir(o, s, c, btype, last);
|
||||
+ case TYP_SYMLINK:
|
||||
+ return process_symlink_block(o, s, c, btype, last);
|
||||
default:
|
||||
print_warning("bad type for multi-fsb object %d", btype);
|
||||
return -EINVAL;
|
|
@ -0,0 +1,67 @@
|
|||
From 9e43c34535bb72edc4a3a30e14b7d22b54c468cb Mon Sep 17 00:00:00 2001
|
||||
From: "Darrick J. Wong" <darrick.wong@oracle.com>
|
||||
Date: Fri, 26 Apr 2019 15:40:19 -0500
|
||||
Subject: [PATCH] xfs_db: refactor metadump handling of multi-fsb objects
|
||||
|
||||
Separate the multi-fsb object dispatch from actual dir block processing
|
||||
so that we can implement symlink handling correctly as a multi-fsb file.
|
||||
|
||||
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/metadump.c | 27 ++++++++++++++++++---------
|
||||
1 file changed, 18 insertions(+), 9 deletions(-)
|
||||
|
||||
Index: xfsprogs-4.5.0/db/metadump.c
|
||||
===================================================================
|
||||
--- xfsprogs-4.5.0.orig/db/metadump.c
|
||||
+++ xfsprogs-4.5.0/db/metadump.c
|
||||
@@ -1695,7 +1695,7 @@ static struct bbmap mfsb_map;
|
||||
static int mfsb_length;
|
||||
|
||||
static int
|
||||
-process_multi_fsb_objects(
|
||||
+process_multi_fsb_dir(
|
||||
xfs_fileoff_t o,
|
||||
xfs_fsblock_t s,
|
||||
xfs_filblks_t c,
|
||||
@@ -1704,14 +1704,6 @@ process_multi_fsb_objects(
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
- switch (btype) {
|
||||
- case TYP_DIR2:
|
||||
- break;
|
||||
- default:
|
||||
- print_warning("bad type for multi-fsb object %d", btype);
|
||||
- return -EINVAL;
|
||||
- }
|
||||
-
|
||||
while (c > 0) {
|
||||
unsigned int bm_len;
|
||||
|
||||
@@ -1765,6 +1757,23 @@ out_pop:
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static int
|
||||
+process_multi_fsb_objects(
|
||||
+ xfs_fileoff_t o,
|
||||
+ xfs_fsblock_t s,
|
||||
+ xfs_filblks_t c,
|
||||
+ typnm_t btype,
|
||||
+ xfs_fileoff_t last)
|
||||
+{
|
||||
+ switch (btype) {
|
||||
+ case TYP_DIR2:
|
||||
+ return process_multi_fsb_dir(o, s, c, btype, last);
|
||||
+ default:
|
||||
+ print_warning("bad type for multi-fsb object %d", btype);
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
/* inode copy routines */
|
||||
static int
|
||||
process_bmbt_reclist(
|
|
@ -0,0 +1,64 @@
|
|||
From 001df390de88731675adae166db5f189924b107f Mon Sep 17 00:00:00 2001
|
||||
From: "Darrick J. Wong" <darrick.wong@oracle.com>
|
||||
Date: Fri, 26 Apr 2019 15:40:24 -0500
|
||||
Subject: [PATCH] xfs_db: refactor multi-fsb object detection decision making
|
||||
|
||||
Pull the "is this a multi-fsb object" decision into a separate function
|
||||
that we can keep close to the actual multi-fsb object dispatcher. We
|
||||
will soon make the machinery more complex so we do this to avoid having
|
||||
a big hairy if statement.
|
||||
|
||||
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/metadump.c | 22 +++++++++++++++++-----
|
||||
1 file changed, 17 insertions(+), 5 deletions(-)
|
||||
|
||||
Index: xfsprogs-4.5.0/db/metadump.c
|
||||
===================================================================
|
||||
--- xfsprogs-4.5.0.orig/db/metadump.c
|
||||
+++ xfsprogs-4.5.0/db/metadump.c
|
||||
@@ -1757,6 +1757,16 @@ out_pop:
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static bool
|
||||
+is_multi_fsb_object(
|
||||
+ struct xfs_mount *mp,
|
||||
+ typnm_t btype)
|
||||
+{
|
||||
+ if (btype == TYP_DIR2 && mp->m_dir_geo->fsbcount > 1)
|
||||
+ return true;
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
static int
|
||||
process_multi_fsb_objects(
|
||||
xfs_fileoff_t o,
|
||||
@@ -1789,6 +1799,7 @@ process_bmbt_reclist(
|
||||
xfs_fileoff_t last;
|
||||
xfs_agnumber_t agno;
|
||||
xfs_agblock_t agbno;
|
||||
+ bool is_multi_fsb = is_multi_fsb_object(mp, btype);
|
||||
int error;
|
||||
|
||||
if (btype == TYP_DATA)
|
||||
@@ -1852,11 +1863,12 @@ process_bmbt_reclist(
|
||||
}
|
||||
|
||||
/* multi-extent blocks require special handling */
|
||||
- if (btype != TYP_DIR2 || mp->m_dir_geo->fsbcount == 1) {
|
||||
- error = process_single_fsb_objects(o, s, c, btype, last);
|
||||
- } else {
|
||||
- error = process_multi_fsb_objects(o, s, c, btype, last);
|
||||
- }
|
||||
+ if (is_multi_fsb)
|
||||
+ error = process_multi_fsb_objects(o, s, c, btype,
|
||||
+ last);
|
||||
+ else
|
||||
+ error = process_single_fsb_objects(o, s, c, btype,
|
||||
+ last);
|
||||
if (error)
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,89 @@
|
|||
From 7e8a6edb4d1ba0079152eb477abbbc1dfb1ebb7e Mon Sep 17 00:00:00 2001
|
||||
From: Pavel Reichl <preichl@redhat.com>
|
||||
Date: Fri, 13 Dec 2019 16:21:26 -0500
|
||||
Subject: [PATCH] mkfs: Break block discard into chunks of 2 GB
|
||||
|
||||
Some users are not happy about the BLKDISCARD taking too long and at the
|
||||
same time not being informed about that - so they think that the command
|
||||
actually hung.
|
||||
|
||||
This commit changes code so that progress reporting is possible and also
|
||||
typing the ^C will cancel the ongoing BLKDISCARD.
|
||||
|
||||
Signed-off-by: Pavel Reichl <preichl@redhat.com>
|
||||
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
|
||||
Reviewed-by: Dave Chinner <dchinner@redhat.com>
|
||||
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
|
||||
---
|
||||
mkfs/xfs_mkfs.c | 50 ++++++++++++++++++++++++++++++++++++-------------
|
||||
1 file changed, 37 insertions(+), 13 deletions(-)
|
||||
|
||||
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
|
||||
@@ -875,17 +875,41 @@ done:
|
||||
}
|
||||
|
||||
static void
|
||||
-discard_blocks(dev_t dev, __uint64_t nsectors)
|
||||
+discard_blocks(dev_t dev, __uint64_t nsectors, int quiet)
|
||||
{
|
||||
- int fd;
|
||||
+ int fd;
|
||||
+ uint64_t offset = 0;
|
||||
+ /* Discard the device 2G at a time */
|
||||
+ const __uint64_t step = 2ULL << 30;
|
||||
+ const __uint64_t count = BBTOB(nsectors);
|
||||
|
||||
- /*
|
||||
- * We intentionally ignore errors from the discard ioctl. It is
|
||||
- * not necessary for the mkfs functionality but just an optimization.
|
||||
- */
|
||||
fd = libxfs_device_to_fd(dev);
|
||||
- if (fd > 0)
|
||||
- platform_discard_blocks(fd, 0, nsectors << 9);
|
||||
+ if (fd <= 0)
|
||||
+ return;
|
||||
+ if (!quiet) {
|
||||
+ printf("Discarding blocks...");
|
||||
+ fflush(stdout);
|
||||
+ }
|
||||
+
|
||||
+ /* The block discarding happens in smaller batches so it can be
|
||||
+ * interrupted prematurely
|
||||
+ */
|
||||
+ while (offset < count) {
|
||||
+ __uint64_t tmp_step = min(step, count - offset);
|
||||
+
|
||||
+ /*
|
||||
+ * We intentionally ignore errors from the discard ioctl. It is
|
||||
+ * not necessary for the mkfs functionality but just an
|
||||
+ * optimization. However we should stop on error.
|
||||
+ */
|
||||
+ if (platform_discard_blocks(fd, offset, tmp_step))
|
||||
+ return;
|
||||
+
|
||||
+ offset += tmp_step;
|
||||
+ }
|
||||
+ if (!quiet)
|
||||
+ printf("Done.\n");
|
||||
+
|
||||
}
|
||||
|
||||
int
|
||||
@@ -2140,11 +2164,11 @@ _("warning: sparse inodes not supported
|
||||
}
|
||||
|
||||
if (discard && !Nflag) {
|
||||
- discard_blocks(xi.ddev, xi.dsize);
|
||||
+ discard_blocks(xi.ddev, xi.dsize, qflag);
|
||||
if (xi.rtdev)
|
||||
- discard_blocks(xi.rtdev, xi.rtsize);
|
||||
+ discard_blocks(xi.rtdev, xi.rtsize, qflag);
|
||||
if (xi.logdev && xi.logdev != xi.ddev)
|
||||
- discard_blocks(xi.logdev, xi.logBBsize);
|
||||
+ discard_blocks(xi.logdev, xi.logBBsize, qflag);
|
||||
}
|
||||
|
||||
if (!liflag && !ldflag)
|
|
@ -0,0 +1,53 @@
|
|||
From 2383d7c5cf20efcff75cb29ca3e02cfbe1bf2209 Mon Sep 17 00:00:00 2001
|
||||
From: Eric Sandeen <sandeen@redhat.com>
|
||||
Date: Tue, 17 Dec 2019 16:52:39 -0500
|
||||
Subject: [PATCH] mkfs: tidy up discard notifications
|
||||
|
||||
Only notify user of discard operations if the first one succeeds,
|
||||
and be sure to print a trailing newline if we stop early.
|
||||
|
||||
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
|
||||
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
|
||||
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
|
||||
---
|
||||
mkfs/xfs_mkfs.c | 16 ++++++++++------
|
||||
1 file changed, 10 insertions(+), 6 deletions(-)
|
||||
|
||||
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
|
||||
@@ -886,10 +886,6 @@ discard_blocks(dev_t dev, __uint64_t nse
|
||||
fd = libxfs_device_to_fd(dev);
|
||||
if (fd <= 0)
|
||||
return;
|
||||
- if (!quiet) {
|
||||
- printf("Discarding blocks...");
|
||||
- fflush(stdout);
|
||||
- }
|
||||
|
||||
/* The block discarding happens in smaller batches so it can be
|
||||
* interrupted prematurely
|
||||
@@ -902,12 +898,20 @@ discard_blocks(dev_t dev, __uint64_t nse
|
||||
* not necessary for the mkfs functionality but just an
|
||||
* optimization. However we should stop on error.
|
||||
*/
|
||||
- if (platform_discard_blocks(fd, offset, tmp_step))
|
||||
+ if (platform_discard_blocks(fd, offset, tmp_step) == 0) {
|
||||
+ if (offset == 0 && !quiet) {
|
||||
+ printf("Discarding blocks...");
|
||||
+ fflush(stdout);
|
||||
+ }
|
||||
+ } else {
|
||||
+ if (offset > 0 && !quiet)
|
||||
+ printf("\n");
|
||||
return;
|
||||
+ }
|
||||
|
||||
offset += tmp_step;
|
||||
}
|
||||
- if (!quiet)
|
||||
+ if (offset > 0 && !quiet)
|
||||
printf("Done.\n");
|
||||
|
||||
}
|
|
@ -0,0 +1,64 @@
|
|||
xfs_repair: fix progress reporting
|
||||
|
||||
RHEL7 note: this is a simplified version of the upstream patch.
|
||||
|
||||
The Fixes: commit tried to avoid a segfault in case the progress timer
|
||||
went off before the first message type had been set up, but this
|
||||
had the net effect of short-circuiting the pthread start routine,
|
||||
and so the timer didn't get set up at all and we lost all fine-grained
|
||||
progress reporting.
|
||||
|
||||
The initial problem occurred when log zeroing took more time than the
|
||||
timer interval.
|
||||
|
||||
[RHEL7: we do not explicitly track log zeroing, and instead lump it into
|
||||
Phase 2, so the next part of the description is not relevant to this
|
||||
patch.]
|
||||
|
||||
So, make a new log zeroing progress item and initialize it when we first
|
||||
set up the timer thread, to be sure that if the timer goes off while we
|
||||
are still zeroing the log, it will be initialized and correct.
|
||||
|
||||
(We can't offer fine-grained status on log zeroing, so it'll go from
|
||||
zero to $LOGBLOCKS with nothing in between, but it's unlikely that log
|
||||
zeroing will take so long that this really matters.)
|
||||
|
||||
Reported-by: Leonardo Vaz <lvaz@redhat.com>
|
||||
Fixes: 7f2d6b811755 ("xfs_repair: avoid segfault if reporting progre...")
|
||||
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
|
||||
---
|
||||
|
||||
It might be nice to add progress reporting for the log zeroing, but that
|
||||
requires renumbering all these macros, and we don't/can't actually get
|
||||
any fine-grained progress at all, so probably not worth it.
|
||||
|
||||
Index: xfsprogs-4.5.0/repair/progress.c
|
||||
===================================================================
|
||||
--- xfsprogs-4.5.0.orig/repair/progress.c
|
||||
+++ xfsprogs-4.5.0/repair/progress.c
|
||||
@@ -124,7 +124,13 @@ init_progress_rpt (void)
|
||||
*/
|
||||
|
||||
pthread_mutex_init(&global_msgs.mutex, NULL);
|
||||
- global_msgs.format = NULL;
|
||||
+ /*
|
||||
+ * Ensure the format string is not NULL in case the first timer
|
||||
+ * goes off before any stage calls set_progress_msg() to set it.
|
||||
+ * Choosing PROG_FMT_SCAN_AG lumps log zeroing in with the AG scan
|
||||
+ * but that is not expected to take inordinately long.
|
||||
+ */
|
||||
+ global_msgs.format = &progress_rpt_reports[PROG_FMT_SCAN_AG];
|
||||
global_msgs.count = glob_agcount;
|
||||
global_msgs.interval = report_interval;
|
||||
global_msgs.done = prog_rpt_done;
|
||||
@@ -170,10 +176,6 @@ progress_rpt_thread (void *p)
|
||||
msg_block_t *msgp = (msg_block_t *)p;
|
||||
__uint64_t percent;
|
||||
|
||||
- /* It's possible to get here very early w/ no progress msg set */
|
||||
- if (!msgp->format)
|
||||
- return NULL;
|
||||
-
|
||||
if ((msgbuf = (char *)malloc(DURATION_BUF_SIZE)) == NULL)
|
||||
do_error (_("progress_rpt: cannot malloc progress msg buffer\n"));
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
Index: xfsprogs-4.5.0/io/attr.c
|
||||
===================================================================
|
||||
--- xfsprogs-4.5.0.orig/io/attr.c
|
||||
+++ xfsprogs-4.5.0/io/attr.c
|
||||
@@ -47,10 +47,9 @@ static struct xflags {
|
||||
{ FS_XFLAG_EXTSZINHERIT, "E", "extsz-inherit" },
|
||||
{ FS_XFLAG_NODEFRAG, "f", "no-defrag" },
|
||||
{ FS_XFLAG_FILESTREAM, "S", "filestream" },
|
||||
- { FS_XFLAG_DAX, "x", "dax" },
|
||||
{ 0, NULL, NULL }
|
||||
};
|
||||
-#define CHATTR_XFLAG_LIST "r"/*p*/"iasAdtPneEfSx"
|
||||
+#define CHATTR_XFLAG_LIST "r"/*p*/"iasAdtPneEfS"
|
||||
|
||||
static void
|
||||
lsattr_help(void)
|
||||
@@ -74,7 +73,6 @@ lsattr_help(void)
|
||||
" E -- children created in this directory inherit the extent size value\n"
|
||||
" f -- do not include this file when defragmenting the filesystem\n"
|
||||
" S -- enable filestreams allocator for this directory\n"
|
||||
-" x -- Use direct access (DAX) for data in this file\n"
|
||||
"\n"
|
||||
" Options:\n"
|
||||
" -R -- recursively descend (useful when current file is a directory)\n"
|
||||
@@ -110,7 +108,6 @@ chattr_help(void)
|
||||
" +/-E -- set/clear the extent-size inheritance flag\n"
|
||||
" +/-f -- set/clear the no-defrag flag\n"
|
||||
" +/-S -- set/clear the filestreams allocator flag\n"
|
||||
-" +/-x -- set/clear the direct access (DAX) flag\n"
|
||||
" Note1: user must have certain capabilities to modify immutable/append-only.\n"
|
||||
" Note2: immutable/append-only files cannot be deleted; removing these files\n"
|
||||
" requires the immutable/append-only flag to be cleared first.\n"
|
|
@ -1,7 +1,7 @@
|
|||
Summary: Utilities for managing the XFS filesystem
|
||||
Name: xfsprogs
|
||||
Version: 4.5.0
|
||||
Release: 19%{?dist}
|
||||
Release: 22%{?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
|
||||
|
@ -55,7 +55,18 @@ 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
|
||||
# RHEL-7.7
|
||||
Patch33: xfsprogs-4.15.0-xfs_copy-accept-CRC-version-of-ABTB_MAGIC-in-ASSERT.patch
|
||||
Patch34: xfsprogs-4.20-xfs_quota-fix-false-error-reporting-of-project-inhertance-flag.patch
|
||||
Patch35: xfsprogs-4.20-xfs_repair-initialize-non-leaf-finobt-blocks-with-co.patch
|
||||
# RHEL-7.9
|
||||
Patch36: xfsprogs-RHEL7-remove-chattr-x.patch
|
||||
Patch37: xfsprogs-5.0.0-xfs_db-refactor-metadump-handling-of-multi-fsb-objec.patch
|
||||
Patch38: xfsprogs-5.0.0-xfs_db-refactor-multi-fsb-object-detection-decision-.patch
|
||||
Patch39: xfsprogs-5.0.0-xfs_db-metadump-should-handle-symlinks-properly.patch
|
||||
Patch40: xfsprogs-5.4.0-mkfs-Break-block-discard-into-chunks-of-2-GB.patch
|
||||
Patch41: xfsprogs-5.4.0-mkfs-tidy-up-discard-notifications.patch
|
||||
Patch42: xfsprogs-5.7.0-progress-reporting-fix.patch
|
||||
|
||||
%description
|
||||
A set of commands to use the XFS filesystem, including mkfs.xfs.
|
||||
|
@ -116,6 +127,15 @@ also want to install xfsprogs.
|
|||
%patch31 -p1
|
||||
%patch32 -p1
|
||||
%patch33 -p1
|
||||
%patch34 -p1
|
||||
%patch35 -p1
|
||||
%patch36 -p1
|
||||
%patch37 -p1
|
||||
%patch38 -p1
|
||||
%patch39 -p1
|
||||
%patch40 -p1
|
||||
%patch41 -p1
|
||||
%patch42 -p1
|
||||
|
||||
%build
|
||||
export tagname=CC
|
||||
|
@ -181,6 +201,18 @@ rm -rf $RPM_BUILD_ROOT
|
|||
%{_libdir}/*.so
|
||||
|
||||
%changelog
|
||||
* Tue May 26 2020 2020 Eric Sandeen <sandeen@redhat.com> 4.5.0-22
|
||||
- xfs_repair: fix progress reporting (#1813557)
|
||||
|
||||
* Mon May 18 2020 Eric Sandeen <sandeen@redhat.com> 4.5.0-21
|
||||
- mkfs.xfs: make device discard interruptable, print notice (#1769786)
|
||||
- xfs_io: remove +/-x flag from chattr, not supported in kernel (#1630112)
|
||||
- xfs_metadump: fix symlink handling (#1693138)
|
||||
|
||||
* Mon Feb 11 2019 Eric Sandeen <sandeen@redhat.com> 4.5.0-20
|
||||
- xfs_quota: fix errors if project flag is not set on regular files (#1663502)
|
||||
- xfs_repair: initialize non-leaf finobt blocks with correct magic (#1670154)
|
||||
|
||||
* Mon Feb 11 2019 Eric Sandeen <sandeen@redhat.com> 4.5.0-19
|
||||
- xfs_copy: accept CRC version of ABTB_MAGIC in ASSERT (#1641023)
|
||||
|
||||
|
|
Loading…
Reference in New Issue