Re: dm-mirror: fix crash with mirror recovery and discard

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> > +	ti->discard_zeroes_data_unsupported = 1;
> >  
> >  	ms->kmirrord_wq = alloc_workqueue("kmirrord",
> >  					  WQ_NON_REENTRANT | WQ_MEM_RECLAIM, 0);
> 
> This should be split out to a separate patch and properly justified in
> the patch header.  Is there something unique to dm-mirror that renders
> the underlying device's zeroing unreliable?

There are two possible approaches to handling REQ_DISCARD

1. treat REQ_DISCARD as REQ_FLUSH (this is what the patch does) --- i.e. 
do not synchronize it with region states, do not set mirror error on 
failure. In this mode we must assume that there are uninitialized data 
after a flush.

For example, if there is a region that is being resynchronized and we send 
REQ_DISCARD that overlaps this region, there is no guarantee that data in 
this region were zeroed. 

- kcopyd reads a few blocks for resynchronization
- REQ_DISCARD is sent to both mirror legs, both disks overwrites the area 
with zeroes
- kcopyd writes those blocks to the other leg => the blocks are no longer 
zero despite REQ_DISCARD being sent


2. treat REQ_DISCARD as writes (i.e. synchronize it with region states, 
wait until resynchronization finishes, etc.) --- it is possible to do it 
this way to, but if we do it this way, we have to split REQ_DISCARD on 
region boundaries (it is currently split only on target boundaries, 
which is insufficient).


Mikulas

--
dm-devel mailing list
dm-devel@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/dm-devel


[Index of Archives]     [DM Crypt]     [Fedora Desktop]     [ATA RAID]     [Fedora Marketing]     [Fedora Packaging]     [Fedora SELinux]     [Yosemite Discussion]     [KDE Users]     [Fedora Docs]

  Powered by Linux