• MITSUNARI Shigeo's avatar
    fs/block_dev.c: page cache wrongly left invalidated after revalidate_disk() · 7630b661
    MITSUNARI Shigeo authored
    We found that bdev->bd_invalidated was left set once revalidate_disk()
    is called, which results in page cache flush every time that device is
    open.
    
    Specifically, we found this problem in MD block device.  Once we resize
    a MD device, mdadm --monitor periodically flush all page cache for that
    device every 60 or 1000 seconds when it opens the device.
    
    This bug lies since at least 3.2.0 till the latest kernel(3.6.2).  Patch
    is attached.
    
    The following steps will reproduce the problem.
    
    1. prepair a block device (eg /dev/sdb).
    
    2. create two partitions:
    
       sudo parted /dev/sdb
       mklabel gpt
       mkpart primary 0% 50%
       mkpart primary 50% 100%
    
    3. create a md device.
    
       sudo mdadm -C /dev/md/hoge -l 1 -n 2 -e 1.2 --assume-clean --auto=md --symlink=no /dev/sdb1 /dev/sdb2
    
    4. create file system and mount it
    
       sudo mkfs.ext3 /dev/md/hoge
       sudo mkdir /mnt/test
       sudo mount /dev/md/hoge /mnt/test
    
    5. try to resize the device
    
       sudo mdadm -G /dev/md/hoge --size=max
    
    6. create a file to fill file cache.
    
      sudo dd if=/dev/urandom of=/mnt/test/data bs=1M count=10
    
    and verify the current status of file by free command.
    
    7. mdadm monitor will open the md device every 1000 seconds and you
       will find all file cache on the device are cleared.
    
    The timing can be reduced by the following steps.
    
    a) kill mdadm and restart it with --delay option
    
       /sbin/mdadm --monitor --delay=30 --pid-file /var/run/mdadm/monitor.pid --daemonise --scan --syslog
    
    or open the md device directly.
    
       sudo dd if=/dev/md/hoge of=/dev/null bs=4096 count=1
    Signed-off-by: default avatarMITSUNARI Shigeo <herumi@nifty.com>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: Jeff Moyer <jmoyer@redhat.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    7630b661
block_dev.c 42 KB