• Christoph Hellwig's avatar
    xfs: fix error returns from xfs_bmapi_write · 6773da87
    Christoph Hellwig authored
    xfs_bmapi_write can return 0 without actually returning a mapping in
    mval in two different cases:
    
     1) when there is absolutely no space available to do an allocation
     2) when converting delalloc space, and the allocation is so small
        that it only covers parts of the delalloc extent before the
        range requested by the caller
    
    Callers at best can handle one of these cases, but in many cases can't
    cope with either one.  Switch xfs_bmapi_write to always return a
    mapping or return an error code instead.  For case 1) above ENOSPC is
    the obvious choice which is very much what the callers expect anyway.
    For case 2) there is no really good error code, so pick a funky one
    from the SysV streams portfolio.
    
    This fixes the reproducer here:
    
        https://lore.kernel.org/linux-xfs/CAEJPjCvT3Uag-pMTYuigEjWZHn1sGMZ0GCjVVCv29tNHK76Cgg@mail.gmail.com0/
    
    which uses reserved blocks to create file systems that are gravely
    out of space and thus cause at least xfs_file_alloc_space to hang
    and trigger the lack of ENOSPC handling in xfs_dquot_disk_alloc.
    
    Note that this patch does not actually make any caller but
    xfs_alloc_file_space deal intelligently with case 2) above.
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    Reported-by: default avatar刘通 <lyutoon@gmail.com>
    Reviewed-by: default avatar"Darrick J. Wong" <djwong@kernel.org>
    Signed-off-by: default avatarChandan Babu R <chandanbabu@kernel.org>
    6773da87
xfs_da_btree.c 74.7 KB