Commit Graph

11 Commits

Author SHA1 Message Date
Bill O'Donnell ed078cc875 xfs: reduce transaction reservations with reflink
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2167832

commit b037c4eed2df4568a7702cd512d26625962f95b9
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Mon Apr 25 18:38:14 2022 -0700

    xfs: reduce transaction reservations with reflink

    Before to the introduction of deferred refcount operations, reflink
    would try to cram refcount btree updates into the same transaction as an
    allocation or a free event.  Mainline XFS has never actually done that,
    but we never refactored the transaction reservations to reflect that we
    now do all refcount updates in separate transactions.  Fix this to
    reduce the transaction reservation size even farther, so that between
    this patch and the previous one, we reduce the tr_write and tr_itruncate
    sizes by 66%.

    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Dave Chinner <dchinner@redhat.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>

Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
2023-05-18 11:11:11 -05:00
Bill O'Donnell 93f71299e6 xfs: reduce the absurdly large log operation count
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2167832

commit 4ecf9e7c69edcb8f5b98df471dd026419b881d2b
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Mon Apr 25 18:38:14 2022 -0700

    xfs: reduce the absurdly large log operation count

    Back in the early days of reflink and rmap development I set the
    transaction reservation sizes to be overly generous for rmap+reflink
    filesystems, and a little under-generous for rmap-only filesystems.

    Since we don't need *eight* transaction rolls to handle three new log
    intent items, decrease the logcounts to what we actually need, and amend
    the shadow reservation computation function to reflect what we used to
    do so that the minimum log size doesn't change.

    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Dave Chinner <dchinner@redhat.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>

Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
2023-05-18 11:11:11 -05:00
Bill O'Donnell f077f90354 xfs: report "max_resp" used for min log size computation
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2167832

commit 918247ce541995dba05391cf14d6061cf0844866
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Mon Apr 25 18:38:13 2022 -0700

    xfs: report "max_resp" used for min log size computation

    Move the tracepoint that computes the size of the transaction used to
    compute the minimum log size into xfs_log_get_max_trans_res so that we
    only have to compute this stuff once.

    Leave xfs_log_get_max_trans_res as a non-static function so that xfs_db
    can call it to report the results of the userspace computation of the
    same value to diagnose mkfs/kernel misinteractions.

    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Dave Chinner <dchinner@redhat.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>

Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
2023-05-18 11:11:11 -05:00
Bill O'Donnell f4bacee8e5 xfs: create shadow transaction reservations for computing minimum log size
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2167832

commit 52d8ea4f2406c14d632a0e7f816bbb18d8c3e9ed
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Mon Apr 25 18:38:13 2022 -0700

    xfs: create shadow transaction reservations for computing minimum log size

    Every time someone changes the transaction reservation sizes, they
    introduce potential compatibility problems if the changes affect the
    minimum log size that we validate at mount time.  If the minimum log
    size gets larger (which should be avoided because doing so presents a
    serious risk of log livelock), filesystems created with old mkfs will
    not mount on a newer kernel; if the minimum size shrinks, filesystems
    created with newer mkfs will not mount on older kernels.

    Therefore, enable the creation of a shadow log reservation structure
    where we can "undo" the effects of tweaks when computing minimum log
    sizes.  These shadow reservations should never be used in practice, but
    they insulate us from perturbations in minimum log size.

    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Dave Chinner <dchinner@redhat.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>

Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
2023-05-18 11:11:10 -05:00
Brian Foster d54a790d1d xfs: replace xfs_sb_version checks with feature flag checks
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2083143
Upstream Status: linux.git

commit 38c26bfd90e1999650d5ef40f90d721f05916643
Author: Dave Chinner <dchinner@redhat.com>
Date:   Wed Aug 18 18:46:37 2021 -0700

    xfs: replace xfs_sb_version checks with feature flag checks

    Convert the xfs_sb_version_hasfoo() to checks against
    mp->m_features. Checks of the superblock itself during disk
    operations (e.g. in the read/write verifiers and the to/from disk
    formatters) are not converted - they operate purely on the
    superblock state. Everything else should use the mount features.

    Large parts of this conversion were done with sed with commands like
    this:

    for f in `git grep -l xfs_sb_version_has fs/xfs/*.c`; do
            sed -i -e 's/xfs_sb_version_has\(.*\)(&\(.*\)->m_sb)/xfs_has_\1(\2)/' $f
    done

    With manual cleanups for things like "xfs_has_extflgbit" and other
    little inconsistencies in naming.

    The result is ia lot less typing to check features and an XFS binary
    size reduced by a bit over 3kB:

    $ size -t fs/xfs/built-in.a
            text       data     bss     dec     hex filenam
    before  1130866  311352     484 1442702  16038e (TOTALS)
    after   1127727  311352     484 1439563  15f74b (TOTALS)

    Signed-off-by: Dave Chinner <dchinner@redhat.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Darrick J. Wong <djwong@kernel.org>

Signed-off-by: Brian Foster <bfoster@redhat.com>
2022-08-25 08:11:34 -04:00
Eric Sandeen 250d4b4c40 xfs: remove unused header files
There are many, many xfs header files which are included but
unneeded (or included twice) in the xfs code, so remove them.

nb: xfs_linux.h includes about 9 headers for everyone, so those
explicit includes get removed by this.  I'm not sure what the
preference is, but if we wanted explicit includes everywhere,
a followup patch could remove those xfs_*.h includes from
xfs_linux.h and move them into the files that need them.
Or it could be left as-is.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
2019-06-28 19:30:43 -07:00
Dave Chinner 0b61f8a407 xfs: convert to SPDX license tags
Remove the verbose license text from XFS files and replace them
with SPDX tags. This does not change the license of any of the code,
merely refers to the common, up-to-date license files in LICENSES/

This change was mostly scripted. fs/xfs/Makefile and
fs/xfs/libxfs/xfs_fs.h were modified by hand, the rest were detected
and modified by the following command:

for f in `git grep -l "GNU General" fs/xfs/` ; do
	echo $f
	cat $f | awk -f hdr.awk > $f.new
	mv -f $f.new $f
done

And the hdr.awk script that did the modification (including
detecting the difference between GPL-2.0 and GPL-2.0+ licenses)
is as follows:

$ cat hdr.awk
BEGIN {
	hdr = 1.0
	tag = "GPL-2.0"
	str = ""
}

/^ \* This program is free software/ {
	hdr = 2.0;
	next
}

/any later version./ {
	tag = "GPL-2.0+"
	next
}

/^ \*\// {
	if (hdr > 0.0) {
		print "// SPDX-License-Identifier: " tag
		print str
		print $0
		str=""
		hdr = 0.0
		next
	}
	print $0
	next
}

/^ \* / {
	if (hdr > 1.0)
		next
	if (hdr > 0.0) {
		if (str != "")
			str = str "\n"
		str = str $0
		next
	}
	print $0
	next
}

/^ \*/ {
	if (hdr > 0.0)
		next
	print $0
	next
}

// {
	if (hdr > 0.0) {
		if (str != "")
			str = str "\n"
		str = str $0
		next
	}
	print $0
}

END { }
$

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
2018-06-06 14:17:53 -07:00
Darrick J. Wong b872af2c87 xfs: trace log reservations at mount time
At each mount, emit the transaction reservation type information via
tracepoints.  This makes it easier to compare the log reservation info
calculated by the kernel and xfsprogs so that we can more easily diagnose
minimum log size failures on freshly formatted filesystems.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
2018-01-08 10:54:47 -08:00
Christoph Hellwig bb58e6188a xfs: move most of xfs_sb.h to xfs_format.h
More on-disk format consolidation.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
2014-11-28 14:27:09 +11:00
Christoph Hellwig 4fb6e8ade2 xfs: merge xfs_ag.h into xfs_format.h
More on-disk format consolidation.  A few declarations that weren't on-disk
format related move into better suitable spots.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
2014-11-28 14:25:04 +11:00
Dave Chinner 30f712c9dd libxfs: move source files
Move all the source files that are shared with userspace into
libxfs/. This is done as one big chunk simpy to get it done
quickly

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
2014-06-25 14:57:53 +10:00