Re: [PATCH 18/18] xfs: use iolock on XFS_IOC_ALLOCSP calls

Mark Tinguely
2012-04-16T15:10:50Z

On 04/13/12 07:11, Dave Chinner wrote:
> From: Dave Chinner<dchinner@redhat.com>
>
> 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: Dave Chinner<dchinner@redhat.com>
> Reviewed-by: Christoph Hellwig<hch@lst.de>
> ---

Looks good.

Reviewed-by: Mark Tinguely <tinguely@sgi.com>