From: Mark-PK Tsai <mark-pk.tsai@mediatek.com>
To: <gregkh@linuxfoundation.org>
Cc: <agk@redhat.com>, <corbet@lwn.net>, <dm-devel@redhat.com>,
<linux-arm-kernel@lists.infradead.org>,
<linux-doc@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<linux-mediatek@lists.infradead.org>, <mark-pk.tsai@mediatek.com>,
<matthias.bgg@gmail.com>, <peter@korsgaard.com>,
<snitzer@kernel.org>, <snitzer@redhat.com>,
<stable@vger.kernel.org>, <yj.chiang@mediatek.com>
Subject: Re: [PATCH 5.15] dm init: add dm-mod.waitfor to wait for asynchronously probed block devices
Date: Fri, 21 Jul 2023 14:38:45 +0800 [thread overview]
Message-ID: <20230721063845.11676-1-mark-pk.tsai@mediatek.com> (raw)
In-Reply-To: <2023072033-hedge-buffing-8862@gregkh>
> On Mon, Jul 17, 2023 at 09:57:28AM +0800, Mark-PK Tsai wrote:
> > > On Sun, Jul 16, 2023, 11:16 AM Greg KH <gregkh@linuxfoundation.org> wrote:
> > >
> > > > On Thu, Jul 13, 2023 at 01:58:37PM +0800, Mark-PK Tsai wrote:
> > > > > From: Peter Korsgaard <peter@korsgaard.com>
> > > > >
> > > > > Just calling wait_for_device_probe() is not enough to ensure that
> > > > > asynchronously probed block devices are available (E.G. mmc, usb), so
> > > > > add a "dm-mod.waitfor=<device1>[,..,<deviceN>]" parameter to get
> > > > > dm-init to explicitly wait for specific block devices before
> > > > > initializing the tables with logic similar to the rootwait logic that
> > > > > was introduced with commit cc1ed7542c8c ("init: wait for
> > > > > asynchronously scanned block devices").
> > > > >
> > > > > E.G. with dm-verity on mmc using:
> > > > > dm-mod.waitfor="PARTLABEL=hash-a,PARTLABEL=root-a"
> > > > >
> > > > > [ 0.671671] device-mapper: init: waiting for all devices to be
> > > > available before creating mapped devices
> > > > > [ 0.671679] device-mapper: init: waiting for device PARTLABEL=hash-a
> > > > ...
> > > > > [ 0.710695] mmc0: new HS200 MMC card at address 0001
> > > > > [ 0.711158] mmcblk0: mmc0:0001 004GA0 3.69 GiB
> > > > > [ 0.715954] mmcblk0boot0: mmc0:0001 004GA0 partition 1 2.00 MiB
> > > > > [ 0.722085] mmcblk0boot1: mmc0:0001 004GA0 partition 2 2.00 MiB
> > > > > [ 0.728093] mmcblk0rpmb: mmc0:0001 004GA0 partition 3 512 KiB,
> > > > chardev (249:0)
> > > > > [ 0.738274] mmcblk0: p1 p2 p3 p4 p5 p6 p7
> > > > > [ 0.751282] device-mapper: init: waiting for device PARTLABEL=root-a
> > > > ...
> > > > > [ 0.751306] device-mapper: init: all devices available
> > > > > [ 0.751683] device-mapper: verity: sha256 using implementation
> > > > "sha256-generic"
> > > > > [ 0.759344] device-mapper: ioctl: dm-0 (vroot) is ready
> > > > > [ 0.766540] VFS: Mounted root (squashfs filesystem) readonly on
> > > > device 254:0.
> > > > >
> > > > > Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
> > > > > Signed-off-by: Mike Snitzer <snitzer@kernel.org>
> > > > > Cc: stable@vger.kernel.org
> > > > > Signed-off-by: Mark-PK Tsai <mark-pk.tsai@mediatek.com>
> > > > > ---
> > > > > .../admin-guide/device-mapper/dm-init.rst | 8 +++++++
> > > > > drivers/md/dm-init.c | 22 ++++++++++++++++++-
> > > > > 2 files changed, 29 insertions(+), 1 deletion(-)
> > > >
> > > > What is the git commit id of this change in Linus's tree?
> > > >
> > > > thanks,
> > > >
> > > > greg k-h
> > > >
> > > >
> > >
> > > Hey Greg,
> > >
> > > This change shouldn't be backported to stable@. It is a feature, if
> > > Mark-PK feels they need it older kernels they need to carry the change
> > > in their own tree. Or at a minimum they need to explain why this
> > > change is warranted in stable@.
> >
> > Thanks for your comment.
> > The reason why we think this should be backported to stable kernel is
> > that it actually fix the potential race condition when make block
> > device probe async in stable kernel.
> > And we'd like to fix this upstream rather than just take it in
> > our custom tree.
>
> Potential race condition, is this actually able to be hit in real life?
Yes it hanppened, and it can lead the kernel init process stuck in
the root wait loop.
Below is the log.
(I add 20 seconds delay in mtk_mci probe to quick reproduce it.)
* Before apply this pactch
[ 0.368594][ T1] device-mapper: init: waiting for all devices to be available before creating mapped devices
[ 21.673047][ T45] probe of 1c660000.mtk-mmc-fcie returned 0 after 21541020 usecs
[ 21.673061][ T45] mtk_mci 1c660000.mtk-mmc-fcie: driver mtk_mci async attach completed: 0
[ 21.680006][ T1] device-mapper: table: 254:0: verity: Data device lookup failed <--------------- start after mtk_mci probe done
[ 21.680012][ T1] device-mapper: ioctl: error adding target to table <--------------------------- won't create /dev/dm-0
[ 21.680067][ T67] mmc0: new HS400 Enhanced strobe MMC card at address 0001
[ 21.680184][ T67] bus: 'mmc': __driver_probe_device: matched device mmc0:0001 with driver mmcblk
[ 21.680192][ T67] bus: 'mmc': really_probe: probing driver mmcblk with device mmc0:0001
[ 21.680500][ T67] mmcblk0: mmc0:0001 016G01 14.5 GiB
[ 21.683404][ T67] mmcblk0: p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 p16 p17 p18 p19 p20 p21 p22 p23 p24 p25 p26 p27 p28 p29
[ 21.686152][ T67] mmcblk0boot0: mmc0:0001 016G01 8.00 MiB
[ 21.687166][ T67] mmcblk0boot1: mmc0:0001 016G01 8.00 MiB
[ 21.687955][ T67] mmcblk0rpmb: mmc0:0001 016G01 4.00 MiB, chardev (238:0)
[ 21.687977][ T67] driver: 'mmcblk': driver_bound: bound to device 'mmc0:0001'
[ 21.688004][ T67] bus: 'mmc': really_probe: bound device mmc0:0001 to driver mmcblk
[ 21.688010][ T67] probe of mmc0:0001 returned 0 after 7819 usecs
[ 21.688166][ T1] Waiting for root device /dev/dm-0...
[ 41.023192][ T1] driver_probe_done: probe_count = 0
... can't exit from the root wait loop
* After apply this patch and add dm-mod.waitfor="PARTLABEL=rootfs"
[ 0.368417][ T1] device-mapper: init: waiting for all devices to be available before creating mapped devices
[ 21.672749][ T45] probe of 1c660000.mtk-mmc-fcie returned 0 after 21540992 usecs
[ 21.672767][ T45] mtk_mci 1c660000.mtk-mmc-fcie: driver mtk_mci async attach completed: 0
[ 21.672774][ T1] device-mapper: init: waiting for device PARTLABEL=rootfs ...
[ 21.672869][ T43] mtk_mci 1c660000.mtk-mmc-fcie: eMMC: HS400 5.1 200MHz
[ 21.679743][ T43] mmc0: new HS400 Enhanced strobe MMC card at address 0001
[ 21.679852][ T43] bus: 'mmc': __driver_probe_device: matched device mmc0:0001 with driver mmcblk
[ 21.679858][ T43] bus: 'mmc': really_probe: probing driver mmcblk with device mmc0:0001
[ 21.680204][ T43] mmcblk0: mmc0:0001 016G01 14.5 GiB
[ 21.682866][ T43] mmcblk0: p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 p16 p17 p18 p19 p20 p21 p22 p23 p24 p25 p26 p27 p28 p29
[ 21.685579][ T43] mmcblk0boot0: mmc0:0001 016G01 8.00 MiB
[ 21.686631][ T43] mmcblk0boot1: mmc0:0001 016G01 8.00 MiB
[ 21.687533][ T43] mmcblk0rpmb: mmc0:0001 016G01 4.00 MiB, chardev (238:0)
[ 21.687559][ T43] driver: 'mmcblk': driver_bound: bound to device 'mmc0:0001'
[ 21.687585][ T43] bus: 'mmc': really_probe: bound device mmc0:0001 to driver mmcblk
[ 21.687591][ T43] probe of mmc0:0001 returned 0 after 7732 usecs
[ 21.687838][ T1] device-mapper: init: all devices available <---------------------------------- start after PARTLABEL=rootfs is ready
[ 21.688155][ T1] device-mapper: verity: sha1 using implementation "sha1-generic"
[ 21.688975][ T1] device-mapper: ioctl: dm-0 (dm-verity) is ready
>
> thanks,
>
> greg k-h
next prev parent reply other threads:[~2023-07-21 6:39 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-13 5:58 [PATCH 5.15] dm init: add dm-mod.waitfor to wait for asynchronously probed block devices Mark-PK Tsai
2023-07-16 15:16 ` Greg KH
2023-07-16 15:36 ` Mike Snitzer
2023-07-16 15:43 ` Greg KH
2023-07-17 1:57 ` Mark-PK Tsai
2023-07-20 17:57 ` Greg KH
2023-07-21 6:38 ` Mark-PK Tsai [this message]
2023-07-21 7:02 ` Greg KH
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230721063845.11676-1-mark-pk.tsai@mediatek.com \
--to=mark-pk.tsai@mediatek.com \
--cc=agk@redhat.com \
--cc=corbet@lwn.net \
--cc=dm-devel@redhat.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mediatek@lists.infradead.org \
--cc=matthias.bgg@gmail.com \
--cc=peter@korsgaard.com \
--cc=snitzer@kernel.org \
--cc=snitzer@redhat.com \
--cc=stable@vger.kernel.org \
--cc=yj.chiang@mediatek.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox