On Mon, Jun 25, 2018 at 10:03:41AM -0700, Chris Mason wrote: > The vm_fault_t conversion commit introduced a ret2 variable for tracking > the integer return values from internal btrfs functions. It was > sometimes returning VM_FAULT_LOCKED for pages that were actually invalid > and had been removed from the radix. Something like this: > > ret2 = btrfs_delalloc_reserve_space() // returns zero on success > > lock_page(page) > if (page->mapping != inode->i_mapping) > goto out_unlock; > > ... > > out_unlock: > if (!ret2) { > ... > return VM_FAULT_LOCKED; > } > > This ends up triggering this WARNING in btrfs_destroy_inode() > WARN_ON(BTRFS_I(inode)->block_rsv.size); > > xfstests generic/095 was able to reliably reproduce the errors. > > Since out_unlock: is only used for errors, this fix moves it below the > if (!ret2) check we use to return VM_FAULT_LOCKED for success. > > Fixes: a528a2415087 (btrfs: change return type of btrfs_page_mkwrite to > vm_fault_t) > Signed-off-by: Chris Mason <c...@fb.com>
Reviewed-by: David Sterba <dste...@suse.com> also passed the tests here standalone and with the fixup worker fixes. -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html