• Miao Xie's avatar
    Btrfs: don't clear the default compression type · a7e252af
    Miao Xie authored
    We met a oops caused by the wrong compression type:
    [  556.512356] BUG: unable to handle kernel NULL pointer dereference at           (null)
    [  556.512370] IP: [<ffffffff811dbaa0>] __list_del_entry+0x1/0x98
    [SNIP]
    [  556.512490]  [<ffffffff811dbb44>] ? list_del+0xd/0x2b
    [  556.512539]  [<ffffffffa05dd5ce>] find_workspace+0x97/0x175 [btrfs]
    [  556.512546]  [<ffffffff813c14b5>] ? _raw_spin_lock+0xe/0x10
    [  556.512576]  [<ffffffffa05de276>] btrfs_compress_pages+0x2d/0xa2 [btrfs]
    [  556.512601]  [<ffffffffa05af060>] compress_file_range.constprop.54+0x1f2/0x4e8 [btrfs]
    [  556.512627]  [<ffffffffa05af388>] async_cow_start+0x32/0x4d [btrfs]
    [  556.512655]  [<ffffffffa05cc7a1>] worker_loop+0x144/0x4c3 [btrfs]
    [  556.512661]  [<ffffffff81059404>] ? finish_task_switch+0x80/0xb8
    [  556.512689]  [<ffffffffa05cc65d>] ? btrfs_queue_worker+0x244/0x244 [btrfs]
    [  556.512695]  [<ffffffff8104fa4e>] kthread+0x8d/0x95
    [  556.512699]  [<ffffffff81050000>] ? bit_waitqueue+0x34/0x7d
    [  556.512704]  [<ffffffff8104f9c1>] ? __kthread_parkme+0x65/0x65
    [  556.512709]  [<ffffffff813c7eec>] ret_from_fork+0x7c/0xb0
    [  556.512713]  [<ffffffff8104f9c1>] ? __kthread_parkme+0x65/0x65
    
    Steps to reproduce:
     # mkfs.btrfs -f <dev>
     # mount -o nodatacow <dev> <mnt>
     # touch <mnt>/<file>
     # chattr =c <mnt>/<file>
     # dd if=/dev/zero of=<mnt>/<file> bs=1M count=10
    
    It is because we cleared the default compression type when setting the
    nodatacow. In fact, we needn't do it because we have used COMPRESS flag to
    indicate if we need compressed the file data or not, needn't use the
    variant -- compress_type -- in btrfs_info to do the same thing, and just
    use it to hold the default compression type. Or we would get a wrong compress
    type for a file whose own compress flag is set but the compress flag of its
    filesystem is not set.
    Reported-by: default avatarTsutomu Itoh <t-itoh@jp.fujitsu.com>
    Signed-off-by: default avatarMiao Xie <miaox@cn.fujitsu.com>
    Reviewed-by: default avatarLiu Bo <bo.li.liu@oracle.com>
    Signed-off-by: default avatarChris Mason <clm@fb.com>
    a7e252af
super.c 49.8 KB