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 |
---|---|---|
README.txt | -rw-r--r-- | 1.2 KB |
atomic-ops.txt | -rw-r--r-- | 4.5 KB |
booting.txt | -rw-r--r-- | 5.8 KB |
clock.txt | -rw-r--r-- | 2.4 KB |
configuring.txt | -rw-r--r-- | 4.0 KB |
features.txt | -rw-r--r-- | 10.6 KB |
gdbinit | -rw-r--r-- | 11.4 KB |
gdbstub.txt | -rw-r--r-- | 4.7 KB |
kernel-ABI.txt | -rw-r--r-- | 9.2 KB |
mmu-layout.txt | -rw-r--r-- | 13.9 KB |
![swh spinner](/static/img/swh-spinner.gif)
Computing file changes ...