https://github.com/torvalds/linux
Revision ba117213554bc747561c5b7bf274d60ac93b8598 authored by Josef Bacik on 13 March 2015, 19:01:24 UTC, committed by Josef Bacik on 17 March 2015, 20:28:21 UTC
My fix

Btrfs: fix merge delalloc logic

only fixed half of the problems, it didn't fix the case where we have two large
extents on either side and then join them together with a new small extent.  We
need to instead keep track of how many extents we have accounted for with each
side of the new extent, and then see how many extents we need for the new large
extent.  If they match then we know we need to keep our reservation, otherwise
we need to drop our reservation.  This shows up with a case like this

[BTRFS_MAX_EXTENT_SIZE+4K][4K HOLE][BTRFS_MAX_EXTENT_SIZE+4K]

Previously the logic would have said that the number extents required for the
new size (3) is larger than the number of extents required for the largest side
(2) therefore we need to keep our reservation.  But this isn't the case, since
both sides require a reservation of 2 which leads to 4 for the whole range
currently reserved, but we only need 3, so we need to drop one of the
reservations.  The same problem existed for splits, we'd think we only need 3
extents when creating the hole but in reality we need 4.  Thanks,

Signed-off-by: Josef Bacik <jbacik@fb.com>
1 parent dcdf7f6
History
Tip revision: ba117213554bc747561c5b7bf274d60ac93b8598 authored by Josef Bacik on 13 March 2015, 19:01:24 UTC
Btrfs: account merges/splits properly
Tip revision: ba11721
File Mode Size
basic
coccinelle
dtc
genksyms
kconfig
ksymoops
mod
package
rt-tester
selinux
tracing
.gitignore -rw-r--r-- 116 bytes
Kbuild.include -rw-r--r-- 10.9 KB
Lindent -rwxr-xr-x 460 bytes
Makefile -rw-r--r-- 1.4 KB
Makefile.asm-generic -rw-r--r-- 683 bytes
Makefile.build -rw-r--r-- 13.4 KB
Makefile.clean -rw-r--r-- 2.9 KB
Makefile.dtbinst -rw-r--r-- 1.4 KB
Makefile.extrawarn -rw-r--r-- 2.4 KB
Makefile.fwinst -rw-r--r-- 2.0 KB
Makefile.headersinst -rw-r--r-- 4.7 KB
Makefile.help -rw-r--r-- 68 bytes
Makefile.host -rw-r--r-- 4.5 KB
Makefile.lib -rw-r--r-- 13.7 KB
Makefile.modbuiltin -rw-r--r-- 1.8 KB
Makefile.modinst -rw-r--r-- 1.2 KB
Makefile.modpost -rw-r--r-- 5.2 KB
Makefile.modsign -rw-r--r-- 1005 bytes
analyze_suspend.py -rwxr-xr-x 117.6 KB
asn1_compiler.c -rw-r--r-- 33.8 KB
bloat-o-meter -rwxr-xr-x 1.9 KB
bootgraph.pl -rwxr-xr-x 6.3 KB
checkincludes.pl -rwxr-xr-x 1.8 KB
checkkconfigsymbols.py -rw-r--r-- 4.6 KB
checkpatch.pl -rwxr-xr-x 152.5 KB
checkstack.pl -rwxr-xr-x 5.4 KB
checksyscalls.sh -rwxr-xr-x 5.6 KB
checkversion.pl -rwxr-xr-x 1.9 KB
cleanfile -rwxr-xr-x 3.4 KB
cleanpatch -rwxr-xr-x 5.0 KB
coccicheck -rwxr-xr-x 4.6 KB
config -rwxr-xr-x 4.5 KB
conmakehash.c -rw-r--r-- 6.0 KB
decode_stacktrace.sh -rwxr-xr-x 3.0 KB
decodecode -rwxr-xr-x 2.1 KB
depmod.sh -rwxr-xr-x 1.7 KB
diffconfig -rwxr-xr-x 3.7 KB
docproc.c -rw-r--r-- 13.8 KB
export_report.pl -rwxr-xr-x 4.5 KB
extract-ikconfig -rwxr-xr-x 1.6 KB
extract-vmlinux -rwxr-xr-x 1.6 KB
gcc-goto.sh -rwxr-xr-x 495 bytes
gcc-ld -rwxr-xr-x 676 bytes
gcc-version.sh -rwxr-xr-x 822 bytes
gcc-x86_32-has-stack-protector.sh -rwxr-xr-x 184 bytes
gcc-x86_64-has-stack-protector.sh -rwxr-xr-x 200 bytes
gen_initramfs_list.sh -rwxr-xr-x 7.9 KB
get_maintainer.pl -rwxr-xr-x 57.3 KB
gfp-translate -rwxr-xr-x 1.7 KB
headerdep.pl -rwxr-xr-x 3.5 KB
headers.sh -rwxr-xr-x 477 bytes
headers_check.pl -rwxr-xr-x 3.6 KB
headers_install.sh -rwxr-xr-x 1.3 KB
kallsyms.c -rw-r--r-- 16.5 KB
kernel-doc -rwxr-xr-x 72.1 KB
ld-version.sh -rwxr-xr-x 205 bytes
link-vmlinux.sh -rwxr-xr-x 5.7 KB
makelst -rwxr-xr-x 773 bytes
markup_oops.pl -rwxr-xr-x 8.1 KB
mkcompile_h -rwxr-xr-x 2.5 KB
mkmakefile -rwxr-xr-x 1.2 KB
mksysmap -rwxr-xr-x 1.3 KB
mkuboot.sh -rwxr-xr-x 379 bytes
mkversion -rw-r--r-- 74 bytes
module-common.lds -rw-r--r-- 737 bytes
namespace.pl -rwxr-xr-x 13.0 KB
objdiff -rwxr-xr-x 2.7 KB
patch-kernel -rwxr-xr-x 9.9 KB
pnmtologo.c -rw-r--r-- 11.9 KB
profile2linkerlist.pl -rwxr-xr-x 375 bytes
recordmcount.c -rw-r--r-- 12.4 KB
recordmcount.h -rw-r--r-- 16.4 KB
recordmcount.pl -rwxr-xr-x 17.7 KB
setlocalversion -rwxr-xr-x 3.9 KB
show_delta -rwxr-xr-x 3.0 KB
sign-file -rwxr-xr-x 12.2 KB
sortextable.c -rw-r--r-- 7.6 KB
sortextable.h -rw-r--r-- 5.5 KB
spelling.txt -rw-r--r-- 20.8 KB
tags.sh -rwxr-xr-x 10.2 KB
unifdef.c -rw-r--r-- 34.8 KB
ver_linux -rwxr-xr-x 3.1 KB
xz_wrap.sh -rwxr-xr-x 562 bytes

back to top