Re: Few questions about (attempting to use) write journal + call traces

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

 



On Thu, May 23, 2019 at 3:42 AM Michal Soltys <soltys@xxxxxxxx> wrote:
>
> On 5/22/19 8:27 PM, Song Liu wrote:
> > On Wed, May 22, 2019 at 6:18 AM Michal Soltys <soltys@xxxxxxxx> wrote:
> >>
> >> Hi,
> >>
> >> As I started experimenting with journaled raids:
> >>
> >> 1) can another (raid1) device or lvm mirror (using md underneath) be used formally as a write journal ?
> >> 2) for the testing purposes, are loopback devices expected to work ?
> >>
> >> I know I can successfully create both of the above (case scenario below), but any attempt to write to such md device ends with hung tasks and D states.
> >>
> >>
> >> kernel 5.1.3
> >> mdadm 4.1
> >> btrfs filesystem with /var subvolume (where losetup files were created with fallocate)
> >>
> >> What I did:
> >>
> >> - six 10gb files as backings for /dev/loop[0-5]
> >> - /dev/loop[4-5] - raid1
> >> - /dev/loop[0-3] - raid5
> >>
> >> Now at this point both raids work just fine, separately. The problem starts if I create raid1 as raid5's journal (doesn't matter whether w-t or w-b). Any attempt to write to a device like that instantly ends with D and respective traces in dmesg:
> >
> > Hi Michal,
> >
> > Yes, the journal _should_ work with another md, lvm, or loop device.
> > Could you please share the commands you used in this test?
> >
> > Thanks,
> > Song
> >
>
> Actually, this seems to be unreleated to underlying devices - the culprit seems to be attempting to write to an array after adding journal, without stopping and reassembling it first. Details below.

Thanks for these experiments. Your analysis makes perfect sense.

Do you think you can continue the  experiments with the write journal before
this issue got fixed?

I am asking because this is not on the top of my list at this time. If
this is not
blocking other important tests, I would prefer to fix it at a later time.

Thanks,
Song

>
> 0) Common start
>
> # cd /var/tmp
> # for x in {0..5}; do fallocate -l 10g $x; done
> # for x in {0..5}; do losetup /dev/loop$x $x; done
>
>
>
> 1) Following from (0), *works*:
>
> # mdadm -C /dev/md/journ -N journ  -n2 -l1 -e1.2 /dev/loop[45]
> (wait for sync / or create with --assume-clean)
> # mdadm -C /dev/md/master -N master  -n4 -l5 -e1.2 --write-journal /dev/md/journ /dev/loop[0123]
> (wait for sync / or create with --assume-clean)
> # mdadm -Es >>/dev/mdadm.conf
>
> # dd if=/dev/zero of=/dev/md/master bs=262144 count=1
> (works)
>
> # mdadm -Ss
> # mdadm -A /dev/md/journ
> # mdadm -A /dev/md/master
>
> # dd if=/dev/zero of=/dev/md/master bs=262144 count=1
> (works)
>
>
>
> 2) Following from (0), *does not* work (adding journal afterwards):
>
> # mdadm -C /dev/md/journ -N journ  -n2 -l1 -e1.2 /dev/loop[45]
> (wait for sync / or create with --assume-clean)
> # mdadm -C /dev/md/master -N master  -n4 -l5 -e1.2 /dev/loop[0123]
> (wait for sync / or create with --assume-clean)
>
> # mdadm --readonly /dev/md/master
> # mdadm /dev/md/master --add-journal /dev/md/journ
>
> # dd if=/dev/zero of=/dev/md/master bs=262144 count=1
> (hangs)
>
> Variation of the above that does work:
>
> - adding journal afterwards
> - stopping both arrays
> - assembly
> - writing
>
>
> 3) Following from (0), *does not* work (adding correct journal after assembly with missing one):
>
> mdadm -C /dev/md/journ -N journ  -n2 -l1 -e1.2 /dev/loop[45]
> (wait for sync / or create with --assume-clean)
> mdadm -C /dev/md/master -N master  -n4 -l5 -e1.2 --write-journal /dev/md/journ /dev/loop[0123]
> (wait for sync / or create with --assume-clean)
> mdadm -Es >>/dev/mdadm.conf
> mdadm -Ss
>
> # mdadm -A --force /dev/md/master
> mdadm: Journal is missing or stale, starting array read only.
> mdadm: /dev/md/master has been started with 4 drives.
>
> # mdadm -A  /dev/md/journ
> mdadm: /dev/md/journ has been started with 2 drives.
>
> # mdadm /dev/md/master --add-journal /dev/md/journ
> mdadm: Journal added successfully, making /dev/md/master read-write
> mdadm: added /dev/md/journ
>
> # dd if=/dev/zero of=/dev/md/master bs=262144 count=1
> (hangs)
>
> Same variation as in (2) - stopping and assembling normally - works as well.



[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux