No description
  • C 96.8%
  • Assembly 0.9%
  • Rust 0.7%
  • Shell 0.6%
  • Python 0.5%
  • Other 0.3%
Find a file
Chandan Babu R 81fbc5f930 xfs: fix online repair block reaping [v26.1]
These patches fix a few problems that I noticed in the code that deals
 with old btree blocks after a successful repair.
 
 First, I observed that it is possible for repair to incorrectly
 invalidate and delete old btree blocks if they were crosslinked.  The
 solution here is to consult the reverse mappings for each block in the
 extent -- singly owned blocks are invalidated and freed, whereas for
 crosslinked blocks, we merely drop the incorrect reverse mapping.
 
 A largeish change in this patchset is moving the reaping code to a
 separate file, because the code are mostly interrelated static
 functions.  For now this also drops the ability to reap file blocks,
 which will return when we add the bmbt repair functions.
 
 Second, we convert the reap function to use EFIs so that we can commit
 to freeing as many blocks in as few transactions as we dare.  We would
 like to free as many old blocks as we can in the same transaction that
 commits the new structure to the ondisk filesystem to minimize the
 number of blocks that leak if the system crashes before the repair fully
 completes.
 
 The third change made in this series is to avoid tripping buffer cache
 assertions if we're merely scanning the buffer cache for buffers to
 invalidate, and find a non-stale buffer of the wrong length.  This is
 primarily cosmetic, but makes my life easier.
 
 The fourth change restructures the reaping code to try to process as many
 blocks in one go as possible, to reduce logging traffic.
 
 The last change switches the reaping mechanism to use per-AG bitmaps
 defined in a previous patchset.  This should reduce type confusion when
 reading the source code.
 
 This has been running on the djcloud for years with no problems.  Enjoy!
 
 Signed-off-by: Darrick J. Wong <djwong@kernel.org>
 -----BEGIN PGP SIGNATURE-----
 
 iHUEABYKAB0WIQQ2qTKExjcn+O1o2YRKO3ySh0YRpgUCZNT+WAAKCRBKO3ySh0YR
 pt1nAQDn4pjj8ugmH3mcbwE6pqOde52xvApWD6HM2gz7CJa17gEAyGNQu2tw8I15
 MJ15sGUq6LaNWBF5kZjLt3qpWykoLgk=
 =sVzo
 -----END PGP SIGNATURE-----

Merge tag 'repair-reap-fixes-6.6_2023-08-10' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux into xfs-6.6-mergeA

xfs: fix online repair block reaping

These patches fix a few problems that I noticed in the code that deals
with old btree blocks after a successful repair.

First, I observed that it is possible for repair to incorrectly
invalidate and delete old btree blocks if they were crosslinked.  The
solution here is to consult the reverse mappings for each block in the
extent -- singly owned blocks are invalidated and freed, whereas for
crosslinked blocks, we merely drop the incorrect reverse mapping.

A largeish change in this patchset is moving the reaping code to a
separate file, because the code are mostly interrelated static
functions.  For now this also drops the ability to reap file blocks,
which will return when we add the bmbt repair functions.

Second, we convert the reap function to use EFIs so that we can commit
to freeing as many blocks in as few transactions as we dare.  We would
like to free as many old blocks as we can in the same transaction that
commits the new structure to the ondisk filesystem to minimize the
number of blocks that leak if the system crashes before the repair fully
completes.

The third change made in this series is to avoid tripping buffer cache
assertions if we're merely scanning the buffer cache for buffers to
invalidate, and find a non-stale buffer of the wrong length.  This is
primarily cosmetic, but makes my life easier.

The fourth change restructures the reaping code to try to process as many
blocks in one go as possible, to reduce logging traffic.

The last change switches the reaping mechanism to use per-AG bitmaps
defined in a previous patchset.  This should reduce type confusion when
reading the source code.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Chandan Babu R <chandan.babu@oracle.com>

* tag 'repair-reap-fixes-6.6_2023-08-10' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux:
  xfs: use per-AG bitmaps to reap unused AG metadata blocks during repair
  xfs: reap large AG metadata extents when possible
  xfs: allow scanning ranges of the buffer cache for live buffers
  xfs: rearrange xrep_reap_block to make future code flow easier
  xfs: use deferred frees to reap old btree blocks
  xfs: only allow reaping of per-AG blocks in xrep_reap_extents
  xfs: only invalidate blocks if we're going to free them
  xfs: move the post-repair block reaping code to a separate file
  xfs: cull repair code that will never get used
