[dm-devel] [BUG] pvmove corrupting XFS filesystems (was Re: [BUG] Internal error xfs_dir2_data_reada_verify)

Matteo Frigo athena at fftw.org
Thu Mar 7 12:13:27 UTC 2013


Matteo Frigo <athena at fftw.org> writes:

> Well, I don't really know anything about this topic, so I may be
> completely off the mark, but dm-raid1.c:mirror_map() does indeed return
> EWOULDBLOCK, and EWOULDBLOCK is #define'd to be EAGAIN, so it seems to
> me that dm-raid1 does indeed return EAGAIN for "rw == READA" (which I
> assume is read-ahead) if the "region is not in-sync":
>
> 	/*
> 	 * If region is not in-sync queue the bio.
> 	 */
> 	if (!r || (r == -EWOULDBLOCK)) {
> 		if (rw == READA)
> 			return -EWOULDBLOCK;
>
> 		queue_bio(ms, bio, rw);
> 		return DM_MAPIO_SUBMITTED;
> 	}

Dave (and others),

do you have any suggestion on what should be done to fix this bug?

I have tried returning -EIO instead of -EWOULDBLOCK, but xfs does not
like that.  dm-zero.c:zero_map() appears to return -EIO too, so this is
another potential issue.

I have verified that removing the READA special case, treating READA
like READ, fixes the problem:

 		if(0) if (rw == READA)
 			return -EWOULDBLOCK;

Of course this "fix" throws away the baby with the bath water.

I am willing to write and submit a patch, but I would appreciate
directions as to what the correct protocol between xfs and dm is
supposed to be.

Regards,
MF




More information about the dm-devel mailing list