Revision fd45e4784164d1017521086524e3442318c67370 authored by Dave Chinner on 02 January 2010, 02:38:56 UTC, committed by Alex Elder on 10 January 2010, 18:22:02 UTC
When we search for and find a busy extent during allocation we
force the log out to ensure the extent free transaction is on
disk before the allocation transaction. The current implementation
has a subtle bug in it--it does not handle multiple overlapping
ranges.

That is, if we free lots of little extents into a single
contiguous extent, then allocate the contiguous extent, the busy
search code stops searching at the first extent it finds that
overlaps the allocated range. It then uses the commit LSN of the
transaction to force the log out to.

Unfortunately, the other busy ranges might have more recent
commit LSNs than the first busy extent that is found, and this
results in xfs_alloc_search_busy() returning before all the
extent free transactions are on disk for the range being
allocated. This can lead to potential metadata corruption or
stale data exposure after a crash because log replay won't replay
all the extent free transactions that cover the allocation range.

Modified-by: Alex Elder <aelder@sgi.com>

(Dropped the "found" argument from the xfs_alloc_busysearch trace
event.)

Signed-off-by: Dave Chinner <david@fromorbit.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Alex Elder <aelder@sgi.com>
1 parent 44e08c4
History
File Mode Size
basic
dtc
genksyms
kconfig
ksymoops
mod
package
rt-tester
selinux
tracing
.gitignore -rw-r--r-- 85 bytes
Kbuild.include -rw-r--r-- 9.5 KB
Lindent -rwxr-xr-x 460 bytes
Makefile -rw-r--r-- 934 bytes
Makefile.build -rw-r--r-- 11.9 KB
Makefile.clean -rw-r--r-- 3.2 KB
Makefile.fwinst -rw-r--r-- 2.0 KB
Makefile.headersinst -rw-r--r-- 3.3 KB
Makefile.host -rw-r--r-- 6.5 KB
Makefile.lib -rw-r--r-- 8.8 KB
Makefile.modbuiltin -rw-r--r-- 1.7 KB
Makefile.modinst -rw-r--r-- 1.0 KB
Makefile.modpost -rw-r--r-- 5.0 KB
bin2c.c -rw-r--r-- 702 bytes
binoffset.c -rw-r--r-- 3.9 KB
bloat-o-meter -rwxr-xr-x 1.7 KB
bootgraph.pl -rw-r--r-- 5.6 KB
checkincludes.pl -rwxr-xr-x 1.7 KB
checkkconfigsymbols.sh -rwxr-xr-x 1.8 KB
checkpatch.pl -rwxr-xr-x 72.0 KB
checkstack.pl -rwxr-xr-x 5.2 KB
checksyscalls.sh -rwxr-xr-x 5.5 KB
checkversion.pl -rwxr-xr-x 1.8 KB
cleanfile -rwxr-xr-x 3.4 KB
cleanpatch -rwxr-xr-x 5.0 KB
config -rwxr-xr-x 2.6 KB
conmakehash.c -rw-r--r-- 6.0 KB
decodecode -rwxr-xr-x 1.7 KB
diffconfig -rwxr-xr-x 3.6 KB
export_report.pl -rw-r--r-- 4.2 KB
extract-ikconfig -rwxr-xr-x 1.9 KB
gcc-version.sh -rw-r--r-- 819 bytes
gcc-x86_32-has-stack-protector.sh -rw-r--r-- 183 bytes
gcc-x86_64-has-stack-protector.sh -rw-r--r-- 199 bytes
gen_initramfs_list.sh -rw-r--r-- 7.0 KB
get_maintainer.pl -rwxr-xr-x 29.2 KB
gfp-translate -rw-r--r-- 1.5 KB
headerdep.pl -rwxr-xr-x 3.5 KB
headers.sh -rwxr-xr-x 512 bytes
headers_check.pl -rw-r--r-- 2.7 KB
headers_install.pl -rw-r--r-- 1.5 KB
kallsyms.c -rw-r--r-- 15.1 KB
kernel-doc -rwxr-xr-x 61.1 KB
makelst -rwxr-xr-x 773 bytes
markup_oops.pl -rw-r--r-- 7.5 KB
mkcompile_h -rwxr-xr-x 2.6 KB
mkmakefile -rw-r--r-- 1.1 KB
mksysmap -rw-r--r-- 1.3 KB
mkuboot.sh -rwxr-xr-x 379 bytes
mkversion -rw-r--r-- 74 bytes
module-common.lds -rw-r--r-- 210 bytes
namespace.pl -rwxr-xr-x 13.1 KB
patch-kernel -rwxr-xr-x 9.8 KB
pnmtologo.c -rw-r--r-- 11.7 KB
profile2linkerlist.pl -rw-r--r-- 378 bytes
recordmcount.pl -rwxr-xr-x 17.1 KB
setlocalversion -rwxr-xr-x 2.0 KB
show_delta -rwxr-xr-x 3.0 KB
tags.sh -rwxr-xr-x 4.2 KB
unifdef.c -rw-r--r-- 31.6 KB
ver_linux -rwxr-xr-x 3.1 KB

back to top