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
History
File Mode Size
Kconfig -rw-r--r-- 1.1 KB
Makefile -rw-r--r-- 308 bytes
acl.c -rw-r--r-- 6.3 KB
addr.c -rw-r--r-- 41.8 KB
cache.c -rw-r--r-- 9.5 KB
cache.h -rw-r--r-- 4.6 KB
caps.c -rw-r--r-- 92.9 KB
ceph_frag.c -rw-r--r-- 365 bytes
debugfs.c -rw-r--r-- 7.6 KB
dir.c -rw-r--r-- 36.0 KB
export.c -rw-r--r-- 5.8 KB
file.c -rw-r--r-- 34.4 KB
inode.c -rw-r--r-- 54.2 KB
ioctl.c -rw-r--r-- 7.5 KB
ioctl.h -rw-r--r-- 3.6 KB
locks.c -rw-r--r-- 9.8 KB
mds_client.c -rw-r--r-- 96.2 KB
mds_client.h -rw-r--r-- 12.4 KB
mdsmap.c -rw-r--r-- 4.5 KB
snap.c -rw-r--r-- 26.4 KB
strings.c -rw-r--r-- 4.0 KB
super.c -rw-r--r-- 25.4 KB
super.h -rw-r--r-- 28.9 KB
xattr.c -rw-r--r-- 27.4 KB

back to top