• Dave Chinner's avatar
    xfs: use iolock on XFS_IOC_ALLOCSP calls · bc4010ec
    Dave Chinner authored
    
    
    fsstress has a particular effective way of stopping debug XFS
    kernels. We keep seeing assert failures due finding delayed
    allocation extents where there should be none. This shows up when
    extracting extent maps and we are holding all the locks we should be
    to prevent races, so this really makes no sense to see these errors.
    
    After checking that fsstress does not use mmap, it occurred to me
    that fsstress uses something that no sane application uses - the
    XFS_IOC_ALLOCSP ioctl interfaces for preallocation. These interfaces
    do allocation of blocks beyond EOF without using preallocation, and
    then call setattr to extend and zero the allocated blocks.
    
    THe problem here is this is a buffered write, and hence the
    allocation is a delayed allocation. Unlike the buffered IO path, the
    allocation and zeroing are not serialised using the IOLOCK. Hence
    the ALLOCSP operation can race with operations holding the iolock to
    prevent buffered IO operations from occurring.
    Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Reviewed-by: default avatarMark Tinguely <tinguely@sgi.com>
    Signed-off-by: default avatarBen Myers <bpm@sgi.com>
    bc4010ec