• Liu Bo's avatar
    Btrfs: fix recursive defragment with autodefrag option · 4cb13e5d
    Liu Bo authored
    $ mkfs.btrfs disk
    $ mount disk /mnt -o autodefrag
    $ dd if=/dev/zero of=/mnt/foobar bs=4k count=10 2>/dev/null && sync
    $ for i in `seq 9 -2 0`; do dd if=/dev/zero of=/mnt/foobar bs=4k count=1 \
      seek=$i conv=notrunc 2> /dev/null; done && sync
    
    then we'll get to defrag "foobar" again and again.
    So does option "-o autodefrag,compress".
    
    Reasons:
    When the cleaner kthread gets to fetch inodes from the defrag tree and defrag
    them, it will dirty pages and submit them, this will comes to another DATA COW
    where the processing inode will be inserted to the defrag tree again.
    
    This patch sets a rule for COW code, i.e. insert an inode when we're really
    going to make some defragments.
    Signed-off-by: default avatarLiu Bo <liubo2009@cn.fujitsu.com>
    Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
    4cb13e5d
inode.c 202 KB