History 2023-08-18 12:45:06 +05:30
arch Kbuild fixes for v6.5 (2nd) 2023-08-13 08:56:24 -07:00
block block-6.5-2023-08-11 2023-08-11 12:14:08 -07:00
certs KEYS: Add missing function documentation 2023-04-24 16:15:52 +03:00
crypto crypto: algif_hash - Fix race between MORE and non-MORE sends 2023-07-08 22:48:42 +10:00
Documentation xfs: maintainer transition for 6.6 [v3] 2023-08-18 12:26:31 +05:30
drivers platform-drivers-x86 for v6.5-4 2023-08-13 08:50:26 -07:00
fs xfs: fix online repair block reaping [v26.1] 2023-08-18 12:45:06 +05:30
include locking: remove spin_lock_prefetch 2023-08-12 09:18:47 -07:00
init Kbuild updates for v6.5 2023-07-01 09:24:31 -07:00
io_uring io_uring/parisc: Adjust pgoff in io_uring mmap() for parisc 2023-08-08 12:37:01 -06:00
ipc Merge branch 'work.namespace' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2023-02-24 19:20:07 -08:00
kernel Power management fixes for 6.5-rc6 2023-08-11 12:24:22 -07:00
lib 14 hotfixes. 11 of these are cc:stable and the remainder address post-6.4 2023-08-11 14:19:20 -07:00
LICENSES LICENSES: Add the copyleft-next-0.3.1 license 2022-11-08 15:44:01 +01:00
mm 14 hotfixes. 11 of these are cc:stable and the remainder address post-6.4 2023-08-11 14:19:20 -07:00
net Including fixes from netfilter, wireless and bpf. 2023-08-10 12:37:24 -07:00
rust rust: fix bindgen build error with UBSAN_BOUNDS_STRICT 2023-08-04 17:10:50 +02:00
samples arm64: ftrace: Add direct call trampoline samples support 2023-07-10 17:51:54 -04:00
scripts Kbuild fixes for v6.5 (2nd) 2023-08-13 08:56:24 -07:00
security sysctl: set variable key_sysctls storage-class-specifier to static 2023-08-07 17:55:54 +00:00
sound ASoC: Fixes for v6.5 2023-07-27 14:54:23 +02:00
tools Char/Misc driver fixes for 6.5-rc6 2023-08-12 09:03:15 -07:00
usr initramfs: Encode dependency on KBUILD_BUILD_TIMESTAMP 2023-06-06 17:54:49 +09:00
virt KVM: Grab a reference to KVM for VM and vCPU stats file descriptors 2023-07-29 11:05:28 -04:00
.clang-format iommu: Add for_each_group_device() 2023-05-23 08:15:51 +02:00
.cocciconfig scripts: add Linux .cocciconfig for coccinelle 2016-07-22 12:13:39 +02:00
.get_maintainer.ignore get_maintainer: add Alan to .get_maintainer.ignore 2022-08-20 15:17:44 -07:00
.gitattributes .gitattributes: set diff driver for Rust source code files 2023-05-31 17:48:25 +02:00
.gitignore Revert ".gitignore: ignore *.cover and *.mbx" 2023-07-04 15:05:12 -07:00
.mailmap mailmap: update remaining active codeaurora.org email addresses 2023-07-27 13:07:05 -07:00
.rustfmt.toml rust: add .rustfmt.toml 2022-09-28 09:02:20 +02:00
COPYING COPYING: state that all contributions really are covered by this file 2020-02-10 13:32:20 -08:00
CREDITS - Address -Wmissing-prototype warnings 2023-06-26 16:43:54 -07:00
Kbuild Kbuild updates for v6.1 2022-10-10 12:00:45 -07:00
Kconfig kbuild: ensure full rebuild when the compiler is updated 2020-05-12 13:28:33 +09:00
MAINTAINERS xfs: maintainer transition for 6.6 [v3] 2023-08-18 12:26:31 +05:30
Makefile Linux 6.5-rc6 2023-08-13 11:29:55 -07:00
README Drop all 00-INDEX files from Documentation/ 2018-09-09 15:08:58 -06:00

Linux kernel
============

There are several guides for kernel developers and users. These guides can
be rendered in a number of formats, like HTML and PDF. Please read
Documentation/admin-guide/README.rst first.

In order to build the documentation, use ``make htmldocs`` or
``make pdfdocs``.  The formatted documentation can also be read online at:

    https://www.kernel.org/doc/html/latest/

There are various text files in the Documentation/ subdirectory,
several of them using the Restructured Text markup notation.

Please read the Documentation/process/changes.rst file, as it contains the
requirements for building and running the kernel, and information about
the problems which may result by upgrading your kernel.