Revision 289454ad26a2d752e04b07234a175feda9ec0f4e authored by Naohiro Aota on 05 January 2015, 16:01:03 UTC, committed by Chris Mason on 03 February 2015, 03:24:51 UTC
After submit_one_bio(), `bio' can go away. However submit_extent_page() leave `bio' referable if submit_one_bio() failed (e.g. -ENOMEM on OOM). It will cause invalid paging request when submit_extent_page() is called next time. I reproduced ENOMEM case with the following script (need CONFIG_FAIL_PAGE_ALLOC, and CONFIG_FAULT_INJECTION_DEBUG_FS). #!/bin/bash dmesgout=dmesg.txt start=100000 end=300000 step=1000 # btrfs options device=/dev/vdb1 directory=/mnt/btrfs # fault-injection options percent=100 times=3 mkdir -p $directory || exit 1 mount -o compress $device $directory || exit 1 rm -f $directory/file || exit 1 dd if=/dev/zero of=$directory/file bs=1M count=512 || exit 1 for interval in `seq $start $step $end`; do dmesg -C echo 1 > /proc/sys/vm/drop_caches sync export FAILCMD_TYPE=fail_page_alloc ./failcmd.sh -p $percent -t $times -i $interval \ --ignore-gfp-highmem=N --ignore-gfp-wait=N --min-order=0 \ -- \ cat $directory/file > /dev/null dmesg > ${dmesgout} if grep -q BUG: ${dmesgout}; then cat ${dmesgout} exit 1 fi done umount $directory exit 0 Signed-off-by: Naohiro Aota <naota@elisp.net> Tested-by: Satoru Takeuchi <takeuchi_satoru@jp.fujitsu.com> Signed-off-by: Chris Mason <clm@fb.com>
1 parent de554a4
File | Mode | Size |
---|---|---|
.gitignore | -rw-r--r-- | 42 bytes |
Makefile | -rw-r--r-- | 413 bytes |
genksyms.c | -rw-r--r-- | 22.4 KB |
genksyms.h | -rw-r--r-- | 2.7 KB |
keywords.gperf | -rw-r--r-- | 1.6 KB |
keywords.hash.c_shipped | -rw-r--r-- | 8.6 KB |
lex.l | -rw-r--r-- | 9.4 KB |
lex.lex.c_shipped | -rw-r--r-- | 57.1 KB |
parse.tab.c_shipped | -rw-r--r-- | 73.0 KB |
parse.tab.h_shipped | -rw-r--r-- | 2.9 KB |
parse.y | -rw-r--r-- | 10.9 KB |
![swh spinner](/static/img/swh-spinner.gif)
Computing file changes ...