Set the original mapping of the mirror for the copy job to a linear mapping to the source object rather than an error mapping. There is a small window where I/O can come in and hit the error target before the mirror is suspended. The window can easily be hit on heavily loaded systems. Returning an error can cause applications to fail. Solution proposed by: Nikanth Karthikesan Patch author: Antonio A. Rosales --- evms-2.5.5/engine/copy.c 2004-09-02 15:10:01.000000000 -0500 +++ evms-2.5.5-fix/engine/copy.c 2009-01-13 09:19:12.000000000 -0600 @@ -569,10 +569,13 @@ * another device (i.e., the device that will point to the mirror * instead of the source object). The device must have an active map in * order to have a size. But the mirror isn't ready to run until - * copy_start() is called. So, load the mirror device with an error map - * and suspend the device. + * copy_start() is called. So, load the mirror device with a linear map + * over the src and suspend the device. */ - target = dm_allocate_target(DM_TARGET_ERROR, 0, mirror->size, 0, 0); + target = dm_allocate_target(DM_TARGET_LINEAR, 0, mirror->size, 0, 0); + target->data.linear->major = copy_job->src.obj->dev_major; + target->data.linear->minor = copy_job->src.obj->dev_minor; + target->data.linear->start = copy_job->src.start; if (target != NULL) { /*