• Miao Xie's avatar
    Btrfs: fix the wrong nocow range check · e77751aa
    Miao Xie authored
    The following warning message was outputed when running the 274th case
    of xfstests with nodatacow option:
     BUG: Bad page state in process kswapd0  pfn:1c66f
     page:ffffea0000636848 count:0 mapcount:0 mapping:(null) index:0x78000
     page flags: 0x1000000000100a(error|uptodate|private_2)
    
    It is because the check of nocow range was wrong, we should compare the
    start and end position of the extent with the write position to verify
    if the write position was in the extent, but the current code just used
    the start postion to do the check, so we got the wrong extent and told
    the caller that it was a nocow write. And then when we write back the
    dirty pages, we found we should cow the extent, but at that time, there
    was no space in the fs, we had to the error flag for the page. When
    someone reclaimed that page, the above warning outputed. Fix it.
    Reported-by: default avatarTsutomu Itoh <t-itoh@jp.fujitsu.com>
    Signed-off-by: default avatarMiao Xie <miaox@cn.fujitsu.com>
    Signed-off-by: default avatarJosef Bacik <jbacik@fb.com>
    Signed-off-by: default avatarChris Mason <clm@fb.com>
    e77751aa
inode.c 235 KB