Re: thin pool powerfail tests and data loss

Zdenek Kabelac <[email protected]> Fri, 13 Sep 2024 15:56:46 +0200
Newsgroups dev.linux.lists.lvm-devel
Message-ID <[email protected]>
Dne 13. 09. 24 v 7:55 Lakshmi Narasimhan Sundararajan napsal(a):
> Hi Ming,
> I am still collecting results, so I will present findings that are
> confirmed so far.
> There is some good news too.
> 
> On Fri, Sep 13, 2024 at 1:11 AM Ming Hung Tsai <[email protected]> wrote:
>>
>> Hi,
>>
>> On Wed, Sep 11, 2024 at 12:05 AM Lakshmi Narasimhan Sundararajan
>> <[email protected]> wrote:

> My application that is consuming the thin device pumps IO traffic
> directly on the raw block device.
> My application also keeps a journal record outside the thin pool and
> after power recycled, reading the data back
> did not guarantee sync consistency.
> 
> I wrote a sample program that is trying to recreate this outside my application.
> here it is: sulakshm/iotest: iotest (github.com)
> I am still refining it, as I have not seen the problem with this tool yet.
> But the logic is similar to how my application consumes thin dev; and
> my app can reproduce this very easily.
> 
> As I said before, I am still collecting additional information from
> many internal tests.
> So far, I can see this problem even in 6.5 kernel.
> 
> The latest distro/linux kernel where this problem is seen.
>> 6.5.0-15-generic #15~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Fri Jan 12 18:54:30 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
> 
> 
> There is a workaround to this problem that is looking promising, tests
> ongoing still.
> 
> The sync point from my application is a sync(fd) of the thin dev.
> This has proven insufficient.
> In addition, I had to perform "dmsetup suspend pool -> dmsetup resume pool".
> This guarantees sync point consistency.
> 

Hi

Not exactly sure what your app is all exactly doing - however there is 
cut&paste from 'fsync()'  manpage:

---
Calling fsync() does not necessarily ensure that the entry in the directory 
containing the file has also  reached  disk.   For  that  an  explicit
fsync() on a file descriptor for the directory is also needed.
---

For this purpose our 'test suite' app basically  'opens' whole device and 
fsync and close it - to ensure synchronization point flush.

Thus 'suspend & resume' of the whole thin device could be possibly unnecessary 
- just do a fsync() on blockdevice fd.


You can also play fun games with 'fsfreeze' operation.

Regards

Zdenek