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
Tip revision: ba117213554bc747561c5b7bf274d60ac93b8598 authored by Josef Bacik on 13 March 2015, 19:01:24 UTC
Btrfs: account merges/splits properly
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 |
Computing file changes ...