bcachefs: Fix for leaking of reflinked extents
authorKent Overstreet <kent.overstreet@gmail.com>
Thu, 14 Oct 2021 13:54:47 +0000 (09:54 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:14 +0000 (17:09 -0400)
commit6d76aefea1902a11c47e20fec5495d30a39891f3
tree3492b62e7853384faad5e0b97a4c5f7c60f7d945
parentbfe88863cf3063204fc49a04307fa6635554d6e3
bcachefs: Fix for leaking of reflinked extents

When a reflink pointer points to only part of an indirect extent, and
then that indirect extent is fragmented (e.g. by copygc), if the reflink
pointer only points to one of the fragments we leak a reference.

Fix this by storing front/back pad values in reflink pointers - when
inserting reflink pointesr, we initialize them to cover the full range
of the indirect extents we reference.

Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
fs/bcachefs/bcachefs_format.h
fs/bcachefs/buckets.c
fs/bcachefs/fsck.c
fs/bcachefs/reflink.c